基于MQTT协议的远程路灯控制系统的设计
2019-12-17谢祥兵
【摘要】近年来随着信息数据产业的迅速发展,使得数字经济掀起了很高的的浪潮。人工智能,虚拟现实,物联网,车联网等技术也相继行驶在了信息高速路上。能源的消耗也越来越备受人们的关注,因此节能减排势在必行,本文介绍一种使用IBM公司的MQTT协议制作的远程路灯控制系统并进行设计,经过初步实验与设计能够实现手机对路灯进行实现远程开关控制,从而达到节能的目的。
1.系统设计
整個系统设计构想如图一所示,远程路灯控制系统主要由MQTT协议手机客户端,WiFi无线收发路由器,Mosquitto MQTT服务器,安信可推出的ESP8266-12F WiFi模组,继电器控制模组以及路灯组成。当手机客户端向服务器发布主题为/mqtt/led,消息为LED=1并且ESP8266组成的MQTT客户端订阅主题为/mqtt/led的时候,服务器通过无线路由器向ESP8266模组推送LED=1的消息,ESP8266模组发出指令使继电器吸合从而打开路灯,当手机客户端发布主题为/mqtt/led消息内容为LED=0的时候,ESP8266模组接受到消息后经过处理发出指令使继电器释放从而关闭路灯,以这样的方式实现对路灯高效方便的控制管理。
2.MQTT协议及MQTT服务器搭建
MQTT协议是IBM公司推出的一种可以以TCP/IP为基础的轻量级,低速率的传输协议,此协议可以在现有的网络协议上运行起来,不用再部署新的网络就能使用,在物联网中大多数需要传输的数据都非常小,而且大多数的终端嵌入式设备的运算处理能力非常有限网络吞吐量等性能都不是很可靠,低速率的MQTT协议很适合来做数据传送,MQTT协议实现流量开最小化,最小只有两个字节,降低了流量的消耗。MQTT协议具有三种质量的消息发布标准即:只有一次,至少一次,至多一次的QOS质量标准适合在不同的场合下使用。关于MQTT服务器的种类也有许多例如EMQ百万级的开源服务器,apache-apollo MQTT服务器以及mosquitto服务器等,为了简便实用本实验采用mosquitto轻量级MQTT服务器。首先在Eclipse官方网站上下载moquitto安装包,下载完毕后双击mosquitto的exe可执行文件根据提示点击下一步直到安装完成,然后将安装包里面的pthreadVC2.dll文件复制粘贴到mosquitto的安装目录下面,最后将安装的SSL下的两个文件libeay32.dll与ssleay32.dll复制下来粘贴到mosquitto 安装目录下,这样就完成了MQTT服务器的安装。
3.ESP8266WiFi模组及MQTT客户端的搭建
ESP8266是一款物美价廉的Wi-Fi芯片,集成Tensilica L106 钻石系列的32 位处理器和片上SRAM,多达17 个GPIO口,并拥有IIC、IIS、UART、PWM、IR遥控等片上资源。还有一个重要的宏定义——CFG_HOLDER,因为这个MQTT示例在ESP8266运行过一次后会把这些信息保存到FLASH中,如果要继续修改这些信息,记得要修改CFG_HOLDER这个宏定义,改成另一个数值即可。不修改CFG_HOLDER的话可能会发觉明明用户名和密码都正确但是就是连接不上去。根据上面分析,下面我们就可以修改示例代码:1.把STA_SSID和STA_PASS修改为自己的WiFI名和密码;2.修改MQTT_USER和MQTT_PASS为对应的MQTT服务器的用户名和密码,3.修改MQTT_HOST和MQTT_PORT为MQTT服务器IP和PORT,目前是使用本地的MQTT服务器,所以是修改为自己电脑的IP和1883端口,PORT是整型值;4.根据MQTT服务器的协议不同,可能需要使用MQTT v3.1.1版本,所以把PROTOCOL_NAMEv31注释掉,使用PROTOCOL_NAMEv311。源码的PROTOCOL_NAMEv311前面没有#define,自己加上就行。5.修改CFG_HOLDER,以让这些配置生效,直接给原来CFG_HOLDER定义的数值加1即可。6.修改订阅主题为/mqtt/led,将函数回调部分程序修改成当接收到消息内容为LED=1时GPIO4输出低电平,当接收到消息内容为LED=0时GPIO4输出高电平。最后进行编译下载:编译,查看Console窗口,如果没有报错并且生成了bin文件,说明代码已经编译成功。另外要注意,ESP8266 SDK v2.0版本生成的eagle.irom0text.bin烧写起始地址是0x10000,而之前的版本烧写地址是0x40000;eagle.flash.bin还是0x00000。由于本实验使用的是4MB Flash的ESP8266,所以也建议确定手头的ESP8266是不是4MB Flash(即32Mbit Flash,注意单位!4MB=32Mbit,Flash一般是以bit计算!)。
4.系统整体测试
完成了MQTT服务器安装以及搭建好ESP8266客户端后,将服务器开启运行,ESP8266WiFi模组与继电器模组连接起来,再将继电器模组与灯具连接上,打开ESP8266的电源开关,开启无线路由器,这时候ESP8266会通过无线路由器连接上MQTT服务器,打开手机上的MQTT Client软件,输入无线路由器的密码,以及MQTT服务器的ip地址端口号点击连接,这样手机端就与MQTT服务器建立了连接。在手机端的主题栏目输入/mqtt/led,消息栏目输入LED=1,点击发送这时候继电器吸和灯亮,反之在消息栏目输入LED=0,点击发送这时候继电器释放灯灭,系统测试完成。
结束语
手机移动终端对路灯设备的控制非常方便只要有网络的地方就可以实现远程控制,能提高对路灯的管理效率,也有实现节约电能的目的,具有广泛的应用前景。
参考文献:
[1]王浩,浦灵敏,物联网技术应用开发(M).北京.中国水利水电出版社.2014
[2]刘火良,杨森,STM32库开发实战指南(M).北京.机械工业出版社.2013
作者简介:谢祥兵,1991年2月,男,汉,籍贯:重庆市江津区,职称:助理实验师,学历:本科单位:重庆师范大学涉外商贸学院教务处实践教学管理科,研究方向为电子科学与技术,物联网,单片机应用与开发。