APP下载

基于QQ物联的无线LED显示屏设计①

2019-01-18孙晓东王治强杨伟光

计算机系统应用 2019年1期
关键词:控制板物联串口

孙晓东, 王治强, 杨伟光

(大连东软信息学院 智能与电子工程学院, 大连 116023)

LED显示屏在目前已经是一个非常成熟的产品,通过LED显示屏可以用图文方式进行信息发布, 是当今很重要的宣传展示手段. 传统的LED显示屏显示的信息是通过USB接口文件拷贝进行信息更新的, 有更新速度慢, 操作不便利的行业痛点.

QQ物联无线LED显示屏是一种快速、方便更新LED屏幕信息的智能硬件. 是将QQ物联技术和LED屏幕结合到一起, 给传统LED显示屏插上物联网的翅膀, 一跃成为可以远程操控、安装使用便利、有大数据服务的智能设备. 在操作方法上, 可以使用手机QQ随时随地编辑和发布信息, 还可以对常用词条一键选择发送, 或者基于模板编辑发送等贴心服务[1-4].

1 系统设计

系统体系架构如图1所示. 首先手机QQ客户端与QQ物联平台建立连接, 用户通过QQ聊天窗口发送文本信息, 通过WiFi将数据发送到QQ物联云平台.QQ物联模块能够将QQ物联云上的信息通过WiFi传递给LED控制板. LED控制板进行LED显示屏的显示控制, 最终将手机QQ客户端中输入的信息按照设定的模式正确的在LED显示屏中显示出来.

图1 系统结构框图

1.1 QQ物联无线LED显示屏系统基本功能需求

WiFi入网功能: QQ物联板需要在QQ物联平台注册账号后, 在云平台中添加LED点阵屏设备, 并通过QQ物联云平台提供的设备ID以及QQ物联平台提供的秘钥生成工具生成的SN序列号生成设备的二维码, 使用手机QQ客户端通过扫描二维码, 使QQ物联板通过手机QQ端选择要加入的WiFi热点以及输入密码使设备加入到网络中, 这样才能接收到手机QQ聊天界面发送来的信息, 以及将信息发送到LED控制板上[5].

LED屏显示功能: LED控制板需要接收到QQ物联板端发送过来的信息, 将信息进行字符匹配, 然后将字符取模得到的值放入编写好的LED点阵屏的驱动函数, 使LED点阵屏显示出从QQ物联板端发送过来的信息.

汉字显示功能: 在QQ物联板发送过来的文本信息中有需要有汉字的数据发送, 在LED控制板中需要接收到这些文本信息且需要取出这些汉字的的字模,从而显示出对应的汉字.

LED显示屏滚动显示: 在LED点阵显示中, 不仅需要静态内容的显示, 也需要加入滚动显示, 来增加LED点阵显示的多样性.

设备绑定功能: 首先生成QQ物联板设备的二维码, 并在代码中修改QQ物联DATA.C中的参数, 使用手机QQ客户端通过扫描二维码, 完成绑定, 只有QQ物联板与手机QQ绑定后, 才能使用QQ物联平台中提供的接收QQ消息的功能[6].

WiFi搜索以及密码保存功能: 在QQ物联板断电之后, 重新上电不需要在进行选择网络和再次输入密码,QQ物联板能够直接自动加入网络.

串口收发功能: 在QQ物联板接收到手机QQ发送的消息后, 需要通过串口通信将QQ消息发送到LED控制板上.

1.2 硬件结构

系统使用了两款STM32芯片. 其中一个用来作为QQ物联板的主控芯片, 另一个用来作为LED点阵屏的控制芯片[7]. 在QQ物联板上放置一个QQ物联集成的WiFi模块手机QQ客户端和QQ物联设备通过WiFi网络通信将数据发送到腾讯云, 并进行数据传输, QQ物联板WiFi模块收到数据后, 通过UART通信方式将数据发送到LED控制板上, LED控制板再根据数据显示相对应的内容. 在QQ物联WiFi模块、QQ物联模块、QQ物联云平台共同工作的情况下, 实现设备绑定以及WiFi连入网络的功能[8].

1.3 软件结构

用户代码流程设计如图2所示. 首先QQ物联板中, 要对通信串口、LED指示灯引脚、WiFi模块进行初始化操作, 然后重置事件发生队列、开启队列, 最后等待事件发生, 以及对事件进行处理. 在LED控制板中, 对系统时钟、中断、串口通信以及LED点阵屏驱动进行初始化[9]. 随之, 等待QQ物联板中发送QQ收到的消息, 触发串口接收中断, 并处理中断, 将数据信息显示到LED点阵屏幕上.

图2 软件代码流程图

软件控制中主要包括3个模块的设计, 在下面章节中分别介绍.

1.3.1 QQ物联端数据包设计

QQ物联端系统软件功能主要包括登录WiFi联网、设备信息配置、串口功能[10]. 其QQ物联板WiFi数据包格式如下所示.

(1) 包头 (header): 固定为 0X6688.

(2) 长度(len): 是指从 cmd 开始到整个数据包结束所占用的字节数包含校验 (checksum). 由于 QQ物联的数据包可能超过 255, 因此这里升级成 2 Byte, 分别是高 8 位和低 8 位, 实际长度就是 len_high*256+len_low.

(3) 命令(cmd): 控制的命令.

(4) 消息序号(SN): 命令发送方在每次发送命令时, 对 SN 加一. 数据接收方收到数据, 做相应数据返回时将接收到的SN一起返回. 给发送方判断其相应的是哪一条请求.

(5) 传输数据(Payload): 真正的传输数据, 内部可能包含子命令, 这个根据实际的命令而定.

检验和(checksum)的计算方式为把数据包按字节求和得出的结果对 256 求余(不含包头0X6688两个字节).

QQ物联板在与LED控制板通信时, QQ物联板发送的数据中去掉了包头、命令、消息序号等数据位.整体的数据包种只有信息数据、0x00()、0x0D( )、0x0A( ). 其中0x00()作为字符终止. 0x0D( )和0x0A( )共同决定了数据的传输结束. 数据包缓存大小设计为1024 Byte, 可以显示500个汉字或者1000个英文字符, 充分满足实际应用需求.

1.3.2 屏控制端模块设计

LED屏幕控制端软件功能主要为使能LED屏幕,并使其能显示文本信息. 在LED屏幕控制端中, 首先要配置好LED屏幕的引脚并对引脚进行定义. 分别对74HC138芯片(行驱动)和74HC595芯片(列驱动)的扫描方式和驱动方式进行打包, 扫描方式采用的静态扫描. 根据75HC595可以联级的特点, 在写入数据时需要一次性将上半屏4组16*16的点阵屏写入内容,以能显示不同的汉字, 同时要把下半屏数据输入的接口留出[11].

在接收到QQ物联板发来的信息后, 要做好UART中断处理, 根据判断数据是否是0x0D( )和0x0A( ), 从而停止接收, 消除中断, 清除标记. 将接收到了数据存入缓存数组中, 并发送到LED点阵显示的函数里.

1.3.3 QQ物联模块设计

为了使WiFi模块入网, 在QQ物联板模块中首先要编写好设备的PID、SN序列号、服务公钥和私钥文件, 文件中的参数要与QQ物联平台上的设备参数相匹配, 这样才能通过WiFi模块获取在QQ物联平台中选择的功能, 以及完成对设备的入网和绑定. 此外在实现WiFi入网中还要设计按键事件, 例如配置网络与设备绑定按键. 设计网络状态自检, 判断网络状态和连接网络的模式, 实时访问网络状态情况, 并反馈到串口中, 使用户能够对设备进行调试[12]. 设计QQ物联板与LED控制板的串口通信, 将QQ物联中原来带有的485通信通过改变硬件电路改变成普通的UART串口通信, 在修改485通信中的数据格式以及数据长度来发送出真正要发送的信息.

2 系统实现

终端设备的开发工作主要在QQ物联模块和LED显示模块上进行, 采用主要技术为单片机开发技术[13].开发环境系统选择Windows8.1x64, 在IAR FOR ARM软件上进行开发工作[14]. QQ物联云端功能, 主要基于腾讯的QQ物联平台进行注册与配置, 手机APP采用手机QQ绑定注册好的设备即可, 无需进行额外开发. 系统结构图如图3所示.

图3 实际系统结构图

2.1 QQ物联WiFi入网功能实现

QQ物联板二维码生成后, 使用手机QQ客户端通过扫描二维码, 使QQ物联板通过手机QQ端选择要加入的WiFi热点以及输入密码使设备加入到网络中.在代码中在Read_Wifi_STATUS中, 读取到WiFi当前状态是否处于联网状态, 通过Get_UART_Data得到命令是否认为进入配网. 再调用wifi_Goto_Smartlink函数, 进入SmartLink配网模式.

2.2 QQ物联WiFi设备绑定功能实现

QQ物联平台中给每一台设备都设定了一个PID号, 通过官方提供秘钥生成工具生成QQ物联设备需要的SN序列号和公钥、秘钥, 以及共享服务器秘钥和公钥, 并生成一个二维码, 通过扫码就可以与设备进行绑定. 在软件中我们需要对官方提供的demo代码中修改SH4H_QQ_DATA.C文件中, 相关PID、SN、秘钥、公钥等参数, 这些参数通过WiFi通信与云平台上的参数与之匹配. 匹配成功后, 就可以完成绑定.

2.3 LED屏幕显示功能实现

LED点阵屏幕的行显示和列显示均为静态扫描,Write_HC138函数中, 以SWITCH方式进16行的行选择, 在Write_74HC595函数中, 进行列显示以及74HC595的移位, 函数中HC595_DS1_GPIO_PIN和HC595_DS2_GPIO_PIN分别控制着LED屏幕的上半屏和下半屏的显示. 在屏幕显示中以16*16位显示单位, 每半屏能显示4个汉字[15].

2.4 LED屏幕滚动显示功能实现

在汉字取模的32个数据中, 2*n的模值为汉字的左半部分模值, 2*n+1的模值为汉字的右半部分模值.将左右部分重新排序放入数组中, 通过数据移位将重新分配的模值数组一位一位的放入显示的函数中.

2.5 LED屏幕汉字显示功能实现

在QQ物联板发送过来的文本信息中有需要有汉字的数据发送, 在LED控制板中需要接收到这些文本信息且需要取出这些汉字的的字模, 在汉字取模软件中, 通过设置LED点阵屏格式大小、汉字字体、字体大小、高度与宽度、LED点阵屏取模方式、LED显示格式(阴码或阳码)生成汉字的模值, 并将汉字的模值放入LED驱动函数中, 从而显示出对应的汉字[16].

2.6 串口通信功能实现

在QQ物联板中将原485通信改造成uart通信,通过改变发送数据长度, 去除掉原数据中不需要的信息, 完成QQ物联板中的数据的发送.

在LED控制端中, 直接配置uart的串口, 设置串口接收中断, 以及中断处理函数, 完成LED控制端的接收信息功能. 通过以上两个串口通信的配置, 完成系统中整个的串口通信功能.

3 系统调试

在QQ物联显示屏软件、硬件系统的开发过程中,问题较多的出现在硬件设计和硬件驱动程序的调试上面. 下面介绍调试过程中遇到的问题和解决方法.

3.1 LED屏幕显示的调试

在调试LED点阵屏屏幕显示过程中, 在单个汉字调试中, 会使8组16*16LED点阵屏显示相同内容, 并且会隔行显示. 通过调试分析发现隔行显示是因为在单个汉字显示中595的移位会多加一位; 在显示内容上, 是因为将控制上半屏和下半屏同时进行了相同数据传输, 即写给上半屏的数据同时也发送到了下半屏数据引脚上. 正常情况下, 应将上半屏输出和下半屏输出分开输出, 并分开输入汉字取模的数据. 在汉字取模处理过程中, 显示不同的汉字需要一次性将汉字的模值发送到74HC595的操作中, 而不是多次调用74HC595操作函数来显示数据, 否则会出现汉字的重叠和8组16*16点阵屏信息相同的现象.

3.2 设备绑定的调试

在设备绑定过程中, 出现了设备成功入网, 但绑定设备未成功的问题, 此问题是由于QQ物联配置平台中的PID、SN序列号与二维码不匹配造成的, 通过与QQ物联开发人员和技术支持人员进行讨论, 重新进行了设备的公钥、秘钥、SN序列号、服务器共享公钥、秘钥的生成, 并重新生成与PID、SN序列号相对应的二维码. 在程序SH4H_QQ_DATA.C文件中, 修改相应的SN、公钥私钥等参数, 重新将程序下载进开发板中, 最终完成设备的绑定.

3.3 串口信息调试

在QQ物联板发送消息后, 出现了无显示完整数据和真正数据的截取问题. 通过串口调试助手的逐步测试, 发现问题是由于数据长度的不正确导致了数据显示不完整和截取不正确的问题.

在LED控制板的调试中, 出现了只能触发一次中断的情况. 触发一次中断的情况的是由于中断标志位没有及时清除和数据标志没有复位导致if条件判断不成立.

在QQ物联板与LED控制板联合调试中, 出现了LED控制板接受的字符串与发送端的字符串不同. 这是由于两个平台的汉字编码不同导致了发送端发送过来的汉字变成了其他的乱码. 这个问题通过将LED控制板中接受信息处理并进行匹配的C文件的编码格式改变成UTF-8格式即可解决.

4 系统测试

测试按照功能模块进行分别测试, 具体分为: 数据发送测试, 数据接收测试, LED屏幕显示功能测试,WiFi模块联网功能测试和QQ物联模块设备绑定功能测试. 在各个模块都正常工作的前提下, 对系统各功能进行测试, 对测试结果进行记录与分析.

4.1 数据发送

功能描述: QQ物联模块中WiFi模块连入网络后,使用QQ客户端, 在聊天窗口中发送数据给客户MCU,WiFi模块可以正常接收数据. 测试方法使用了数字发送、字母发送、汉字发送. 测试过程如下:

输入: QQ物联模块的WIFI模块在串口调试模式下输入“123456789”.

设计输出: 使用串口调试工具, 在串口调试工具的窗口中可以收到QQ客户端发出的“123456789”.

输入: QQ物联模块的WiFi模块在串口调试模式下输入“ABCDEF”.

设计输出: 使用串口调试工具, 在串口调试工具的窗口中可以收到QQ客户端发出的“ABCDEF”.

输入: QQ物联模块的WiFi模块在串口调试模式下输入“电子工程”.

设计输出: 使用串口调试工具, 在串口调试工具的窗口中可以收到QQ客户端发出的“电子工程.

4.2 数据接收

功能描述: LED点阵屏控制模块中使用串口接收QQ物联模块发来消息, 正常接收数据. 测试方法使用了数字接收及字符匹配、字母接收及字符匹配、汉字接收及字符匹配. 测试过程如下

输入: 使用串口助手模拟QQ物联板发送QQ消息“123456789”.

设计输出: LED点阵显示屏接收到信息后, 触发接收中断, 并表示LED指示灯闪烁.

实际测试结果: 发送信息后, LED控制端触发接收中断, 字符匹配成功, LED指示灯闪烁.

输入: 使用串口助手模拟QQ物联板发送QQ消息“ABCDEF”.

设计输出: LED点阵显示屏接收到信息后, 触发接收中断, 并表示LED指示灯闪烁.

实际测试结果: 发送信息后, LED控制端触发接收中断, 字符匹配成功, LED指示灯闪烁.

输入: 使用串口助手模拟QQ物联板发送QQ消息“电子工程”.

设计输出: LED点阵显示屏接收到信息后, 触发接收中断, 并表示LED指示灯闪烁.

实际测试结果: 发送信息后, LED控制端触发接收中断, 字符匹配成功, LED指示灯闪烁.

4.3 LED屏幕显示功能测试

功能描述: 测试模块使能够正常显示QQ客户端发来的文本消息.

输入: 使用手机QQ客户端发送“数字标牌”字样,输入“电子工程”字样.

设计输出: LED点阵屏能够显示QQ发来的消息,以及完成命令动作.

实际测试结果: LED点阵显示屏能够正常显示手机QQ客户端发来的文本消息.

4.4 WiFi模块联网功能测试

功能描述: 通过设备绑定, 使WiFi模块能够连入网络.

输入: 按下QQ物联模块中的配网按键.

设计输出: 在串口调试软件中, 可以看到WiFi连接LOG信息, 以及WiFi连接是否成功信息.

实际测试结果: WiFi模块能够连入网络.

4.5 QQ物联模块设备绑定能测试

功能描述: 通过设备绑定, 使设备成为QQ好友并能够与设备进行沟通.

输入: 扫描有PID与SN序列号生成的二维码, 键入WiFi密码, 进行设备绑定.

设计输出: 在QQ设备好友中可以看到QQ物联设备.

实际测试结果: 在QQ设备好友中能够看到QQ物联设备在线.

各个模块通过功能测试后, 进行整体测试. 通过在手机终端向QQ客户端发送“数字标牌”信息, LED显示屏实时显示出该消息, 表明测试通过. 经实际测试, 从手机QQ发送到LED显示屏完成更新, 延迟在5 s以内, 可以满足实际应用. 实物系统及操作界面图如图4所示.

图4 实际系统及操作界面图

5 结论

本文完成了基于QQ物联的无线LED显示屏的创新设计, 完成利用先进物联技术对传统硬件设备的智能化升级. 本文设计将对类似的物联网应用有参照和借鉴意义. 最后再将基于QQ物联框架的系统设计要点总结如下:

(1) QQ物联模块要采用独立设计, 根据应用场景选择WiFi模块或者GPRS模块, 在物联模块出现故障时不会影响主控板功能.

(2) 物联模块与硬件主控模块之间的接口设计要简洁可靠, 根据通信数据量可以采用I2C、RS232串口或者SPI接口.

(3) QQ客户端根据需求可以选择用轻APP开发方式创建个性化的操作页面, 复杂需求可以自定义页面.

猜你喜欢

控制板物联串口
王永岗:改造物联服务链助力现代农业
基于API函数库实现串口数据通信的分析与设计
基于EM9000工控板高性能双串口通信模型设计与实现
自安全物联感知网方案:让联接更可信
谈谈DAM中波发射机的单元电路调整
一种集成脚本控制单元的设计与实现
一种全隔离的无刷直流电机的反馈制动控制板的研究
MCS—51单片机中的多串口通讯技术的应用
物联智能家居组合
基于VC串口通信的实现