熊夢彪,高 譽,周龍麗,陳佳音,黃康輝
(西北民族大學數學與計算機科學學院,蘭州 730124)
隨著計算機通訊技術不斷的發展,物聯網產業落地的前景也變得越來越明朗。尤其是隨著5G 的投入使用,未來可以預見智能家居、智慧城市等產業將變成我們生活不可或缺的一部分。
在物聯網如火如荼的大背景下,對處理海量數據以及高效傳輸勢必帶來更高的功耗。由于當下的能源技術難以取得突破發展,因此物聯網系統的功耗將嚴重物聯網產業的落地。因此如何降低物聯網系統結構的功耗問題將是重中之重。
在數據報文發送的應用層協議采用了消息隊列遙測傳輸協議(MQTT),MQTT 是一種傳輸層協議以TCP 協議為核心的應用層協議,基于發布/訂閱模式的一種輕量級協議。這種協議應用之初便是為了傳感器數據采集使用,可以做到使用極少的代碼量以及極低的帶寬便可接入網絡,為物聯網組件接入遠程終端設備提供極大的便利。
采用MQTT 協議的最重要原因在于其在編程時具有高度抽象的特點,對于開發人員來說,這種基于發布/訂閱的消息傳輸方式類似于廣播消息。開發人員只需要在遠程終端訂閱特定傳感器的主題消息,而傳感器節點只需要將所有消息統一按照MQTT協議打包發布即可,而服務器會根據各個客戶端訂閱的消息進行分發。相較于TCP 協議直接廣播路由的方式相比,這種由MQTT 進行消息分發的機制具有更高的性能。
正如HTTP 在萬維網應用中的地位一樣,MQTT 協議能夠像HTTP 協議為人們網絡交流鋪平道路一樣將幾十億嵌入式、低成本數據采集設備連接到各類網絡當中。
當下MQTT 服務器代理種類繁多, 如基于C++ 的Mosquitto,基于Java 的Moquette,以及各大廠商的公有云平臺,如阿里云的LMQ,騰訊云的Iot-MQ 等。但在開源社區最活躍、功能最全的代理當屬EMQ。EMQ 是一個基于Erlang 語言的開源mqtt 服務器,功能全面,文檔齊全。由于EMQ 在開源社區的高度活躍性,因此也具備了更好的技術支持。
由于在整個傳感器組成的網絡中只有一個或多個網關節點采用TCP/IP 協議與外部互聯網通信。因此對于內部局域網需要一個統一的報文格式以區分網絡中不同的傳感器節點并將其消息轉發。報文格式如表1所示:

表1 報文格式
其中,傳感器ID 編號1和傳感器ID 編號2總共占報文段中兩個字節,即整個網絡中傳感器數量可支持達到65536個,第一個字節表示報文總長度只占一個字節,即整個報文段最多長度支持255個字節。數據段長度不限,只需滿足整個報文長度小于256個字節即可,而CRC 校驗碼值指循環校驗碼,用于驗證報文在通信過程中有沒有發生誤碼的現象。
ESP8266集成了32位Tensilica處理器、低噪放大器、天線開關、射頻balun、標準數字外設接口、功率放大器、過濾器和電源管理模塊等,只需要很少的外圍電路即可完成整個核心系統的設計,因此可以將所占PCB 空間降低。正是基于以上的特點,ESP8266是專為移動設備和可穿戴電子產品等物聯網應用而設計的。
NodeMCU 是安信可基于ESP8266模組所設計的核心開發板。在PCB 設計時引出了所有ESP8266的IO 引腳功能,能夠完整的實現ESP8266的所有功能。并且對于ESP8266傳統采用C 語言編程的方式,NodeMcu 集成了Lua 語言,并對原來的IO 口引腳進行了重新定義,這種新的定義只是對IO 口進行重新映射編號,對原來的C 語言編程方式并沒有影響。
NodeMcu 支持Lua 語言編程,雖然NodeMcu 本質是集成了ESP8266模組,可以繞過NodeMcu 的硬件封裝而直接使用C 語言編程,但是Lua 語言作為一種完美嵌入C/C++語言的一種腳本語言,開發便捷以及高效等特點是C 語言無法相比較的。
本文提出了基于NodeMcu 使用Lua 語言編程設計的物聯網網關,并自定義了傳感器網絡中的報文格式,將網關組進傳感器網絡中,可以將局域網中的數據后,將數據報文上報給EMQ 服務器代理。更重要的是,在NodeMcu 中集成的Lua 語言固件已經封裝了完整的MQTT 協議的應用接口,開發者可以快捷的調用Lua 語言固件接口,短短幾行代碼便可以完成MQTT 客戶端創建,數據報文收發的回調函數的創建,因此具有開發效率高的特點。