丘源 經(jīng)本欽 李精華?
摘 要:設(shè)計了一種基于ESP8266 WiFi模塊和MQTT協(xié)議的物聯(lián)網(wǎng)傳感節(jié)點,該節(jié)點具有數(shù)據(jù)采集、數(shù)據(jù)上報和遠(yuǎn)程控制功能。傳感節(jié)點通過輕量級物聯(lián)網(wǎng)MQTT協(xié)議與數(shù)據(jù)采集中心通信,數(shù)據(jù)采集中心能夠自動識別和實時顯示傳感節(jié)點的采集數(shù)據(jù)。實驗證明,所設(shè)計的傳感器節(jié)點可靠、擴展性強、通用性好。
關(guān)鍵詞:ESP8266;MQTT協(xié)議;物聯(lián)網(wǎng);傳感器節(jié)點;遠(yuǎn)程控制;實時顯示
中圖分類號:TP393 文獻標(biāo)識碼:A 文章編號:2095-1302(2019)06-00-03
0 引 言
隨著物聯(lián)網(wǎng)技術(shù)日趨成熟,物聯(lián)網(wǎng)已被廣泛應(yīng)用在醫(yī)療、交通與物流、能源與公用事業(yè)、零售業(yè)等領(lǐng)域[1]。據(jù)思科公司(Cisco)思科視覺化網(wǎng)絡(luò)指數(shù)顯示,到2022年全球有超過半數(shù)設(shè)備和連接將會是機器對機器(M2M)的互聯(lián),比2017年增加34%。智能音箱、固定設(shè)備、移動設(shè)備及其他物件的連接數(shù)將從2017年的61億增至2022年的146億[2]?;ヂ?lián)設(shè)備的數(shù)量和類型越來越多,應(yīng)用環(huán)境日趨復(fù)雜,實現(xiàn)資源有限或帶寬有限環(huán)境下的傳感器聯(lián)網(wǎng)和保證傳感數(shù)據(jù)的可靠傳輸成為物聯(lián)網(wǎng)技術(shù)應(yīng)用應(yīng)重點考慮的問題之一。
物聯(lián)網(wǎng)傳感節(jié)點作為物聯(lián)網(wǎng)和物理世界交互的邊界節(jié)點,負(fù)責(zé)信息的采集和簡單處理,與將數(shù)據(jù)傳輸?shù)綉?yīng)用層進行數(shù)據(jù)分析和處理[3]。傳感器節(jié)點的通信方式主要分為近距離通信和遠(yuǎn)距離通信,傳感器節(jié)點之間一般采用短距離無線通信,如藍牙,ZigBee,WiFi等;傳感器與物聯(lián)網(wǎng)云服務(wù)器或應(yīng)用服務(wù)器采用遠(yuǎn)距離通信,如固網(wǎng)、移動網(wǎng)絡(luò)(2G/3G/4G)、NB-IoT網(wǎng)絡(luò)等。無線網(wǎng)絡(luò)連接類型(WiFi、移動網(wǎng)絡(luò))是主流?,F(xiàn)在越來越多的應(yīng)用場合要求傳感器節(jié)點自帶接入網(wǎng)關(guān),即支持物聯(lián)網(wǎng)網(wǎng)絡(luò)接入服務(wù)。由于傳感器節(jié)點資源有限,受CPU處理能力、內(nèi)存等限制,通常在LwIP協(xié)議棧上采用輕量級物聯(lián)網(wǎng)傳輸協(xié)議。目前,應(yīng)用最廣泛的物聯(lián)網(wǎng)標(biāo)準(zhǔn)傳輸協(xié)議包括MQTT、CoAP。MQTT是一種在TCP/IP協(xié)議上的基于訂閱/發(fā)布模式的輕量級傳輸協(xié)議,適用于引入第三方云平臺的物聯(lián)網(wǎng)應(yīng)用。CoAP即約束應(yīng)用協(xié)議,類似HTTP,是一種文檔傳輸協(xié)議,也是一種基于請求/響應(yīng)的客戶端/服務(wù)器端輕量級UDP傳輸協(xié)議,適合將物聯(lián)網(wǎng)應(yīng)用嵌入到現(xiàn)有Web服務(wù)器中[4]。
本文基于ESP8266 WiFi模塊和MQTT協(xié)議設(shè)計了一種低成本物聯(lián)網(wǎng)傳感節(jié)點,以ESP8266嵌入式處理器為核心,采用AM2302傳感器采集溫濕度數(shù)據(jù),進行簡單處理后將傳感數(shù)據(jù)通過MQTT協(xié)議發(fā)布到百度天工物聯(lián)網(wǎng)云平臺IoTHub。數(shù)據(jù)采集中心采用Visual C#實現(xiàn),能自動識別傳感節(jié)點和訂購傳感器的數(shù)據(jù),可保存、處理和顯示傳感節(jié)點的溫濕度數(shù)據(jù)。數(shù)據(jù)采集中心可通過云平臺IoTHub下發(fā)命令,實現(xiàn)傳感器節(jié)點參數(shù)配置并讓傳感節(jié)點執(zhí)行指定操作(打開/關(guān)閉繼電器)。傳感器節(jié)點性能可靠,擴展性強,通用性好。
1 系統(tǒng)總體結(jié)構(gòu)系統(tǒng)由傳感節(jié)點、數(shù)據(jù)采集中心和百度天工物聯(lián)網(wǎng)云平臺組成,如圖1所示。傳器節(jié)點由ESP8266和AM2302構(gòu)成,實現(xiàn)溫濕度的采集和上報;數(shù)據(jù)采集中心基于Visual C#開發(fā),實現(xiàn)傳感數(shù)據(jù)的接收、存儲、分析和顯示;百度天工物聯(lián)網(wǎng)云平臺IoTHub作為MQTT消息代理,負(fù)責(zé)主題訂閱管理、消息轉(zhuǎn)發(fā)和緩沖,實現(xiàn)傳感節(jié)點與數(shù)據(jù)采集中心的信息交互。傳感節(jié)點與數(shù)據(jù)采集中心的交互數(shù)據(jù)類型為JSON格式。
2 傳感節(jié)點設(shè)計傳感節(jié)點負(fù)責(zé)采集感知對象相關(guān)信息,并通過相應(yīng)的通信模塊將數(shù)據(jù)通過MQTT消息代理推送到遠(yuǎn)端數(shù)據(jù)采集中心。
2.1 硬件設(shè)計傳感節(jié)點以ESP8266EX WiFi模塊為核心,通過I/O外接傳感器AM2302及其他設(shè)備。傳感節(jié)點硬件框圖如圖2所示。
2.2 軟件設(shè)計
傳感節(jié)點軟件基于NodeMCU固件開發(fā)。NodeMCU固件使用Lua腳本語言編程,在樂鑫ESP8266 Non-OS SDK上開發(fā)而來。NodeMCU固件封裝了ESP8266硬件操作的應(yīng)用編程接口函數(shù)API,同時還提供I2C,SPI,UART等外設(shè)總線驅(qū)動函數(shù)及OLED/TFT顯示驅(qū)動、各種類型傳感器驅(qū)動、網(wǎng)絡(luò)協(xié)議庫(TCP/UDP,HTTP,MQTT等),開發(fā)者無需了解底層硬件驅(qū)動即可快速開發(fā)應(yīng)用。傳感節(jié)點程序主要通過數(shù)據(jù)采集模塊、MQTT客戶端和網(wǎng)絡(luò)連接模塊實現(xiàn)。數(shù)據(jù)采集模塊負(fù)責(zé)定時讀取溫濕度數(shù)據(jù);MQTT客戶端負(fù)責(zé)維護與MQTT消息代理IoTHub的連接、發(fā)布傳感數(shù)據(jù)、接收并響應(yīng)數(shù)據(jù)采集中心的命令;網(wǎng)絡(luò)連接模塊負(fù)責(zé)WiFi連接。系統(tǒng)軟件主流程如圖3所示。
2.2.1 數(shù)據(jù)采集模塊
數(shù)據(jù)采集模塊創(chuàng)建了一個tmr定時器,周期調(diào)用dht庫的read()函數(shù)讀取溫濕度數(shù)據(jù),再使用string.format函數(shù)將溫濕度數(shù)據(jù)轉(zhuǎn)換為JSON格式。讀取傳感器數(shù)據(jù)代碼:
2.2.2 MQTT客戶端
傳感節(jié)點和數(shù)據(jù)采集中心基于訂購/發(fā)布機制的MQTT協(xié)議通信進行信息交互。傳感節(jié)點和數(shù)據(jù)采集中心作為MQTT客戶端,百度IoTHub云平臺作為MQTT代理。消息的發(fā)布和訂購基于主題(topic)進行。MQTT代理負(fù)責(zé)管理訂閱關(guān)系或緩存消息(保留標(biāo)志為真的消息),將消息轉(zhuǎn)發(fā)給已訂閱主題的MQTT客戶端。為了實現(xiàn)傳感節(jié)點與數(shù)據(jù)采集中心的數(shù)據(jù)交互,兩者發(fā)布與訂閱的主題見表1所列。
msghandler為訂購消息處理函數(shù),用于解析和處理從數(shù)據(jù)采集中心收到的JSON格式數(shù)據(jù)。JSON數(shù)據(jù)采用鍵(key)值(value)對結(jié)構(gòu),key可用來表示消息類型,value為消息內(nèi)容。JSON格式數(shù)據(jù)用sjson模塊的decode()函數(shù)解析成table表格數(shù)據(jù)。傳感節(jié)點調(diào)用publish函數(shù)向某個主題發(fā)布消息,語法:mqtt:publish(topic,payload,qos,retain[,function(client)])。topic是發(fā)布的主題;payload為將發(fā)布的消息;qos為QoS服務(wù)質(zhì)量;0表示只發(fā)送最多一次便可送達,1表示至少一次可送達,2表示一次便到達;Retain為保留標(biāo)志,指示服務(wù)端是否需要存儲當(dāng)前消息;function(client)為消息發(fā)布成功回調(diào)函數(shù),在收到代理發(fā)布確認(rèn)PUBACK消息后執(zhí)行函數(shù)。
3 數(shù)據(jù)采集中心設(shè)計數(shù)據(jù)采集中心負(fù)責(zé)傳感節(jié)點的管理及傳感數(shù)據(jù)的顯示,其中傳感節(jié)點管理包括節(jié)點自動識別、節(jié)點主題訂閱、節(jié)點控制等。數(shù)據(jù)采集中心與傳感節(jié)點通過MQTT協(xié)議的訂購/發(fā)布機制進行異步通信,兩者不必知道對方的IP地址,所有消息均通過MQTT消息代理轉(zhuǎn)發(fā)。數(shù)據(jù)采集中心識別傳感節(jié)點流程如圖4所示。傳感節(jié)點上線時向主題$baidu/iot/general/data/id/status發(fā)布保留標(biāo)志為真的消息“online”,離線時通過最后遺囑(Last Will)發(fā)布離線消息“offline”。數(shù)據(jù)采集中心連接到MQTT消息代理IoTHub,在訂閱主題$baidu/iot/general/data/+/status后,會收到所有傳感節(jié)點的狀態(tài)消息,從消息主題解析出節(jié)點ID(+通配符所對應(yīng)的字段),如果是新節(jié)點,則先添加節(jié)點再更新狀態(tài),否則直接更新節(jié)點狀態(tài)。
數(shù)據(jù)采集中心訂購傳感節(jié)點主題$baidu/iot/general/data/id/data后,當(dāng)傳感節(jié)點向此主題發(fā)布消息時,消息代理IoTHub將會把消息轉(zhuǎn)發(fā)給數(shù)據(jù)采集中心。數(shù)據(jù)采集中心收到傳感節(jié)點數(shù)據(jù)后,解析JSON格式消息獲得消息的數(shù)據(jù)類型。如果是傳感數(shù)據(jù),則存儲后顯示;如果是傳感節(jié)點配置信息,則存儲到節(jié)點信息。信息處理流程如圖5所示。
數(shù)據(jù)采集中心界面如圖6所示。界面上部分顯示節(jié)點列表及最新的節(jié)點傳感數(shù)據(jù),下部分顯示節(jié)點數(shù)據(jù)曲線圖。
4 結(jié) 語
本文設(shè)計了基于MQTT協(xié)議的物聯(lián)網(wǎng)傳感節(jié)點,采用ESP8266WiFi模塊+傳感器采集數(shù)據(jù)與NodeMCU物聯(lián)網(wǎng)平臺的MQTT模塊實現(xiàn)傳感節(jié)點與數(shù)據(jù)采集中心交互,數(shù)據(jù)采集中心采用Visual C# + MQTTnet庫實現(xiàn)傳感節(jié)點的自動識別與控制、傳感節(jié)點數(shù)據(jù)的存儲與顯示。系統(tǒng)運行穩(wěn)定,擴展性強,搭配不同傳感器就能實現(xiàn)特定的物聯(lián)網(wǎng)傳感節(jié)點。
參 考 文 獻
[1]沃達豐.物聯(lián)網(wǎng)市場晴雨表(2017版)[R/OL].2017.
[2] Cisco. Cisco Visual Networking Index: Forecast and Trends,2017–2022[R/OL].2018.
[3]吳大鵬,舒毅,王汝言,等.物聯(lián)網(wǎng)技術(shù)與應(yīng)用[M].北京:電子工業(yè)出版社,2012:63-64.
[4]王劍秋,趙一.物聯(lián)網(wǎng)傳輸協(xié)議MQTT與CoAP比較與應(yīng)用[J].計算機時代,2017(10):25-28.
[5]樂鑫信息科技.ESP8266EX技術(shù)規(guī)格書[Z].2018.
[6]奧松電子.溫濕度模塊AM2302產(chǎn)品手冊[Z].2018.
[7]王成,王躍.基于MQTT協(xié)議與Android技術(shù)的跨平臺訪客管理系統(tǒng)[J].物聯(lián)網(wǎng)技術(shù),2017,7(3):50-52.
[8]王浩.基于ESP8266WiFi平臺和MQTT協(xié)議的遠(yuǎn)程設(shè)備數(shù)據(jù)采集與控制設(shè)計[J].泰山學(xué)院學(xué)報,2017,39(6):86-91.
[9]王瑞,兀玉潔,李燕蘋.基于MQTT協(xié)議的物聯(lián)網(wǎng)實訓(xùn)云平臺設(shè)計[J].工業(yè)控制計算機,2018,31(9):101-103.
[10]于亦瀟,鄭其林,成欣雨.基于語音識別和MQTT協(xié)議的智能家居系統(tǒng)實現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2017,7(11):97-99.