随着无线网络通信技术和自动控制技术的迅速发展,人们对远程智能控制产品的开发和应用需求不断扩大,希望借助WIFI无线通信方式与智能化产品交互,并通过云平台实现对远程设备的无线控制。本文提出一种在ESP8266WiFI芯片之上运行NodeMCU固件平台,利用Lua脚本语言实现RGB三色灯的远程控制设计方案。通过NodeMCU物联网固件平台上的应用开发,使ESP8266WIFI模块开机自动连接路由器,连接物联网云平台服务器,登录设备,监听服务器发送消息,并根据不同的消息远程控制RGB三色灯。
2 总体设计(The overall design)
为了提高传统灯光照明控制系统的灵活性和可扩展性,使灯光照明控制系统更加智能化,本系统以ESP8266WIFI无线通信处理模块为载体,通过运行含有对ESP8266WIFI硬件操作API函数等相关功能[1],以构建NodeMCU固件平台,然后利用Lua脚本语言分别ESP8266WIFI无线通信处理模块的WIFI路由功能、RGB三色灯的输出引脚控制功能,以及和云平台服务器进行网络数据通信功能进行编程,最后将ESP8266WIFI无线通信处理模块连接路由器,实现通过云平台服务器远程控制硬件设备。系统的整体架构如图1所示。
图1 系统整体架构图
Fig.1 The overall system architecture diagram
3 系统的硬件设计(The hardware design of the
system)
3.1 NodeMCU固件平台的硬件设计
NodeMCU固件平台的硬件载体是ESP8266WIFI无线通信模块,它是一款超低功耗的UART-WIFI透传模块,其硬件接口丰富,可支持UART、IIC、PWM、GPIO和ADC等接口,主要实现串口透传[2],PWM调控及GPIO控制等功能,另外ESP8266模块支持STA/AP/STA+AP三种通信模式,本文主要使用GPIO控制功能和STA模式,通过ESP8266模块可将用户的物理设备连接到WIFI无线网络上,再通过路由器连接互联网,最后手机或电脑通过互联网实现对设备的远程控制,ESP8266无线通信模块硬件连接如图2所示。
图2 ESP8266无线通信模块硬件连接
Fig.2 ESP8266 wireless communication module
hardware connection
3.2 RGB三色灯硬件设计
RGB三色灯硬件模块主要采用5050RGB共阳发光二极管,其工作电压红色为2.0—2.2V、蓝色为3.0—3.3V、绿色为3.0—3.3V、工作电流为60mA,发光角度很宽,可达到120度[3]。这里将RGB三色灯中的三个引脚通过电阻连接至3.3V,另外三个引脚分别连接至ESP8266无线通信模块中的GPIO14、GPIO13和GPIO12三个引脚,一旦将GPIO14、GPIO13和GPIO12三个引脚上的任何一个引脚输出低电平,都将点亮RGB中对应的发光二极管[4]。RGB三色灯硬件连接电路如图3所示。
图3 RGB三色灯硬件连接电路
Fig.3 RGB trichromatic lamp hardware
connection circuit
4 系统的软件设计(System software design)
系统的软件部分主要是利用Lua脚本语言在NodeMCU固件平台上进行脚本编写实现相关功能,这里包括WIFI路由连接功能、RGB三色灯的输出引脚控制功能、WIFI模块网络数据通信功能,以及云平台服务器数据通信功能。
4.1 WIFI路由连接功能程序设计
为了能够让ESP8266无线通信模块连接WIFI无线路由器,这里需要利用Lua脚本语言编写WIFI路由连接程序,主要包括WIFI工作模式设置,station模式下的ssid和password设置,以及通过开启定时器进行station模式下路由AP连接[4],如果连接WIFI路由成功,则通过无线路由器的DHCP功能获取客户端IP地址[5],具体通信流程如图4所示。
图4 WIFI路由连接流程
Fig.4 WIFI router connection process
WIFI路由连接主要功能代码如下:
wifi.setmode(wifi.STATION)//设置WIFI工作模式
wifi.sta.config("无线网名称","密码")//配置SSID和Password
wifi.sta.connect()//连接路由
tmr.alarm(0,1000,tmr.ALARM_AUTO,function()//开启定时器
if wifi.sta.getip()==nil then//连接路由失败
print("IPunavaiable,Waiting...")
else tmr.stop(0)//连接路由成功,关闭定时器
print("Configdone,IPis"..wifi.sta.getip())//获取IP地址
4.2 RGB三色灯的输出引脚控制功能程序设计
由于ESP8266模块所运行的NodeMCU固件中含有对GPIO的输入、输出和中断三种模式的设置选择[6],为了利用Lua脚本语言控制任意一个灯的开和关两个状态,这里需要在Lua编程中将ESP8266无线通信模块中的GPIO14、GPIO13和GPIO12三个物理引脚映射NodeMCU固件中LEDB(IO5)、LEDR(IO7)和LEDG(IO6)三个引脚,并选择为输出模式。另外,在系统启动初始化阶段,为了将RGB三色灯都处于关闭状态,根据前面的电路连接,需要将这三个引脚的IO口初始化为高电平输出,主要功能代码如下:
gpio.mode(LEDR,gpio.OUTPUT);//将红色灯所对应的NodeMCU引脚设置输出模式gpio.mode(LEDG,gpio.OUTPUT);//将绿色灯所对应的NodeMCU引脚设置输出模式
gpio.mode(LEDB,gpio.OUTPUT);//将蓝色灯所对应的NodeMCU引脚设置输出模式gpio.write(LEDR, gpio.HIGH);//将红色灯所对应NodeMCU引脚输出为高电平,代表不点亮
gpio.write(LEDG, gpio.HIGH);//将绿色灯所对应NodeMCU引脚输出为高电平,代表不点亮
gpio.write(LEDB, gpio.HIGH);//将蓝色灯所对应NodeMCU引脚输出为高电平,代表不点亮
4.3 WIFI模块网络数据通信功能程序设计
在物联网快速发展的时代,设备与平台服务器的连接交互的信息越来越多,为了将ESP8266无线通信模块连接RGB三色灯之后,通过TCP方式连接云平台服务器,并最终实现智能手机远程控制,这里需要使用带有cjson数据通信处理协议的NodeMCU固件实现数据信息传输与交互[7],固件中的cjson是在物联网领域数据传输中较为常用的协议,这里智能手机发出的控制命令通过云端服务器之后,云服务器以cjson格式将数据传输至ESP8266无线通信模块中,通过decode函数进行解码,转换成数字、字符串或者table数据类型的控制命令实现对设备的控制[8],然后将控制状态信息(如灯已打开或者关闭状态信息)通过encode()函数进行编码,将数字、字符串或者table数据类型转换成cjson格式传输至云端服务中,具体WIFI模块网络数据通信流程如图5所示。
图5 WIFI模块网络数据通信流程
Fig.5 WIFI module network data communication process
4.4 云平台服务器数据通信
本文选用贝壳物联云平台作为云端服务器,它的通信方式主要以TCP协议为主,UDP协议为辅的形式进行通讯。在TCP协议的基础上,可以直接使用TCP或者websocket建立长连接,定时发送心跳数据,保持设备在线,在线期间设备与服务器可进行Json字符串格式数据进行通讯,并实现实时更新,这里使用的用户与设备间沟通指令格式如下:
{"M":"say","ID":"xx1","C":"xx2"}\n,参数说明如下:
M:固定(Method)。
Say:固定,沟通指令。
ID:固定。
xx1:可变,发送目标的唯一通讯ID。
C:固定(content)。
xx2:可变(数据类型自定,符合Json字符穿要求即可),发送指令内容
本系统主要功能代码如下:
Local function run()
localcu=net.createConnection(net.TCP)//通过TCP连接云平台服务器
cu:on("receive",function(cu,c)//收到云平台服务器cjson格式的数据信息
r=cjson.decode(c)//解码cjson格式数据
if r.M=="say"then
if r.C=="play"then
gpio.write(LEDG,gpio.LOW)//通过控制引脚,点亮RGB三色灯中的绿色灯
ok,played=pcall(cjson.encode,{M="say",ID=r.ID,
C="LEDturnon!"})//将灯状态信息编码为cjson格式数据
cu:send(played.."\n")//发送至云平台服务器
end
end
end)
5 系统测试(The system test)
为了验证WIFI模块TCP连接云平台服务器之后,Android手机通过2G/3G连接云服务器进行远程控制RGB三色灯,这里选择贝壳物联云平台,手机端APP通过发出“Play”或者“Stop”,远程控制开灯和关灯,如图6所示的手机端控制界面。
图6 手机端云平台控制RGB三色灯
Fig.6 Mobile terminal cloud platform control RGB
trichromatic lamp
6 结论(Conclusion)
文中基于ESP8266WiFI芯片上运行的NodeMCU固件平台,通过Lua脚本语言编程及云平台通信,实现移动终端设备通过2G/3G方式远程控制RGB三色灯。实验结果表明:该系统操作方便和通信可靠,具有一定的应用前景。
参考文献(References)
[1] Komkrit Chooruang,Pongpat Mangkalakeeree.Wireless Heart Rate Monitoring System Using MQTT[J].Procedia Computer Science,2016,86:160-163.
[2] Pavel Masek,et al.Implementation of True IoT Vision:Survey on Enabling Protocols and Hands-On Experience[J].International Journal of Distributed Sensor Networks,2016,2016:1-18.
[3] T.A.Abdulrahman,et al.Design,Specification and Implementation of a Distributed Home Automation System[J].Procedia Computer Science,2016,94:473-478.
[4] 姜仲,刘丹.ZigBee技术与实训教程[M].北京:清华大学出版社,2014:137-140.
[5] 王浩,浦灵敏.物联网技术应用开发[M].北京:中国水利水电出版社,2015:113-115.
[6] 张少军.无线传感器网络技术及应用[M].北京:中国电力出版社,2010:156-160.
[7] 高守玮,吴灿阳.ZigBee技术实践教程[M].北京:北京航空航天出版社,2009:128-134.
[8] 潘伟.基于ZigBee技术的无线传感网络研究[J].计算机技术与发展,2008,18(9):24-27.
作者简介:
王 浩(1971-),男,硕士,副教授.研究领域:物联网工程应用研究.
王 东(1969-),男,博士,教授.研究领域:RFID应用工程技术与系统研究.