肖楊 林釗浩



摘 ? 要: Wi-Fi是廣泛應用于物聯網的無線通信技術,但具有傳輸功耗過高的缺陷,故提出一種基于NodeMCU的雙向通信系統。在硬件上,NodeMCU搭載ESP8266-F12模塊實現無線通信,可有效降低傳輸功耗;在軟件上,NodeMCU模塊靈活實現接入點(AP)、控制端(STA)及混合模式(AP+STA)配置,用戶通過連接配置界面,可實現數據傳輸與設備控制需求;系統采用輕量化的JSON數據傳輸格式,具有方便、穩定的數據傳輸通道,有效實現了物聯網系統云邊端架構中的邊—端環節,可方便地搭接到云平臺,構成通信高效、功耗較低的物聯網系統。
關鍵詞: NodeMCU;ESP8266-F12;Wi-Fi;無線通信;雙向通信;物聯網
中圖分類號:TP273 ? ?文獻標識碼:A ? ?文章編號:2095-8412 (2020) 04-080-05
工業技術創新 URL: http://gyjs.cbpt.cnki.net ? ?DOI: 10.14103/j.issn.2095-8412.2020.04.015
引言
隨著無線通信技術多樣化、快速發展,人們對遠程控制產品的多樣化需求也不斷增加,針對智能家居等基于無線通信、遠程遙控的技術層出不窮。其中,短距離無線傳輸技術以其低能耗、低成本、能夠適應復雜環境的優點,在無線通信領域起著至關重要的作用[1]。
Wi-Fi、藍牙、ZigBee等短距離無線通信技術都應用廣泛,且各有所長,在不同的應用場景中發揮著作用和優勢。其中Wi-Fi傳輸在當下應用較廣泛,但是其傳輸功耗問題一直受到詬病,而NodeMCU能夠在滿足物聯網設備相關功能的同時降低Wi-Fi傳輸功耗,從而有效改善這一缺陷[2]?,F在比較常見的NodeMCU應用方法是將其移植到專用的機智云SOC方案中,但這種做法并不能很好地將NodeMCU嵌入到物聯網系統云邊端架構中。
本文介紹一種基于NodeMCU的雙向通信系統,聚焦于物聯網系統云邊端架構中的邊—端環節,使系統搭接到云平臺后能夠構成完整的物聯網系統。
1 系統結構與工作原理
系統主要由兩塊NodeMCU構成,一塊作為設備端,一塊與上位機組成網關,實現邊—端通信。系統采用的NodeMCU是一種搭載了ESP8266-F12模塊(以下簡稱ESP8266)的MCU,專門用于Wi-Fi通信。系統結構如圖1所示。
NodeMCU1(模塊1)連接有一個溫濕度傳感器(DHT11)和一個執行機構(本系統中為風扇)。用手機連接模塊1的網絡,并在配置界面輸入NodeMCU2(模塊2)的熱點名、密碼、設備名稱和傳感器名稱,并確認。模塊2連接上位機,發出熱點,與模塊1建立連接。模塊1每5秒向模塊2發送傳感器信息,上位機可隨時通過模塊2向模塊1發送控制信號,使執行機構按要求運動。
2 硬件架構設計
NodeMCU使用Lua編程語言實現硬件功能。Lua實現了將C語言輕量化,并結合動態語言特性,可以在減小內存空間占用的同時完成復雜的功能[3]。NodeMCU能夠通過豐富的GPIO接口、擴展口和串口連接外圍設備,并且這些接口在驅動時使用的都是非阻塞的事件驅動,所以不僅使用方便,而且可以有效地降低功耗,在物聯網應用中具有一定的優勢[2]。
硬件設計主要體現在第一塊NodeMCU上,該NodeMCU本身作為無線通信模塊,同時連接了執行機構和傳感器。硬件總體設計如圖2所示。其中DHT11即溫濕度傳感器,用于采集空氣溫度數據;繼電器和風扇為執行機構,若收到轉動信號,則風扇轉動,否則靜止。
2.1 無線通信模塊
NodeMCU搭載的ESP8266是一款超低功耗的UART—Wi-Fi透傳模塊,其自身包含可以實現串口和Wi-Fi轉換的TCP/IP協議棧[4]。ESP8266與NodeMCU主板內部連接,直接對主板編程,可間接編輯無線通信模塊。
ESP8266有三種工作模式:
(1)AP模式,即接入點模式。該模式下ESP8266發出熱點,允許其他客戶端與其建立通信連接。
(2)STA模式,即客戶端模式。該模式下ESP8266作為客戶端連接熱點,申請建立連接。
(3)AP+STA模式,即混合模式。該模式下ESP8266可同時完成發出熱點和連接熱點的功能[5]。
根據實際情況,將模塊1配置為AP+STA模式,用手機連接模塊1并在配置界面輸入模塊2的熱點名、密碼、設備名稱和傳感器名稱,確認后MCU模式更改為STA模式;將模塊2設置為AP模式,發出熱點,與模塊1建立連接。
2.2 傳感器模塊
傳感器應用DHT11溫濕度傳感器的溫度傳感部分。DHT11是一款有已校準數字信號輸出的溫濕度傳感器,其精度為:濕度±5%RH,溫度±2℃;量程為:濕度20%~90%RH,溫度0~50℃。DHT11有三個引腳,分別為VCC、GND和Signal,分別與MCU的3.3V、GND和D4口相連接。D4口負責采集傳感器信息[6]。
2.3 執行機構
執行機構由一個低電平觸發5 V繼電器和一個12 V風扇組成。繼電器模塊分為控制端和執行端兩個部分,控制端中有VCC、GND和IN三個引腳,分別與MCU的3.3 V、GND和GPIO01(TX)相連接。執行端與風扇相連接。執行機構接線如圖3所示[7]。當GPIO01從高電平置低時,繼電器開關閉合,風扇轉動。執行機構工作邏輯如表1所示。
2.4 電源
NodeMCU有外接電源的Micro USB口,可接5 V、2 A的充電寶等電源。執行機構的電源接4節3 V紐扣電池。
3 軟件設計
3.1 主程序架構
由于系統有兩個模式的NodeMCU組成,所以主程序架構也分為兩個部分,如圖4所示。
對于NodeMCU1(模塊1),其主程序比較復雜,需要按照流程依次進行,并且為了防止程序出現邏輯錯誤,需要在必要的地方添加定時器。大致流程如下:首先,初始化配置,配置GPIO01、HTTP和Wi-Fi,目前為AP+STA模式;其次,打開HTTP對80端口進行監聽,當手機連接該模塊網絡時,調用登錄界面發送到手機上,并獲取手機上填寫的熱點名、密碼、設備名稱和傳感器名稱[8],保持10 s,使MCU連接NodeMCU2(模塊2)發出的熱點,并將其轉換為STA模式;然后,當Wi-Fi連接成功后,初始化TCP傳輸;最后,通過Wi-Fi透傳一次打包好的設備和傳感器名稱,并每5 s發送打包好的溫度值。在監聽過程中,TCP收到控制命令后進入控制程序。
對于NodeMCU2(模塊2),首先配置為AP模式,設置名稱和密碼;其次,設置模塊為TCP服務器模式,監聽8080端口,判斷客戶端連接狀態,接收溫度信息,并通過UART0傳給上位機。當串口收到控制命令時,將打包信息廣播給所有客戶端。
3.2 無線通信模塊軟件設計
無線通信模塊軟件設計只涉及到對Wi-Fi的配置。
模塊1進行以下步驟:
(1)設置模式為AP+STA。
(2)設置Wi-Fi信息,如AP的熱點名(SSID)和密碼(PASSWORD)。SSID為nodemcu_temperature,PASSWORD為12345678,密碼形式為WPA2_PSK[9]。
(3)連接熱點。通過HTTP服務獲取模塊2的SSID和PASSWORD進行連接,并開啟定時器判斷是否連接成功,成功的標志為獲取到IP地址。
(4)模式更改。在連接成功后,關閉定時器,更改為STA模式[10]。
模塊2進行以下步驟:
(1)設置模式為AP。
(2)設置Wi-Fi信息。
3.3 配置界面設計
HTTP屬于應用層面向對象的協議,在NodeMCU中有相應的配置函數,既簡捷又方便[11]??紤]到NodeMCU占用內存不大,這里使用輕量版HTTP服務代碼。配置界面的使用和HTTP服務密不可分。寫好的一個HTML配置界面如圖5所示。在主程序中,建立基于HTTP協議前端和后端的一種鏈接。
后端從URL中獲取路由和傳遞的參數,調用路由索引的服務,將運行服務的結果返回前端。前端向后端發送HTTP請求,訪問后端的config和setname服務,并傳遞參數SSID和PASSWORD,通過device_name和sensor_name獲取請求結果。后端截取到的數據用于完成后續任務。
3.4 TCP通信
通過TCP通信傳輸數據的前提是知道對方的IP地址。模塊2作為熱點,應最先供電使用。經過實驗得知,其IP固定,為192.168.4.1。TCP透明傳輸部分代碼也分為兩部分[12]。
模塊1作為客戶端,向服務端發送連接請求,握手成功后便可傳輸數據。代碼涉及三個函數:初始化函數、重新連接函數、停止連接函數。初始化函數分為三個部分,首先,將模塊1配置為客戶端,并通過8080端口與192.168.4.1建立連接;其次,時刻監聽是否收到控制命令,如收到則執行;最后,如果監聽中發現斷開連接,則重新連接,連接成功后,停止連接。
模塊2作為服務端,與客戶端建立連接。首先,初始化,將模塊2配置為服務端,建立TCPSocketList列表;然后,監聽8080端口,判斷申請連接的客戶端個數,由于基于Lua的TCP服務端最多可以接收4個客戶端的連接,所以當第5個客戶端發送請求的時候,模塊2將斷開與第1個客戶端的連接。當模塊2收到來自模塊1的數據時,將數據通過串口轉送給上位機;最后,當串口收到上位機發來的控制命令時,模塊2以廣播的形式將數據發送給所有客戶端[13]。
3.5 數據格式設定
系統數據傳輸采用JSON(JavaScript Object Notation)格式。JSON是一種輕量級的數據交換格式,易于閱讀和編寫,同時也易于機器解析和生成。由于本系統可以拓展到云平臺,且云平臺軟件大部分采用Java語言開發,因此JSON格式更易受到開發人員的喜愛[14]。NodeMCU也有JSON格式的相關函數。
數據格式具體定義如下[15]:
(1)設備信息:{device_name: fan,sensor_name: temp}&
(2)溫度信息:{sensor_name: temp, param: 21.0}&
(3)控制命令:{ device_name: fan,param: 1}&
其中“&”是為了方便上位機區分各條信息的標注符。
3.6 傳感器信息讀取
NodeMCU中有專門用于讀取DHT11溫濕度傳感器信息的函數。利用dht.read函數讀取溫度和濕度信息,只取用其中溫度的部分,并打包成JSON格式。
3.7 控制執行機構軟件設計
當模塊收到控制信息時,首先需要解析JSON數據,然后作出判斷:如果關鍵詞device_name的值是“fan”,且關鍵詞param的值是“1”,則將GPIO01置低電平,風扇轉;反之,GPIO01置高,風扇不轉。
4 系統測試與評價
按系統的硬件設計和軟件設計制作了實際模塊,實物如圖6所示。
按需求搭接電路,為模塊2和模塊1依次供電。用手機連接名為nodemcu_temperature的Wi-Fi,輸入密碼、設備名和傳感器名,點擊確定。
等待一些時間后,每5 s上位機會顯示收到的溫度信息。通過上位機發送JSON格式的控制指令,風扇按要求轉動。傳輸過程中偶爾會有丟包現象,溫度數據存在丟失情況,但影響不大。
5 結語
本文設計的基于NodeMCU的雙向通信系統,在物聯網應用中可以起到降低功耗、可靠傳輸的作用,特別是在邊—端環節建立方便、穩定的數據傳輸通道是優勢。從測試和使用情況上看,該系統性能良好,接入云平臺后具有可觀的市場前景和應用價值。
參考文獻
[1] 李孟臻. 短距離無線通信技術在物聯網中的應用探討[J]. 通訊世界, 2019, 26(1): 129-130.
[2] 楊芳, 何勇, 晏平. 基于NodeMCU的醫療語音呼叫系統設計[J]. 計算機技術與發展, 2019, 29(7): 135-139.
[3] 熊夢彪, 高譽, 周龍麗, 等. 基于NodeMCU和MQTT協議的物聯網網關設計[J]. 數字通信世界, 2019(12): 47.
[4] Azmi N, Sudin S, Kamarudin L M, et al. Design and Development of Multi-Transceiver Lorafi Board consisting LoRa and ESP8266-Wifi Communication Module[J]. IOP Conference Series: Materials Science and Engineering, 2018, 318: 012051.
[5] 張問松, 荊黎明, 田思慶. 基于ZigBee和ESP8266的遠程灌溉控制平臺設計[J]. 山西電子技術, 2020(1): 12-14.
[6] 劉美麗, 李曰陽, 李震. 基于嵌入式的農作物生長環境的監測控制系統設計[J]. 自動化與儀器儀表, 2019(12): 141-143.
[7] 劉煥. 一種物聯網多協議智能管控系統的設計與開發[D]. 北京: 北京郵電大學, 2019.
[8] 林劍敏. 凈水器凈水量手機顯示軟件的設計與實現[J]. 福建電腦, 2020, 36(1): 58-61.
[9] 陳錦偉. 家庭無線局域網數據加密應用分析[J]. 計算機光盤軟件與應用, 2013, 16(4): 9-10.
[10] Kashyap M, Sharma V, Gupta N. Taking MQTT and NodeMcu to IOT: Communication in Internet of Things[J]. Procedia Computer Science, 2018, 132: 1611-1618.
[11] 孟慶杰, 何鈺. 利用HTTP協議GET請求得IP[J]. 網絡安全和信息化, 2019(11): 158-159.
[12] 袁勇. 嵌入式TCP/IP協議單片機技術在網絡通信中的應用[J]. 現代信息科技, 2020, 4(2): 82-84.
[13] 徐子豪, 張騰飛. 基于語音識別和無線傳感網絡的智能家居系統設計[J]. 計算機測量與控制, 2012, 20(1): 180-182.
[14] 陸國君, 金勤芳, 張慧麗. 基于MQTT網關連接PLC與阿里云物聯網平臺的工業物聯網系統[J]. 物聯網技術, 2019, 9(12): 58-60, 63.
[15] 金鳴, 袁嵩, 劉榮. 利用JSON實現客戶端與服務器端通信[J]. 電腦編程技巧與維護, 2018(4): 75-77.
作者簡介:
肖楊(1999—),通信作者,男,漢族,遼寧大連人,深圳大學本科在讀。研究方向:物聯網。
E-mail: 852331418@qq.com
林釗浩(1998—),男,漢族,廣東揭陽人,深圳大學本科在讀。研究方向:物聯網。
(收稿日期:2020-05-21)
Two-way Communication System Based on NodeMCU
XIAO Yang, LIN Zhao-hao
(College of Mechatronics and Control Engineering, Shenzhen University, Shenzhen 518061, China)
Abstract: Wi-Fi is a common wireless communication technology applied to the Internet of Things, but it has the defect of high transmission power consumption. A two-way communication system based on NodeMCU is proposed. In terms of hardware, NodeMCU is equipped with ESP8266-F12 module to realize the wireless communication and effectively reduce the transmission power consumption. In terms of software, NodeMCU module can flexibly realize configurations including access point (AP), control end (STA) and hybrid mode (AP+STA), and users can realize data transmission and equipment control requirements through connection configuration interface. The system adopts lightweight JSON data transmission format, with convenient and stable data transmission channels, and effectively realizes the side-to-terminal link in the cloud side architecture of the Internet of Things system, which can be easily connected to the cloud platform to form an Internet of Things system with high efficiency communication and low power consumption.
Key words: NodeMCU; ESP8266-F12; Wi-Fi; Wireless Communication; Two-way Communication; Internet of Things