一种基于MQTT协议的实验室使用登记系统软硬件设计
2021-05-24陈儒敏张开金刘佳辉
陈儒敏,于 静,张开金,李 泽,刘佳辉
(1.北京科技大学天津学院 信息工程学院,天津 301830;2.山东高图测绘信息科技有限公司,山东 德州 253072)
0 引 言
随着教育部对高等院校大学生创新创业教育的大力推进,各高校也都针对性地设立或开放了一些创新性实验室,这些实验室在培养学生创新精神与应用能力方面发挥着重要的作用[1]。对于信息化没有全面覆盖的高校,实验室使用登记一直是件令人头疼的事情。传统纸质登记效率低,学生不爱填写。直接购买现成的考勤机,除了成本因素外,还无法与现有系统兼容,后续还需要人工导出数据和统计,增加人力成本。
本设计基于ESP32平台和MQTT协议设计了一套实验室自动登记系统。系统分读卡器终端和服务器端。读卡器通过射频卡读取模块读取使用者校园卡、带NFC功能的手环或手机的基本信息,将信息通过MQTT协议发送到服务器,接收程序通过服务器接收信息,存入数据库,实现实验室使用的自动登记。
1 系统硬件设计
系统读卡器终端由ESP32主控模块、射频卡读取模块、显示模块、按键、RGB指示灯、蜂鸣电路和供电电路组成,硬件结构如图1所示。为最大程度利用现有模块,同时降低调试难度和方便后续扩展,将ESP32主控、供电单元、按键与蜂鸣器单元做成一块主控板,留出接口,外接显示模块与射频卡读取模块。
图1 系统硬件结构
1.1 主控板电路板电路设计
主控板包括ESP32主控的最小系统电路,作为整个系统供电的稳压电路以及按键与蜂鸣器的驱动电路。
1.1.1 ESP32最小系统
ESP32最小系统电路如图2所示。主控采用乐鑫出品的ESP-WROOM-32模块,该模块自带蓝牙和WiFi功能,同时集成了天线开关、射频Balun(平衡-非平衡转换器)、功率放大器、低噪声放大器、滤波器以及电源管理模块[3]。最小系统电路主要是使该模块能稳定工作的最小电路,除了复位电路外,还留出了烧写电路接口,当需要烧写时,将J1接口用短路帽短接,复位后进入烧写模式,再使用串口通过CN3烧写程序即可。平时还可通过CN3与模块进行串口通信。
图2 ESP32最小系统电路
1.1.2 供电电路设计
供电电路主要给整个系统提供电源,系统中的器件和模块使用5 V和3.3 V两种电压。这里使用USB-C接口,通过5 V电源适配器直接提供5 V电压,然后经过稳压芯片AMS1117降为3.3 V供给需要的器件和模块。供电电路如图3所示。
图3 供电电路
1.1.3 其他电路设计
为了后期可以进行人机交互,系统设计两个按键,平时输入为高电平,按下为低电平。RGB LED使用的是WS2812,可以使用一个引脚控制,这里主要用来指示系统的不同状态,蜂鸣器电路用于读卡成功指示。按键、RGB LED、蜂鸣器电路如图4所示。系统的射频卡、显示屏和TF卡读写是独立模块,为此需要在主控板上留出接口,如图5所示。
图4 按键、RGB LED、蜂鸣器电路
图5 接口电路
1.2 射频卡读取模块
因为大部分的应用场景主要是用读取校园卡的ID信息,考虑到成本因素,这里采用NXP 公司的RC522方案,其主要支持ISO/IEC 14443A和MIFARE通信协议,可以满足要求。读取模块使用SPI接口与主控相连。为了满足以后的扩展要求,特别是读取带NFC功能的设备信息,还设计了PN532射频方案的通信接口,其除了支持ISO/IEC 14443A/MIFARE,还支持ISO/IEC 14443B、ISO/IEC18092,ECM340、Felica等协议。主控板中留出了I2C接口与PN532模块进行通信。
1.3 TFT显示和TF读写模块
读卡器终端使用2.0英寸TFT彩屏模块显示工作过程中的基本信息,其采用ILI9225芯片驱动方案,最大可以支持176×220分辨率,262 144种颜色。模块还带有一个TF卡接口,这里用来连接TF卡,设备离线时可暂存信息。主控板使用EPS32的HSPI接口与ILI9225相连,使用普通SPI口与TF卡相连。
2 系统软件设计
读卡器终端使用MQTT协议与服务器连接,传送打卡信息。MQTT是一个轻量级的发布/订阅模式的消息传输协议,是目前最流行的物联网传输协议之一。协议的特点是轻巧、开放、简单和规范,比较适合环境受限的机器与机器通信场景,在常见的物联网应用环境也都有应用[4]。硬件端软件使用Arduino环境开发。
读卡器终端软件主要需要完成参数读取、连接网络、检测卡片、信息显示、向MQTT服务器发送打卡信息、OTA升级等功能。整体程序框架如图6所示。
图6 系统工作整体流程
2.1 参数设置与读取
针对不同的使用环境,其WiFi名称(SSID)、密码、设备MQTT主题等参数会不一样,这里采用将参数先存入ESP32的E2PROM中,系统上电后读取,再调用相关函数进行初始化。E2PROM中参数格式包括读卡器类型、WiFi名称、WiFi密码、MQTT服务器地址、服务器端口号、服务器账号、服务器密码、设备发布主题。其中读卡器类型为1位,0表示RC522方案读卡器,1表示PN532方案读卡器。其余字段均不限定长度,但每个字段的头两位表示该字段所带信息的位数,例如WiFi的名称是8位,则该字段头两位应该是08,后面再跟上WiFi名称。程序中根据前面的字段以及位数信息依次推算出后续参数信息。
通过按键配合ESP32自带的蓝牙功能可以重新写入上面的参数,这里是利用ESP32的蓝牙串口功能。系统上电启动后,会检测2号按键是否按下,如有按下则进入该模式,可以用PC或手机连接设备蓝牙,借助串口调试助手之类的工具对参数进行设置。
2.2 卡片检测程序设计
系统上电后连接网络,如果没有检测到按键,则会接着初始化其他参数,然后进入正常工作模式,主要包括读取网络时间,循环检测是否有卡片,显示屏及RGB灯信息显示等。其程序流程如图7所示。
图7 读卡器正常工作流程
这里会直接从NTP服务器读取时间,该信息用于设置ESP32本身RTC时间,没有网络时可以将刷卡的时间信息暂存到TF卡中,网络恢复后再发送回服务器。由于程序运行较快,可能存在一张卡片多次读取的情况,程序中设置了10 s左右的时间间隔,这段时间如果再次检测到同一张卡片,则不记录该卡片信息。
2.3 OTA功能设计
为方便后续升级,还设计了OTA(Over The Air),即空中下载功能,在程序初始化前按住按键1,联网成功进入OTA模式,并在显示屏上显示设备IP。通过1台与该设备处于同一局域网下的PC机,使用浏览器对设备进行固件升级。另外,主控板上还留有对ESP32的烧写电路,在无法进行OTA时使用。
2.4 服务器及数据记录
系统使用MQTT协议进行消息传送,需要1台MQTT服务器进行消息转发,可以使用百度、阿里云提供的物联网平台,也可在现有服务器上搭建一个MQTT服务。这里使用的开源程序为ActiveMQ,ActiveMQ是Apache基金会推出的消息中间件程序,可支持多种协议,包括MQTT协议。
数据的接收使用Python语言编写,使用第三方库PAHO-MQTT可以实现MQTT信息的订阅、收取和发送。这里,Python脚本会在启动后订阅每台设备的主题,然后在后台监控消息,将传递过来的消息内容加上接收日期和时间一起记录在数据库中。
3 功能实现
系统的实物包括主控板的PCB设计与电路设计,PCB的设计图如图8所示,实物如图9所示。
图8 主控板PCB图
图9 实物
设置好MQTT服务器后,使用MQTT.fx软件订阅读卡器的主题,然后刷卡测试,软件端收到消息以及显示屏显示内容如图10所示。
图10 读卡器运行状态图
服务器端接收脚本后会存入数据库,程序调试输出与数据库中的数据如图11所示。
图11 数据库信息
4 结 语
实验室使用登记是实验室管理的一个重要环节。本文基于MQTT协议与ESP32平台设计了一种实验室登记系统,完成了系统的硬件电路设计、读卡器实物制作,编写了相应的硬件控制程序、接收程序,并搭建了服务器。经验证,所设计系统可以实现规定功能,自动完成实验室使用登记工作。