王浩++王東
摘 要:隨著無線通信技術的快速發(fā)展,基于WIFI無線通信的物聯(lián)網應用應運而生。本文設計一種基于ESP8266的WIFI通信模塊在NodeMCU物聯(lián)網固件平臺上,利用Lua腳本語言編程實現(xiàn)RGB三色燈的無線控制功能,并通過ESP8266的WIFI通信模塊的STA通信方式連接路由器和云平臺服務器進行通信,實現(xiàn)云平臺遠程無線控制。實驗結果表明:該系統(tǒng)操作方便和可靠性強,應用范圍廣等優(yōu)勢,具有一定的應用前景。
關鍵詞:ESP8266;NodeMCU;WIFI;RGB三色燈
中圖分類號:TP273 文獻標識碼:A
1 引言(Introduction)
隨著無線網絡通信技術和自動控制技術的迅速發(fā)展,人們對遠程智能控制產品的開發(fā)和應用需求不斷擴大,希望借助WIFI無線通信方式與智能化產品交互,并通過云平臺實現(xiàn)對遠程設備的無線控制。本文提出一種在ESP8266WiFI芯片之上運行NodeMCU固件平臺,利用Lua腳本語言實現(xiàn)RGB三色燈的遠程控制設計方案。通過NodeMCU物聯(lián)網固件平臺上的應用開發(fā),使ESP8266WIFI模塊開機自動連接路由器,連接物聯(lián)網云平臺服務器,登錄設備,監(jiān)聽服務器發(fā)送消息,并根據(jù)不同的消息遠程控制RGB三色燈。
2 總體設計(The overall design)
為了提高傳統(tǒng)燈光照明控制系統(tǒng)的靈活性和可擴展性,使燈光照明控制系統(tǒng)更加智能化,本系統(tǒng)以ESP8266WIFI無線通信處理模塊為載體,通過運行含有對ESP8266WIFI硬件操作API函數(shù)等相關功能[1],以構建NodeMCU固件平臺,然后利用Lua腳本語言分別ESP8266WIFI無線通信處理模塊的WIFI路由功能、RGB三色燈的輸出引腳控制功能,以及和云平臺服務器進行網絡數(shù)據(jù)通信功能進行編程,最后將ESP8266WIFI無線通信處理模塊連接路由器,實現(xiàn)通過云平臺服務器遠程控制硬件設備。系統(tǒng)的整體架構如圖1所示。
3 系統(tǒng)的硬件設計(The hardware design of the
system)
3.1 NodeMCU固件平臺的硬件設計
NodeMCU固件平臺的硬件載體是ESP8266WIFI無線通信模塊,它是一款超低功耗的UART-WIFI透傳模塊,其硬件接口豐富,可支持UART、IIC、PWM、GPIO和ADC等接口,主要實現(xiàn)串口透傳[2],PWM調控及GPIO控制等功能,另外ESP8266模塊支持STA/AP/STA+AP三種通信模式,本文主要使用GPIO控制功能和STA模式,通過ESP8266模塊可將用戶的物理設備連接到WIFI無線網絡上,再通過路由器連接互聯(lián)網,最后手機或電腦通過互聯(lián)網實現(xiàn)對設備的遠程控制,ESP8266無線通信模塊硬件連接如圖2所示。
3.2 RGB三色燈硬件設計
RGB三色燈硬件模塊主要采用5050RGB共陽發(fā)光二極管,其工作電壓紅色為2.0—2.2V、藍色為3.0—3.3V、綠色為3.0—3.3V、工作電流為60mA,發(fā)光角度很寬,可達到120度[3]。這里將RGB三色燈中的三個引腳通過電阻連接至3.3V,另外三個引腳分別連接至ESP8266無線通信模塊中的GPIO14、GPIO13和GPIO12三個引腳,一旦將GPIO14、GPIO13和GPIO12三個引腳上的任何一個引腳輸出低電平,都將點亮RGB中對應的發(fā)光二極管[4]。RGB三色燈硬件連接電路如圖3所示。
4 系統(tǒng)的軟件設計(System software design)
系統(tǒng)的軟件部分主要是利用Lua腳本語言在NodeMCU固件平臺上進行腳本編寫實現(xiàn)相關功能,這里包括WIFI路由連接功能、RGB三色燈的輸出引腳控制功能、WIFI模塊網絡數(shù)據(jù)通信功能,以及云平臺服務器數(shù)據(jù)通信功能。
4.1 WIFI路由連接功能程序設計
為了能夠讓ESP8266無線通信模塊連接WIFI無線路由器,這里需要利用Lua腳本語言編寫WIFI路由連接程序,主要包括WIFI工作模式設置,station模式下的ssid和password設置,以及通過開啟定時器進行station模式下路由AP連接[4],如果連接WIFI路由成功,則通過無線路由器的DHCP功能獲取客戶端IP地址[5],具體通信流程如圖4所示。
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腳本語言控制任意一個燈的開和關兩個狀態(tài),這里需要在Lua編程中將ESP8266無線通信模塊中的GPIO14、GPIO13和GPIO12三個物理引腳映射NodeMCU固件中LEDB(IO5)、LEDR(IO7)和LEDG(IO6)三個引腳,并選擇為輸出模式。另外,在系統(tǒng)啟動初始化階段,為了將RGB三色燈都處于關閉狀態(tài),根據(jù)前面的電路連接,需要將這三個引腳的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模塊網絡數(shù)據(jù)通信功能程序設計
在物聯(lián)網快速發(fā)展的時代,設備與平臺服務器的連接交互的信息越來越多,為了將ESP8266無線通信模塊連接RGB三色燈之后,通過TCP方式連接云平臺服務器,并最終實現(xiàn)智能手機遠程控制,這里需要使用帶有cjson數(shù)據(jù)通信處理協(xié)議的NodeMCU固件實現(xiàn)數(shù)據(jù)信息傳輸與交互[7],固件中的cjson是在物聯(lián)網領域數(shù)據(jù)傳輸中較為常用的協(xié)議,這里智能手機發(fā)出的控制命令通過云端服務器之后,云服務器以cjson格式將數(shù)據(jù)傳輸至ESP8266無線通信模塊中,通過decode函數(shù)進行解碼,轉換成數(shù)字、字符串或者table數(shù)據(jù)類型的控制命令實現(xiàn)對設備的控制[8],然后將控制狀態(tài)信息(如燈已打開或者關閉狀態(tài)信息)通過encode()函數(shù)進行編碼,將數(shù)字、字符串或者table數(shù)據(jù)類型轉換成cjson格式傳輸至云端服務中,具體WIFI模塊網絡數(shù)據(jù)通信流程如圖5所示。
4.4 云平臺服務器數(shù)據(jù)通信
本文選用貝殼物聯(lián)云平臺作為云端服務器,它的通信方式主要以TCP協(xié)議為主,UDP協(xié)議為輔的形式進行通訊。在TCP協(xié)議的基礎上,可以直接使用TCP或者websocket建立長連接,定時發(fā)送心跳數(shù)據(jù),保持設備在線,在線期間設備與服務器可進行Json字符串格式數(shù)據(jù)進行通訊,并實現(xiàn)實時更新,這里使用的用戶與設備間溝通指令格式如下:
{"M":"say","ID":"xx1","C":"xx2"}\n,參數(shù)說明如下:
M:固定(Method)。
Say:固定,溝通指令。
ID:固定。
xx1:可變,發(fā)送目標的唯一通訊ID。
C:固定(content)。
xx2:可變(數(shù)據(jù)類型自定,符合Json字符穿要求即可),發(fā)送指令內容
本系統(tǒng)主要功能代碼如下:
Local function run()
localcu=net.createConnection(net.TCP)//通過TCP連接云平臺服務器
cu:on("receive",function(cu,c)//收到云平臺服務器cjson格式的數(shù)據(jù)信息
r=cjson.decode(c)//解碼cjson格式數(shù)據(jù)
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!"})//將燈狀態(tài)信息編碼為cjson格式數(shù)據(jù)
cu:send(played.."\n")//發(fā)送至云平臺服務器
end
end
end)
5 系統(tǒng)測試(The system test)
為了驗證WIFI模塊TCP連接云平臺服務器之后,Android手機通過2G/3G連接云服務器進行遠程控制RGB三色燈,這里選擇貝殼物聯(lián)云平臺,手機端APP通過發(fā)出“Play”或者“Stop”,遠程控制開燈和關燈,如圖6所示的手機端控制界面。
6 結論(Conclusion)
文中基于ESP8266WiFI芯片上運行的NodeMCU固件平臺,通過Lua腳本語言編程及云平臺通信,實現(xiàn)移動終端設備通過2G/3G方式遠程控制RGB三色燈。實驗結果表明:該系統(tǒng)操作方便和通信可靠,具有一定的應用前景。
參考文獻(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] 王浩,浦靈敏.物聯(lián)網技術應用開發(fā)[M].北京:中國水利水電出版社,2015:113-115.
[6] 張少軍.無線傳感器網絡技術及應用[M].北京:中國電力出版社,2010:156-160.
[7] 高守瑋,吳燦陽.ZigBee技術實踐教程[M].北京:北京航空航天出版社,2009:128-134.
[8] 潘偉.基于ZigBee技術的無線傳感網絡研究[J].計算機技術與發(fā)展,2008,18(9):24-27.
作者簡介:
王 浩(1971-),男,碩士,副教授.研究領域:物聯(lián)網工程應用研究.
王 東(1969-),男,博士,教授.研究領域:RFID應用工程技術與系統(tǒng)研究.