基于ESP8266WiFi模块和MQTT协议的物联网传感节点设计
2019-07-29丘源经本钦李精华
丘源 经本钦 李精华?
摘 要:设计了一种基于ESP8266 WiFi模块和MQTT协议的物联网传感节点,该节点具有数据采集、数据上报和远程控制功能。传感节点通过轻量级物联网MQTT协议与数据采集中心通信,数据采集中心能够自动识别和实时显示传感节点的采集数据。实验证明,所设计的传感器节点可靠、扩展性强、通用性好。
关键词:ESP8266;MQTT协议;物联网;传感器节点;远程控制;实时显示
中图分类号:TP393 文献标识码:A 文章编号:2095-1302(2019)06-00-03
0 引 言
随着物联网技术日趋成熟,物联网已被广泛应用在医疗、交通与物流、能源与公用事业、零售业等领域[1]。据思科公司(Cisco)思科视觉化网络指数显示,到2022年全球有超过半数设备和连接将会是机器对机器(M2M)的互联,比2017年增加34%。智能音箱、固定设备、移动设备及其他物件的连接数将从2017年的61亿增至2022年的146亿[2]。互联设备的数量和类型越来越多,应用环境日趋复杂,实现资源有限或带宽有限环境下的传感器联网和保证传感数据的可靠传输成为物联网技术应用应重点考虑的问题之一。
物联网传感节点作为物联网和物理世界交互的边界节点,负责信息的采集和简单处理,与将数据传输到应用层进行数据分析和处理[3]。传感器节点的通信方式主要分为近距离通信和远距离通信,传感器节点之间一般采用短距离无线通信,如蓝牙,ZigBee,WiFi等;传感器与物联网云服务器或应用服务器采用远距离通信,如固网、移动网络(2G/3G/4G)、NB-IoT网络等。无线网络连接类型(WiFi、移动网络)是主流。现在越来越多的应用场合要求传感器节点自带接入网关,即支持物联网网络接入服务。由于传感器节点资源有限,受CPU处理能力、内存等限制,通常在LwIP协议栈上采用轻量级物联网传输协议。目前,应用最广泛的物联网标准传输协议包括MQTT、CoAP。MQTT是一种在TCP/IP协议上的基于订阅/发布模式的轻量级传输协议,适用于引入第三方云平台的物联网应用。CoAP即约束应用协议,类似HTTP,是一种文档传输协议,也是一种基于请求/响应的客户端/服务器端轻量级UDP传输协议,适合将物联网应用嵌入到现有Web服务器中[4]。
本文基于ESP8266 WiFi模块和MQTT协议设计了一种低成本物联网传感节点,以ESP8266嵌入式处理器为核心,采用AM2302传感器采集温湿度数据,进行简单处理后将传感数据通过MQTT协议发布到百度天工物联网云平台IoTHub。数据采集中心采用Visual C#实现,能自动识别传感节点和订购传感器的数据,可保存、处理和显示传感节点的温湿度数据。数据采集中心可通过云平台IoTHub下发命令,实现传感器节点参数配置并让传感节点执行指定操作(打开/关闭继电器)。传感器节点性能可靠,扩展性强,通用性好。
1 系统总体结构系统由传感节点、数据采集中心和百度天工物联网云平台组成,如图1所示。传器节点由ESP8266和AM2302构成,实现温湿度的采集和上报;数据采集中心基于Visual C#开发,实现传感数据的接收、存储、分析和显示;百度天工物联网云平台IoTHub作为MQTT消息代理,负责主题订阅管理、消息转发和缓冲,实现传感节点与数据采集中心的信息交互。传感节点与数据采集中心的交互数据类型为JSON格式。
2 传感节点设计传感节点负责采集感知对象相关信息,并通过相应的通信模块将数据通过MQTT消息代理推送到远端数据采集中心。
2.1 硬件设计传感节点以ESP8266EX WiFi模块为核心,通过I/O外接传感器AM2302及其他设备。传感节点硬件框图如图2所示。
2.2 软件设计
传感节点软件基于NodeMCU固件开发。NodeMCU固件使用Lua脚本语言编程,在乐鑫ESP8266 Non-OS SDK上开发而来。NodeMCU固件封装了ESP8266硬件操作的应用编程接口函数API,同时还提供I2C,SPI,UART等外设总线驱动函数及OLED/TFT显示驱动、各种类型传感器驱动、网络协议库(TCP/UDP,HTTP,MQTT等),开发者无需了解底层硬件驱动即可快速开发应用。传感节点程序主要通过数据采集模块、MQTT客户端和网络连接模块实现。数据采集模块负责定时读取温湿度数据;MQTT客户端负责维护与MQTT消息代理IoTHub的连接、发布传感数据、接收并响应数据采集中心的命令;网络连接模块负责WiFi连接。系统软件主流程如图3所示。
2.2.1 数据采集模块
数据采集模块创建了一个tmr定时器,周期调用dht库的read()函数读取温湿度数据,再使用string.format函数将温湿度数据转换为JSON格式。读取传感器数据代码:
2.2.2 MQTT客户端
传感节点和数据采集中心基于订购/发布机制的MQTT协议通信进行信息交互。传感节点和数据采集中心作为MQTT客户端,百度IoTHub云平台作为MQTT代理。消息的发布和订购基于主题(topic)进行。MQTT代理负责管理订阅关系或缓存消息(保留标志为真的消息),将消息转发给已订阅主题的MQTT客户端。为了实现传感节点与数据采集中心的数据交互,兩者发布与订阅的主题见表1所列。
msghandler为订购消息处理函数,用于解析和处理从数据采集中心收到的JSON格式数据。JSON数据采用键(key)值(value)对结构,key可用来表示消息类型,value为消息内容。JSON格式数据用sjson模块的decode()函数解析成table表格数据。传感节点调用publish函数向某个主题发布消息,语法:mqtt:publish(topic,payload,qos,retain[,function(client)])。topic是发布的主题;payload为将发布的消息;qos为QoS服务质量;0表示只发送最多一次便可送达,1表示至少一次可送达,2表示一次便到达;Retain为保留标志,指示服务端是否需要存储当前消息;function(client)为消息发布成功回调函数,在收到代理发布确认PUBACK消息后执行函数。
3 数据采集中心设计数据采集中心负责传感节点的管理及传感数据的显示,其中传感节点管理包括节点自动识别、节点主题订阅、节点控制等。数据采集中心与传感节点通过MQTT协议的订购/发布机制进行异步通信,两者不必知道对方的IP地址,所有消息均通过MQTT消息代理转发。数据采集中心识别传感节点流程如图4所示。传感节点上线时向主题$baidu/iot/general/data/id/status发布保留标志为真的消息“online”,离线时通过最后遗嘱(Last Will)发布离线消息“offline”。数据采集中心连接到MQTT消息代理IoTHub,在订阅主题$baidu/iot/general/data/+/status后,会收到所有传感节点的状态消息,从消息主题解析出节点ID(+通配符所对应的字段),如果是新节点,则先添加节点再更新状态,否则直接更新节点状态。
数据采集中心订购传感节点主题$baidu/iot/general/data/id/data后,当传感节点向此主题发布消息时,消息代理IoTHub将会把消息转发给数据采集中心。数据采集中心收到传感节点数据后,解析JSON格式消息获得消息的数据类型。如果是传感数据,则存储后显示;如果是传感节点配置信息,则存储到节点信息。信息处理流程如图5所示。
数据采集中心界面如图6所示。界面上部分显示节点列表及最新的节点传感数据,下部分显示节点数据曲线图。
4 结 语
本文设计了基于MQTT协议的物联网传感节点,采用ESP8266WiFi模块+传感器采集数据与NodeMCU物联网平台的MQTT模块实现传感节点与数据采集中心交互,数据采集中心采用Visual C# + MQTTnet库实现传感节点的自动识别与控制、传感节点数据的存储与显示。系统运行稳定,扩展性强,搭配不同传感器就能实现特定的物联网传感节点。
参 考 文 献
[1]沃达丰.物联网市场晴雨表(2017版)[R/OL].2017.
[2] Cisco. Cisco Visual Networking Index: Forecast and Trends,2017–2022[R/OL].2018.
[3]吴大鹏,舒毅,王汝言,等.物联网技术与应用[M].北京:电子工业出版社,2012:63-64.
[4]王劍秋,赵一.物联网传输协议MQTT与CoAP比较与应用[J].计算机时代,2017(10):25-28.
[5]乐鑫信息科技.ESP8266EX技术规格书[Z].2018.
[6]奥松电子.温湿度模块AM2302产品手册[Z].2018.
[7]王成,王跃.基于MQTT协议与Android技术的跨平台访客管理系统[J].物联网技术,2017,7(3):50-52.
[8]王浩.基于ESP8266WiFi平台和MQTT协议的远程设备数据采集与控制设计[J].泰山学院学报,2017,39(6):86-91.
[9]王瑞,兀玉洁,李燕苹.基于MQTT协议的物联网实训云平台设计[J].工业控制计算机,2018,31(9):101-103.
[10]于亦潇,郑其林,成欣雨.基于语音识别和MQTT协议的智能家居系统实现[J].物联网技术,2017,7(11):97-99.