閻子繁
(津安(天津)建筑節(jié)能設(shè)施運(yùn)營管理有限公司,天津 300202)
隨著物聯(lián)網(wǎng)的概念越來越深入人心,市面上出現(xiàn)了許多不同的物聯(lián)網(wǎng)通信協(xié)議,包含:NB-IoT、LORA、WiFi、藍(lán)牙、ZigBee、4G 等。在這些協(xié)議中,WiFi 是使用最廣的一種無線網(wǎng)絡(luò)傳輸技術(shù)。傳統(tǒng)基礎(chǔ)WiFi 網(wǎng)絡(luò)是一個(gè)“單點(diǎn)對(duì)多點(diǎn)”的網(wǎng)絡(luò)。這種網(wǎng)絡(luò)架構(gòu)的中心節(jié)點(diǎn)稱為接入點(diǎn)(AP),其他節(jié)點(diǎn)(Station)均與AP 直接相連。由于所有Station 均需與AP 直接相連,這就導(dǎo)致智能設(shè)備不能距離AP 太遠(yuǎn),因此WiFi 覆蓋區(qū)域相對(duì)有限。
ESP-WiFi-MESH 是樂鑫科技自研的組網(wǎng)技術(shù),它與傳統(tǒng)WiFi 網(wǎng)絡(luò)的不同之處在于:ESP-WiFi-MESH 中的節(jié)點(diǎn)無需連接到中心節(jié)點(diǎn),它可以與相鄰節(jié)點(diǎn)連接。各節(jié)點(diǎn)均可以作為相連節(jié)點(diǎn)的數(shù)據(jù)中繼。由于無需受限于距離中心節(jié)點(diǎn)的位置,所有節(jié)點(diǎn)仍可互連,因此 ESP-WiFi-MESH 網(wǎng)絡(luò)的覆蓋區(qū)域更廣。由于不再受限于中心節(jié)點(diǎn)的容量限制,ESP-WiFi-MESH 允許更多節(jié)點(diǎn)接入,也不易于超載。
本物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)的整體方案如圖1所示。為了實(shí)現(xiàn)物聯(lián)網(wǎng)功能,本系統(tǒng)選擇搭建EMQX 物聯(lián)網(wǎng)平臺(tái)。EMQX 平臺(tái)是基于Erlang/OTP 開發(fā)的MQTT 消息服務(wù)器,是開源社區(qū)中最流行的 MQTT 消息服務(wù)器。MQTT 消息服務(wù)器搭建位置選擇使用騰訊云服務(wù)器,并安裝了MySQL 作為數(shù)據(jù)庫使用。
終端部分僅需一個(gè)物聯(lián)網(wǎng)網(wǎng)關(guān)與MQTT 消息服務(wù)器進(jìn)行連接,即可做到數(shù)據(jù)的上傳與接收。所以,在硬件程序的編寫中,物聯(lián)網(wǎng)網(wǎng)關(guān)需預(yù)先訂閱publish_topic與receive_topic兩個(gè)主題,分別作為發(fā)布數(shù)據(jù)與接收數(shù)據(jù)使用。
智能設(shè)備可以通過網(wǎng)關(guān)上傳用戶所需的各種信息至MQTT 消息服務(wù)器中,并經(jīng)過EMQX 中的數(shù)據(jù)持久化功能將數(shù)據(jù)轉(zhuǎn)存至MySQL 數(shù)據(jù)庫中。使用者在手機(jī)中安裝可以使用MQTT 物聯(lián)網(wǎng)協(xié)議的手機(jī)應(yīng)用(例如:物聯(lián)網(wǎng)Flow 等)建立MQTT 的客戶端,并發(fā)送Json 數(shù)據(jù)到MQTT 消息服務(wù)器中,經(jīng)過服務(wù)器轉(zhuǎn)發(fā)至物聯(lián)網(wǎng)網(wǎng)關(guān),隨后網(wǎng)關(guān)將控制信息群發(fā)至各個(gè)子節(jié)點(diǎn)的智能設(shè)備,設(shè)備經(jīng)邏輯判斷后產(chǎn)生相應(yīng)的動(dòng)作。
本系統(tǒng)內(nèi)的物聯(lián)網(wǎng)網(wǎng)關(guān)與智能設(shè)備均使用ESP8266 NodeMCU 開發(fā)板進(jìn)行開發(fā)。ESP8266 可以作為sta 站點(diǎn)直接連接WiFi,也可以作為AP 被其他sta 站點(diǎn)連接,是一款較受歡迎的物聯(lián)網(wǎng)芯片。NodeMCU 參數(shù)見表1所列。
表1 ESP8266 NodeMCU 參數(shù)
本次智能設(shè)備與物聯(lián)網(wǎng)關(guān)的開發(fā)燒錄使用的是Arduino IDE??梢栽赪indows、Macintosh OS(Mac OS)、Linux 三大主流操作系統(tǒng)上運(yùn)行是Arduino IDE 一大特色。Arduino IDE 基于wiring 語言開發(fā),編程人員了解部分C 語言、C++基礎(chǔ)知識(shí)后即可快速入手。
開發(fā)不同智能設(shè)備所使用的庫、方法、變量均不同,但軟件主體均包含void setup(){}和void loop(){}兩個(gè)方法。setup()方法決定了設(shè)備上電之后需要初始化運(yùn)行的各個(gè)方法,包含:配置I/O 口狀態(tài)、初始化串口、創(chuàng)建連接、獲取各種初始數(shù)據(jù)等,這些方法在整個(gè)階段只執(zhí)行一次。loop()方法決定了智能硬件持續(xù)執(zhí)行的方法,包含驅(qū)動(dòng)模塊、采集數(shù)據(jù)、維持客戶端心跳等。
Json 是一種輕量級(jí)的數(shù)據(jù)交換格式,從本質(zhì)上來講Json是字符串,格式一般為:{"name":"value",...},其中,name 為數(shù)據(jù)名稱,value 為對(duì)應(yīng)的數(shù)據(jù)值。本系統(tǒng)總共需要構(gòu)建3 種Json 格式,格式內(nèi)容見表2所列。
表2 物聯(lián)網(wǎng)系統(tǒng)Json 格式設(shè)計(jì)表
3.3.1 物聯(lián)網(wǎng)網(wǎng)關(guān)獲取WiFi 賬號(hào)密碼
物聯(lián)網(wǎng)網(wǎng)關(guān)連接WiFi 流程如圖2所示。
圖2 物聯(lián)網(wǎng)網(wǎng)關(guān)連接WiFi 流程
物聯(lián)網(wǎng)網(wǎng)關(guān)的setup()方法中,需要首先執(zhí)行配置WiFi 的方法,為了方便用戶可以使用普通手機(jī)與ESP8266硬件設(shè)備進(jìn)行交互,物聯(lián)網(wǎng)網(wǎng)關(guān)使用了WiFimanager 庫。WiFimanager 庫的運(yùn)行流程如圖3所示。
圖3 WiFimanager 庫的運(yùn)行流程
為了防止因?yàn)榈綦姸鴮?dǎo)致無法連接WiFi 的錯(cuò)誤,獲取到的WiFi 賬號(hào)密碼將被存儲(chǔ)進(jìn)E2PROM(可擦編程只讀存儲(chǔ)器)中,便于物聯(lián)網(wǎng)網(wǎng)關(guān)掉電后也可以獲取WiFi 賬號(hào)密碼并自動(dòng)連接。
3.3.2 ESP 創(chuàng)建ESP-WiFi-MESH 網(wǎng)絡(luò)
ESP-WiFi-MESH 的實(shí)現(xiàn)需要在物聯(lián)網(wǎng)網(wǎng)關(guān)的setup()方法中進(jìn)行mesh 網(wǎng)絡(luò)的初始化,表3具體描述了mesh 網(wǎng)絡(luò)的初始化所需方法的方法名、方法作用以及方法參數(shù)的含義。
表3 初始化mesh 網(wǎng)絡(luò)的方法
3.3.3 物聯(lián)網(wǎng)網(wǎng)關(guān)創(chuàng)建MQTT 連接
ESP 在初始化mesh 網(wǎng)絡(luò)之后需要建立MQTT 對(duì)象與MQTT 消息服務(wù)器進(jìn)行連接,并進(jìn)行訂閱topic、維持心跳等操作,表4具體描述了物聯(lián)網(wǎng)網(wǎng)關(guān)與MQTT 消息服務(wù)器連接、發(fā)布、接收等動(dòng)作所需方法的方法名、方法作用以及方法參數(shù)的含義。
表4 MqttClient 對(duì)象方法
基于以上的系統(tǒng)設(shè)計(jì),本次實(shí)驗(yàn)將制作1 個(gè)物聯(lián)網(wǎng)網(wǎng)關(guān)與1 個(gè)智能插座進(jìn)行實(shí)驗(yàn)。物聯(lián)網(wǎng)網(wǎng)關(guān)僅使用ESP8266-NodeMcu 作為數(shù)據(jù)處理即可,無需其他模塊配合。智能插座需搭配SRD-05VDC-SL-C 繼電器模塊與ESP8266-NodeMcu共同進(jìn)行電路控制,以便于通斷電路。
本次實(shí)驗(yàn)需達(dá)到以下目標(biāo):
(1)智能插座通過物聯(lián)網(wǎng)網(wǎng)關(guān)上傳當(dāng)前電路的通斷狀態(tài)到MQTT 消息服務(wù)器,并存儲(chǔ)在數(shù)據(jù)庫中。
(2)用手機(jī)向MQTT 消息服務(wù)器發(fā)送控制信息并通過網(wǎng)關(guān)群發(fā)至智能插座做到控制插座電路通斷。
(1)在Arduino 平臺(tái)中將寫好的代碼分別燒錄進(jìn)不同的ESP8266-NodeMcu 中。
(2)物聯(lián)網(wǎng)網(wǎng)關(guān)燒錄完成后,需要使用WiFimanager 進(jìn)行配置以及WiFi 賬號(hào)密碼的獲取。配置界面如圖4所示。
圖4 WiFimanager 配置頁面
(3)后續(xù)配置由硬件代碼自行完成即可,完成內(nèi)容有:
①物聯(lián)網(wǎng)網(wǎng)關(guān)連接MQTT 物聯(lián)網(wǎng)平臺(tái);
②物聯(lián)網(wǎng)網(wǎng)關(guān)創(chuàng)建ESP-WiFi-MESH 網(wǎng)絡(luò)并自動(dòng)下發(fā)根節(jié)點(diǎn)nodeId 至各個(gè)子節(jié)點(diǎn);
③物聯(lián)網(wǎng)網(wǎng)關(guān)監(jiān)聽來自MQTT 消息服務(wù)器下發(fā)的包含控制內(nèi)容的Json,并群發(fā)至各個(gè)子節(jié)點(diǎn);
④智能設(shè)備每60 s 上傳一次電路狀態(tài)至物聯(lián)網(wǎng)網(wǎng)關(guān),并由網(wǎng)關(guān)上傳數(shù)據(jù)至MQTT 消息服務(wù)器。
(4)在“物聯(lián)Flow”APP 中添加控制內(nèi)容,添加界面如圖5所示。
圖5 APP 設(shè)置界面
4.4.1 物聯(lián)網(wǎng)網(wǎng)關(guān)連接MQTT 平臺(tái)
在配置好WiFi 之后,物聯(lián)網(wǎng)網(wǎng)關(guān)會(huì)執(zhí)行MQTT 消息服務(wù)器的連接操作,當(dāng)連接成功之后會(huì)在串口輸出以下信息,如圖6所示。
圖6 串口輸出MQTT 消息服務(wù)器配置
4.4.2 創(chuàng)建ESP-WiFi-MESH 網(wǎng)絡(luò)
在創(chuàng)建好mesh 網(wǎng)絡(luò)之后,物聯(lián)網(wǎng)網(wǎng)關(guān)和智能插座均在串口輸出,內(nèi)容包括mesh 網(wǎng)絡(luò)ssId、新增節(jié)點(diǎn)nodeId,如圖7所示。
圖7 串口輸出mesh 網(wǎng)絡(luò)新節(jié)點(diǎn)相關(guān)內(nèi)容
4.4.3 上傳數(shù)據(jù)至MQTT 消息服務(wù)器
智能插座每60 s 會(huì)上傳一次電路狀態(tài),上傳之后會(huì)在串口輸出上傳內(nèi)容及根節(jié)點(diǎn)的nodeId,輸出內(nèi)容如圖8所示。
圖8 串口輸出電路狀態(tài)
4.4.4 控制智能硬件
本次實(shí)驗(yàn)通過“物聯(lián)Flow”進(jìn)行控制信息的發(fā)送,控制界面如圖9所示。在點(diǎn)擊“關(guān)閉”后,會(huì)如圖10(a)一樣,繼電器燈亮,電路斷路;在點(diǎn)擊“開啟”后,會(huì)如圖10(b)一樣,繼電器燈滅,電路連接。
圖9 控制界面
圖10 手機(jī)控制結(jié)果展示
4.4.5 數(shù)據(jù)庫中的數(shù)據(jù)
智能插座通過物聯(lián)網(wǎng)網(wǎng)關(guān)上傳至MQTT 消息服務(wù)器,并通過規(guī)則存儲(chǔ)在數(shù)據(jù)庫不同的表中。圖11為設(shè)備狀態(tài)表,在本表中,MacAddress 為智能插座的MAC 地址,switch_state 為電路開閉狀態(tài)。截圖時(shí),繼電器開路,所以狀態(tài)值為0。
圖11 智能設(shè)備狀態(tài)表
圖12為物聯(lián)網(wǎng)網(wǎng)關(guān)-智能設(shè)備MAC 地址對(duì)照?qǐng)D。智能插座需要通過物聯(lián)網(wǎng)網(wǎng)關(guān)進(jìn)行控制信息群發(fā),所以在本系統(tǒng)中需要網(wǎng)關(guān)和智能設(shè)備的MAC 地址。
圖12 智能設(shè)備對(duì)照?qǐng)D
本文設(shè)計(jì)一種基于EMQX 云平臺(tái)與ESP-WiFi-MESH 網(wǎng)絡(luò)的物聯(lián)網(wǎng)系統(tǒng),該系統(tǒng)能夠較好地完成用戶對(duì)智能家居設(shè)備進(jìn)行操作以及智能設(shè)備狀態(tài)上傳等操作。不僅如此,本系統(tǒng)整體構(gòu)造簡單,方便用戶上手操作,僅需配置WiFi 與物聯(lián)網(wǎng)APP 即可做到操作智能設(shè)備。
本系統(tǒng)已做出基本的物聯(lián)網(wǎng)平臺(tái)框架,后續(xù)的設(shè)計(jì)中將針對(duì)物聯(lián)網(wǎng)設(shè)備運(yùn)行邏輯深化、控制信息的細(xì)化以及APP 操作的簡化進(jìn)行更加深層次的研究。