肖楊 林釗浩
摘 ? 要: Wi-Fi是廣泛應(yīng)用于物聯(lián)網(wǎng)的無(wú)線通信技術(shù),但具有傳輸功耗過(guò)高的缺陷,故提出一種基于NodeMCU的雙向通信系統(tǒng)。在硬件上,NodeMCU搭載ESP8266-F12模塊實(shí)現(xiàn)無(wú)線通信,可有效降低傳輸功耗;在軟件上,NodeMCU模塊靈活實(shí)現(xiàn)接入點(diǎn)(AP)、控制端(STA)及混合模式(AP+STA)配置,用戶通過(guò)連接配置界面,可實(shí)現(xiàn)數(shù)據(jù)傳輸與設(shè)備控制需求;系統(tǒng)采用輕量化的JSON數(shù)據(jù)傳輸格式,具有方便、穩(wěn)定的數(shù)據(jù)傳輸通道,有效實(shí)現(xiàn)了物聯(lián)網(wǎng)系統(tǒng)云邊端架構(gòu)中的邊—端環(huán)節(jié),可方便地搭接到云平臺(tái),構(gòu)成通信高效、功耗較低的物聯(lián)網(wǎng)系統(tǒng)。
關(guān)鍵詞: NodeMCU;ESP8266-F12;Wi-Fi;無(wú)線通信;雙向通信;物聯(lián)網(wǎng)
中圖分類號(hào):TP273 ? ?文獻(xiàn)標(biāo)識(shí)碼:A ? ?文章編號(hào):2095-8412 (2020) 04-080-05
工業(yè)技術(shù)創(chuàng)新 URL: http://gyjs.cbpt.cnki.net ? ?DOI: 10.14103/j.issn.2095-8412.2020.04.015
引言
隨著無(wú)線通信技術(shù)多樣化、快速發(fā)展,人們對(duì)遠(yuǎn)程控制產(chǎn)品的多樣化需求也不斷增加,針對(duì)智能家居等基于無(wú)線通信、遠(yuǎn)程遙控的技術(shù)層出不窮。其中,短距離無(wú)線傳輸技術(shù)以其低能耗、低成本、能夠適應(yīng)復(fù)雜環(huán)境的優(yōu)點(diǎn),在無(wú)線通信領(lǐng)域起著至關(guān)重要的作用[1]。
Wi-Fi、藍(lán)牙、ZigBee等短距離無(wú)線通信技術(shù)都應(yīng)用廣泛,且各有所長(zhǎng),在不同的應(yīng)用場(chǎng)景中發(fā)揮著作用和優(yōu)勢(shì)。其中Wi-Fi傳輸在當(dāng)下應(yīng)用較廣泛,但是其傳輸功耗問(wèn)題一直受到詬病,而NodeMCU能夠在滿足物聯(lián)網(wǎng)設(shè)備相關(guān)功能的同時(shí)降低Wi-Fi傳輸功耗,從而有效改善這一缺陷[2]。現(xiàn)在比較常見的NodeMCU應(yīng)用方法是將其移植到專用的機(jī)智云SOC方案中,但這種做法并不能很好地將NodeMCU嵌入到物聯(lián)網(wǎng)系統(tǒng)云邊端架構(gòu)中。
本文介紹一種基于NodeMCU的雙向通信系統(tǒng),聚焦于物聯(lián)網(wǎng)系統(tǒng)云邊端架構(gòu)中的邊—端環(huán)節(jié),使系統(tǒng)搭接到云平臺(tái)后能夠構(gòu)成完整的物聯(lián)網(wǎng)系統(tǒng)。
1 系統(tǒng)結(jié)構(gòu)與工作原理
系統(tǒng)主要由兩塊NodeMCU構(gòu)成,一塊作為設(shè)備端,一塊與上位機(jī)組成網(wǎng)關(guān),實(shí)現(xiàn)邊—端通信。系統(tǒng)采用的NodeMCU是一種搭載了ESP8266-F12模塊(以下簡(jiǎn)稱ESP8266)的MCU,專門用于Wi-Fi通信。系統(tǒng)結(jié)構(gòu)如圖1所示。
NodeMCU1(模塊1)連接有一個(gè)溫濕度傳感器(DHT11)和一個(gè)執(zhí)行機(jī)構(gòu)(本系統(tǒng)中為風(fēng)扇)。用手機(jī)連接模塊1的網(wǎng)絡(luò),并在配置界面輸入NodeMCU2(模塊2)的熱點(diǎn)名、密碼、設(shè)備名稱和傳感器名稱,并確認(rèn)。模塊2連接上位機(jī),發(fā)出熱點(diǎn),與模塊1建立連接。模塊1每5秒向模塊2發(fā)送傳感器信息,上位機(jī)可隨時(shí)通過(guò)模塊2向模塊1發(fā)送控制信號(hào),使執(zhí)行機(jī)構(gòu)按要求運(yùn)動(dòng)。
2 硬件架構(gòu)設(shè)計(jì)
NodeMCU使用Lua編程語(yǔ)言實(shí)現(xiàn)硬件功能。Lua實(shí)現(xiàn)了將C語(yǔ)言輕量化,并結(jié)合動(dòng)態(tài)語(yǔ)言特性,可以在減小內(nèi)存空間占用的同時(shí)完成復(fù)雜的功能[3]。NodeMCU能夠通過(guò)豐富的GPIO接口、擴(kuò)展口和串口連接外圍設(shè)備,并且這些接口在驅(qū)動(dòng)時(shí)使用的都是非阻塞的事件驅(qū)動(dòng),所以不僅使用方便,而且可以有效地降低功耗,在物聯(lián)網(wǎng)應(yīng)用中具有一定的優(yōu)勢(shì)[2]。
硬件設(shè)計(jì)主要體現(xiàn)在第一塊NodeMCU上,該NodeMCU本身作為無(wú)線通信模塊,同時(shí)連接了執(zhí)行機(jī)構(gòu)和傳感器。硬件總體設(shè)計(jì)如圖2所示。其中DHT11即溫濕度傳感器,用于采集空氣溫度數(shù)據(jù);繼電器和風(fēng)扇為執(zhí)行機(jī)構(gòu),若收到轉(zhuǎn)動(dòng)信號(hào),則風(fēng)扇轉(zhuǎn)動(dòng),否則靜止。
2.1 無(wú)線通信模塊
NodeMCU搭載的ESP8266是一款超低功耗的UART—Wi-Fi透?jìng)髂K,其自身包含可以實(shí)現(xiàn)串口和Wi-Fi轉(zhuǎn)換的TCP/IP協(xié)議棧[4]。ESP8266與NodeMCU主板內(nèi)部連接,直接對(duì)主板編程,可間接編輯無(wú)線通信模塊。
ESP8266有三種工作模式:
(1)AP模式,即接入點(diǎn)模式。該模式下ESP8266發(fā)出熱點(diǎn),允許其他客戶端與其建立通信連接。
(2)STA模式,即客戶端模式。該模式下ESP8266作為客戶端連接熱點(diǎn),申請(qǐng)建立連接。
(3)AP+STA模式,即混合模式。該模式下ESP8266可同時(shí)完成發(fā)出熱點(diǎn)和連接熱點(diǎn)的功能[5]。
根據(jù)實(shí)際情況,將模塊1配置為AP+STA模式,用手機(jī)連接模塊1并在配置界面輸入模塊2的熱點(diǎn)名、密碼、設(shè)備名稱和傳感器名稱,確認(rèn)后MCU模式更改為STA模式;將模塊2設(shè)置為AP模式,發(fā)出熱點(diǎn),與模塊1建立連接。
2.2 傳感器模塊
傳感器應(yīng)用DHT11溫濕度傳感器的溫度傳感部分。DHT11是一款有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度傳感器,其精度為:濕度±5%RH,溫度±2℃;量程為:濕度20%~90%RH,溫度0~50℃。DHT11有三個(gè)引腳,分別為VCC、GND和Signal,分別與MCU的3.3V、GND和D4口相連接。D4口負(fù)責(zé)采集傳感器信息[6]。
2.3 執(zhí)行機(jī)構(gòu)
執(zhí)行機(jī)構(gòu)由一個(gè)低電平觸發(fā)5 V繼電器和一個(gè)12 V風(fēng)扇組成。繼電器模塊分為控制端和執(zhí)行端兩個(gè)部分,控制端中有VCC、GND和IN三個(gè)引腳,分別與MCU的3.3 V、GND和GPIO01(TX)相連接。執(zhí)行端與風(fēng)扇相連接。執(zhí)行機(jī)構(gòu)接線如圖3所示[7]。當(dāng)GPIO01從高電平置低時(shí),繼電器開關(guān)閉合,風(fēng)扇轉(zhuǎn)動(dòng)。執(zhí)行機(jī)構(gòu)工作邏輯如表1所示。
2.4 電源
NodeMCU有外接電源的Micro USB口,可接5 V、2 A的充電寶等電源。執(zhí)行機(jī)構(gòu)的電源接4節(jié)3 V紐扣電池。
3 軟件設(shè)計(jì)
3.1 主程序架構(gòu)
由于系統(tǒng)有兩個(gè)模式的NodeMCU組成,所以主程序架構(gòu)也分為兩個(gè)部分,如圖4所示。
對(duì)于NodeMCU1(模塊1),其主程序比較復(fù)雜,需要按照流程依次進(jìn)行,并且為了防止程序出現(xiàn)邏輯錯(cuò)誤,需要在必要的地方添加定時(shí)器。大致流程如下:首先,初始化配置,配置GPIO01、HTTP和Wi-Fi,目前為AP+STA模式;其次,打開HTTP對(duì)80端口進(jìn)行監(jiān)聽,當(dāng)手機(jī)連接該模塊網(wǎng)絡(luò)時(shí),調(diào)用登錄界面發(fā)送到手機(jī)上,并獲取手機(jī)上填寫的熱點(diǎn)名、密碼、設(shè)備名稱和傳感器名稱[8],保持10 s,使MCU連接NodeMCU2(模塊2)發(fā)出的熱點(diǎn),并將其轉(zhuǎn)換為STA模式;然后,當(dāng)Wi-Fi連接成功后,初始化TCP傳輸;最后,通過(guò)Wi-Fi透?jìng)饕淮未虬玫脑O(shè)備和傳感器名稱,并每5 s發(fā)送打包好的溫度值。在監(jiān)聽過(guò)程中,TCP收到控制命令后進(jìn)入控制程序。
對(duì)于NodeMCU2(模塊2),首先配置為AP模式,設(shè)置名稱和密碼;其次,設(shè)置模塊為TCP服務(wù)器模式,監(jiān)聽8080端口,判斷客戶端連接狀態(tài),接收溫度信息,并通過(guò)UART0傳給上位機(jī)。當(dāng)串口收到控制命令時(shí),將打包信息廣播給所有客戶端。
3.2 無(wú)線通信模塊軟件設(shè)計(jì)
無(wú)線通信模塊軟件設(shè)計(jì)只涉及到對(duì)Wi-Fi的配置。
模塊1進(jìn)行以下步驟:
(1)設(shè)置模式為AP+STA。
(2)設(shè)置Wi-Fi信息,如AP的熱點(diǎn)名(SSID)和密碼(PASSWORD)。SSID為nodemcu_temperature,PASSWORD為12345678,密碼形式為WPA2_PSK[9]。
(3)連接熱點(diǎn)。通過(guò)HTTP服務(wù)獲取模塊2的SSID和PASSWORD進(jìn)行連接,并開啟定時(shí)器判斷是否連接成功,成功的標(biāo)志為獲取到IP地址。
(4)模式更改。在連接成功后,關(guān)閉定時(shí)器,更改為STA模式[10]。
模塊2進(jìn)行以下步驟:
(1)設(shè)置模式為AP。
(2)設(shè)置Wi-Fi信息。
3.3 配置界面設(shè)計(jì)
HTTP屬于應(yīng)用層面向?qū)ο蟮膮f(xié)議,在NodeMCU中有相應(yīng)的配置函數(shù),既簡(jiǎn)捷又方便[11]??紤]到NodeMCU占用內(nèi)存不大,這里使用輕量版HTTP服務(wù)代碼。配置界面的使用和HTTP服務(wù)密不可分。寫好的一個(gè)HTML配置界面如圖5所示。在主程序中,建立基于HTTP協(xié)議前端和后端的一種鏈接。
后端從URL中獲取路由和傳遞的參數(shù),調(diào)用路由索引的服務(wù),將運(yùn)行服務(wù)的結(jié)果返回前端。前端向后端發(fā)送HTTP請(qǐng)求,訪問(wèn)后端的config和setname服務(wù),并傳遞參數(shù)SSID和PASSWORD,通過(guò)device_name和sensor_name獲取請(qǐng)求結(jié)果。后端截取到的數(shù)據(jù)用于完成后續(xù)任務(wù)。
3.4 TCP通信
通過(guò)TCP通信傳輸數(shù)據(jù)的前提是知道對(duì)方的IP地址。模塊2作為熱點(diǎn),應(yīng)最先供電使用。經(jīng)過(guò)實(shí)驗(yàn)得知,其IP固定,為192.168.4.1。TCP透明傳輸部分代碼也分為兩部分[12]。
模塊1作為客戶端,向服務(wù)端發(fā)送連接請(qǐng)求,握手成功后便可傳輸數(shù)據(jù)。代碼涉及三個(gè)函數(shù):初始化函數(shù)、重新連接函數(shù)、停止連接函數(shù)。初始化函數(shù)分為三個(gè)部分,首先,將模塊1配置為客戶端,并通過(guò)8080端口與192.168.4.1建立連接;其次,時(shí)刻監(jiān)聽是否收到控制命令,如收到則執(zhí)行;最后,如果監(jiān)聽中發(fā)現(xiàn)斷開連接,則重新連接,連接成功后,停止連接。
模塊2作為服務(wù)端,與客戶端建立連接。首先,初始化,將模塊2配置為服務(wù)端,建立TCPSocketList列表;然后,監(jiān)聽8080端口,判斷申請(qǐng)連接的客戶端個(gè)數(shù),由于基于Lua的TCP服務(wù)端最多可以接收4個(gè)客戶端的連接,所以當(dāng)?shù)?個(gè)客戶端發(fā)送請(qǐng)求的時(shí)候,模塊2將斷開與第1個(gè)客戶端的連接。當(dāng)模塊2收到來(lái)自模塊1的數(shù)據(jù)時(shí),將數(shù)據(jù)通過(guò)串口轉(zhuǎn)送給上位機(jī);最后,當(dāng)串口收到上位機(jī)發(fā)來(lái)的控制命令時(shí),模塊2以廣播的形式將數(shù)據(jù)發(fā)送給所有客戶端[13]。
3.5 數(shù)據(jù)格式設(shè)定
系統(tǒng)數(shù)據(jù)傳輸采用JSON(JavaScript Object Notation)格式。JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,易于閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。由于本系統(tǒng)可以拓展到云平臺(tái),且云平臺(tái)軟件大部分采用Java語(yǔ)言開發(fā),因此JSON格式更易受到開發(fā)人員的喜愛[14]。NodeMCU也有JSON格式的相關(guān)函數(shù)。
數(shù)據(jù)格式具體定義如下[15]:
(1)設(shè)備信息:{device_name: fan,sensor_name: temp}&
(2)溫度信息:{sensor_name: temp, param: 21.0}&
(3)控制命令:{ device_name: fan,param: 1}&
其中“&”是為了方便上位機(jī)區(qū)分各條信息的標(biāo)注符。
3.6 傳感器信息讀取
NodeMCU中有專門用于讀取DHT11溫濕度傳感器信息的函數(shù)。利用dht.read函數(shù)讀取溫度和濕度信息,只取用其中溫度的部分,并打包成JSON格式。
3.7 控制執(zhí)行機(jī)構(gòu)軟件設(shè)計(jì)
當(dāng)模塊收到控制信息時(shí),首先需要解析JSON數(shù)據(jù),然后作出判斷:如果關(guān)鍵詞device_name的值是“fan”,且關(guān)鍵詞param的值是“1”,則將GPIO01置低電平,風(fēng)扇轉(zhuǎn);反之,GPIO01置高,風(fēng)扇不轉(zhuǎn)。
4 系統(tǒng)測(cè)試與評(píng)價(jià)
按系統(tǒng)的硬件設(shè)計(jì)和軟件設(shè)計(jì)制作了實(shí)際模塊,實(shí)物如圖6所示。
按需求搭接電路,為模塊2和模塊1依次供電。用手機(jī)連接名為nodemcu_temperature的Wi-Fi,輸入密碼、設(shè)備名和傳感器名,點(diǎn)擊確定。
等待一些時(shí)間后,每5 s上位機(jī)會(huì)顯示收到的溫度信息。通過(guò)上位機(jī)發(fā)送JSON格式的控制指令,風(fēng)扇按要求轉(zhuǎn)動(dòng)。傳輸過(guò)程中偶爾會(huì)有丟包現(xiàn)象,溫度數(shù)據(jù)存在丟失情況,但影響不大。
5 結(jié)語(yǔ)
本文設(shè)計(jì)的基于NodeMCU的雙向通信系統(tǒng),在物聯(lián)網(wǎng)應(yīng)用中可以起到降低功耗、可靠傳輸?shù)淖饔?,特別是在邊—端環(huán)節(jié)建立方便、穩(wěn)定的數(shù)據(jù)傳輸通道是優(yōu)勢(shì)。從測(cè)試和使用情況上看,該系統(tǒng)性能良好,接入云平臺(tái)后具有可觀的市場(chǎng)前景和應(yīng)用價(jià)值。
參考文獻(xiàn)
[1] 李孟臻. 短距離無(wú)線通信技術(shù)在物聯(lián)網(wǎng)中的應(yīng)用探討[J]. 通訊世界, 2019, 26(1): 129-130.
[2] 楊芳, 何勇, 晏平. 基于NodeMCU的醫(yī)療語(yǔ)音呼叫系統(tǒng)設(shè)計(jì)[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2019, 29(7): 135-139.
[3] 熊夢(mèng)彪, 高譽(yù), 周龍麗, 等. 基于NodeMCU和MQTT協(xié)議的物聯(lián)網(wǎng)網(wǎng)關(guān)設(shè)計(jì)[J]. 數(shù)字通信世界, 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] 張問(wèn)松, 荊黎明, 田思慶. 基于ZigBee和ESP8266的遠(yuǎn)程灌溉控制平臺(tái)設(shè)計(jì)[J]. 山西電子技術(shù), 2020(1): 12-14.
[6] 劉美麗, 李曰陽(yáng), 李震. 基于嵌入式的農(nóng)作物生長(zhǎng)環(huán)境的監(jiān)測(cè)控制系統(tǒng)設(shè)計(jì)[J]. 自動(dòng)化與儀器儀表, 2019(12): 141-143.
[7] 劉煥. 一種物聯(lián)網(wǎng)多協(xié)議智能管控系統(tǒng)的設(shè)計(jì)與開發(fā)[D]. 北京: 北京郵電大學(xué), 2019.
[8] 林劍敏. 凈水器凈水量手機(jī)顯示軟件的設(shè)計(jì)與實(shí)現(xiàn)[J]. 福建電腦, 2020, 36(1): 58-61.
[9] 陳錦偉. 家庭無(wú)線局域網(wǎng)數(shù)據(jù)加密應(yīng)用分析[J]. 計(jì)算機(jī)光盤軟件與應(yīng)用, 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協(xié)議GET請(qǐng)求得IP[J]. 網(wǎng)絡(luò)安全和信息化, 2019(11): 158-159.
[12] 袁勇. 嵌入式TCP/IP協(xié)議單片機(jī)技術(shù)在網(wǎng)絡(luò)通信中的應(yīng)用[J]. 現(xiàn)代信息科技, 2020, 4(2): 82-84.
[13] 徐子豪, 張騰飛. 基于語(yǔ)音識(shí)別和無(wú)線傳感網(wǎng)絡(luò)的智能家居系統(tǒng)設(shè)計(jì)[J]. 計(jì)算機(jī)測(cè)量與控制, 2012, 20(1): 180-182.
[14] 陸國(guó)君, 金勤芳, 張慧麗. 基于MQTT網(wǎng)關(guān)連接PLC與阿里云物聯(lián)網(wǎng)平臺(tái)的工業(yè)物聯(lián)網(wǎng)系統(tǒng)[J]. 物聯(lián)網(wǎng)技術(shù), 2019, 9(12): 58-60, 63.
[15] 金鳴, 袁嵩, 劉榮. 利用JSON實(shí)現(xiàn)客戶端與服務(wù)器端通信[J]. 電腦編程技巧與維護(hù), 2018(4): 75-77.
作者簡(jiǎn)介:
肖楊(1999—),通信作者,男,漢族,遼寧大連人,深圳大學(xué)本科在讀。研究方向:物聯(lián)網(wǎng)。
E-mail: 852331418@qq.com
林釗浩(1998—),男,漢族,廣東揭陽(yáng)人,深圳大學(xué)本科在讀。研究方向:物聯(lián)網(wǎng)。
(收稿日期: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