丘源 經本欽 李精華?



摘 要:設計了一種基于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.