閻子繁
(津安(天津)建筑節(jié)能設施運營管理有限公司,天津 300202)
隨著物聯(lián)網(wǎng)的概念越來越深入人心,市面上出現(xiàn)了許多不同的物聯(lián)網(wǎng)通信協(xié)議,包含:NB-IoT、LORA、WiFi、藍牙、ZigBee、4G 等。在這些協(xié)議中,WiFi 是使用最廣的一種無線網(wǎng)絡傳輸技術(shù)。傳統(tǒng)基礎WiFi 網(wǎng)絡是一個“單點對多點”的網(wǎng)絡。這種網(wǎng)絡架構(gòu)的中心節(jié)點稱為接入點(AP),其他節(jié)點(Station)均與AP 直接相連。由于所有Station 均需與AP 直接相連,這就導致智能設備不能距離AP 太遠,因此WiFi 覆蓋區(qū)域相對有限。
ESP-WiFi-MESH 是樂鑫科技自研的組網(wǎng)技術(shù),它與傳統(tǒng)WiFi 網(wǎng)絡的不同之處在于:ESP-WiFi-MESH 中的節(jié)點無需連接到中心節(jié)點,它可以與相鄰節(jié)點連接。各節(jié)點均可以作為相連節(jié)點的數(shù)據(jù)中繼。由于無需受限于距離中心節(jié)點的位置,所有節(jié)點仍可互連,因此 ESP-WiFi-MESH 網(wǎng)絡的覆蓋區(qū)域更廣。由于不再受限于中心節(jié)點的容量限制,ESP-WiFi-MESH 允許更多節(jié)點接入,也不易于超載。
本物聯(lián)網(wǎng)系統(tǒng)設計的整體方案如圖1所示。為了實現(xiàn)物聯(lián)網(wǎng)功能,本系統(tǒng)選擇搭建EMQX 物聯(lián)網(wǎng)平臺。EMQX 平臺是基于Erlang/OTP 開發(fā)的MQTT 消息服務器,是開源社區(qū)中最流行的 MQTT 消息服務器。MQTT 消息服務器搭建位置選擇使用騰訊云服務器,并安裝了MySQL 作為數(shù)據(jù)庫使用。
終端部分僅需一個物聯(lián)網(wǎng)網(wǎng)關與MQTT 消息服務器進行連接,即可做到數(shù)據(jù)的上傳與接收。所以,在硬件程序的編寫中,物聯(lián)網(wǎng)網(wǎng)關需預先訂閱publish_topic與receive_topic兩個主題,分別作為發(fā)布數(shù)據(jù)與接收數(shù)據(jù)使用。
智能設備可以通過網(wǎng)關上傳用戶所需的各種信息至MQTT 消息服務器中,并經(jīng)過EMQX 中的數(shù)據(jù)持久化功能將數(shù)據(jù)轉(zhuǎn)存至MySQL 數(shù)據(jù)庫中。使用者在手機中安裝可以使用MQTT 物聯(lián)網(wǎng)協(xié)議的手機應用(例如:物聯(lián)網(wǎng)Flow 等)建立MQTT 的客戶端,并發(fā)送Json 數(shù)據(jù)到MQTT 消息服務器中,經(jīng)過服務器轉(zhuǎn)發(fā)至物聯(lián)網(wǎng)網(wǎng)關,隨后網(wǎng)關將控制信息群發(fā)至各個子節(jié)點的智能設備,設備經(jīng)邏輯判斷后產(chǎn)生相應的動作。
本系統(tǒng)內(nèi)的物聯(lián)網(wǎng)網(wǎng)關與智能設備均使用ESP8266 NodeMCU 開發(fā)板進行開發(fā)。ESP8266 可以作為sta 站點直接連接WiFi,也可以作為AP 被其他sta 站點連接,是一款較受歡迎的物聯(lián)網(wǎng)芯片。NodeMCU 參數(shù)見表1所列。

表1 ESP8266 NodeMCU 參數(shù)
本次智能設備與物聯(lián)網(wǎng)關的開發(fā)燒錄使用的是Arduino IDE。可以在Windows、Macintosh OS(Mac OS)、Linux 三大主流操作系統(tǒng)上運行是Arduino IDE 一大特色。Arduino IDE 基于wiring 語言開發(fā),編程人員了解部分C 語言、C++基礎知識后即可快速入手。
開發(fā)不同智能設備所使用的庫、方法、變量均不同,但軟件主體均包含void setup(){}和void loop(){}兩個方法。setup()方法決定了設備上電之后需要初始化運行的各個方法,包含:配置I/O 口狀態(tài)、初始化串口、創(chuàng)建連接、獲取各種初始數(shù)據(jù)等,這些方法在整個階段只執(zhí)行一次。loop()方法決定了智能硬件持續(xù)執(zhí)行的方法,包含驅(qū)動模塊、采集數(shù)據(jù)、維持客戶端心跳等。
Json 是一種輕量級的數(shù)據(jù)交換格式,從本質(zhì)上來講Json是字符串,格式一般為:{"name":"value",...},其中,name 為數(shù)據(jù)名稱,value 為對應的數(shù)據(jù)值。本系統(tǒng)總共需要構(gòu)建3 種Json 格式,格式內(nèi)容見表2所列。

表2 物聯(lián)網(wǎng)系統(tǒng)Json 格式設計表
3.3.1 物聯(lián)網(wǎng)網(wǎng)關獲取WiFi 賬號密碼
物聯(lián)網(wǎng)網(wǎng)關連接WiFi 流程如圖2所示。

圖2 物聯(lián)網(wǎng)網(wǎng)關連接WiFi 流程
物聯(lián)網(wǎng)網(wǎng)關的setup()方法中,需要首先執(zhí)行配置WiFi 的方法,為了方便用戶可以使用普通手機與ESP8266硬件設備進行交互,物聯(lián)網(wǎng)網(wǎng)關使用了WiFimanager 庫。WiFimanager 庫的運行流程如圖3所示。

圖3 WiFimanager 庫的運行流程
為了防止因為掉電而導致無法連接WiFi 的錯誤,獲取到的WiFi 賬號密碼將被存儲進E2PROM(可擦編程只讀存儲器)中,便于物聯(lián)網(wǎng)網(wǎng)關掉電后也可以獲取WiFi 賬號密碼并自動連接。
3.3.2 ESP 創(chuàng)建ESP-WiFi-MESH 網(wǎng)絡
ESP-WiFi-MESH 的實現(xiàn)需要在物聯(lián)網(wǎng)網(wǎng)關的setup()方法中進行mesh 網(wǎng)絡的初始化,表3具體描述了mesh 網(wǎng)絡的初始化所需方法的方法名、方法作用以及方法參數(shù)的含義。

表3 初始化mesh 網(wǎng)絡的方法
3.3.3 物聯(lián)網(wǎng)網(wǎng)關創(chuàng)建MQTT 連接
ESP 在初始化mesh 網(wǎng)絡之后需要建立MQTT 對象與MQTT 消息服務器進行連接,并進行訂閱topic、維持心跳等操作,表4具體描述了物聯(lián)網(wǎng)網(wǎng)關與MQTT 消息服務器連接、發(fā)布、接收等動作所需方法的方法名、方法作用以及方法參數(shù)的含義。

表4 MqttClient 對象方法
基于以上的系統(tǒng)設計,本次實驗將制作1 個物聯(lián)網(wǎng)網(wǎng)關與1 個智能插座進行實驗。物聯(lián)網(wǎng)網(wǎng)關僅使用ESP8266-NodeMcu 作為數(shù)據(jù)處理即可,無需其他模塊配合。智能插座需搭配SRD-05VDC-SL-C 繼電器模塊與ESP8266-NodeMcu共同進行電路控制,以便于通斷電路。
本次實驗需達到以下目標:
(1)智能插座通過物聯(lián)網(wǎng)網(wǎng)關上傳當前電路的通斷狀態(tài)到MQTT 消息服務器,并存儲在數(shù)據(jù)庫中。
(2)用手機向MQTT 消息服務器發(fā)送控制信息并通過網(wǎng)關群發(fā)至智能插座做到控制插座電路通斷。
(1)在Arduino 平臺中將寫好的代碼分別燒錄進不同的ESP8266-NodeMcu 中。
(2)物聯(lián)網(wǎng)網(wǎng)關燒錄完成后,需要使用WiFimanager 進行配置以及WiFi 賬號密碼的獲取。配置界面如圖4所示。

圖4 WiFimanager 配置頁面
(3)后續(xù)配置由硬件代碼自行完成即可,完成內(nèi)容有:
①物聯(lián)網(wǎng)網(wǎng)關連接MQTT 物聯(lián)網(wǎng)平臺;
②物聯(lián)網(wǎng)網(wǎng)關創(chuàng)建ESP-WiFi-MESH 網(wǎng)絡并自動下發(fā)根節(jié)點nodeId 至各個子節(jié)點;
③物聯(lián)網(wǎng)網(wǎng)關監(jiān)聽來自MQTT 消息服務器下發(fā)的包含控制內(nèi)容的Json,并群發(fā)至各個子節(jié)點;
④智能設備每60 s 上傳一次電路狀態(tài)至物聯(lián)網(wǎng)網(wǎng)關,并由網(wǎng)關上傳數(shù)據(jù)至MQTT 消息服務器。
(4)在“物聯(lián)Flow”APP 中添加控制內(nèi)容,添加界面如圖5所示。

圖5 APP 設置界面
4.4.1 物聯(lián)網(wǎng)網(wǎng)關連接MQTT 平臺
在配置好WiFi 之后,物聯(lián)網(wǎng)網(wǎng)關會執(zhí)行MQTT 消息服務器的連接操作,當連接成功之后會在串口輸出以下信息,如圖6所示。

圖6 串口輸出MQTT 消息服務器配置
4.4.2 創(chuàng)建ESP-WiFi-MESH 網(wǎng)絡
在創(chuàng)建好mesh 網(wǎng)絡之后,物聯(lián)網(wǎng)網(wǎng)關和智能插座均在串口輸出,內(nèi)容包括mesh 網(wǎng)絡ssId、新增節(jié)點nodeId,如圖7所示。

圖7 串口輸出mesh 網(wǎng)絡新節(jié)點相關內(nèi)容
4.4.3 上傳數(shù)據(jù)至MQTT 消息服務器
智能插座每60 s 會上傳一次電路狀態(tài),上傳之后會在串口輸出上傳內(nèi)容及根節(jié)點的nodeId,輸出內(nèi)容如圖8所示。

圖8 串口輸出電路狀態(tài)
4.4.4 控制智能硬件
本次實驗通過“物聯(lián)Flow”進行控制信息的發(fā)送,控制界面如圖9所示。在點擊“關閉”后,會如圖10(a)一樣,繼電器燈亮,電路斷路;在點擊“開啟”后,會如圖10(b)一樣,繼電器燈滅,電路連接。

圖9 控制界面

圖10 手機控制結(jié)果展示
4.4.5 數(shù)據(jù)庫中的數(shù)據(jù)
智能插座通過物聯(lián)網(wǎng)網(wǎng)關上傳至MQTT 消息服務器,并通過規(guī)則存儲在數(shù)據(jù)庫不同的表中。圖11為設備狀態(tài)表,在本表中,MacAddress 為智能插座的MAC 地址,switch_state 為電路開閉狀態(tài)。截圖時,繼電器開路,所以狀態(tài)值為0。

圖11 智能設備狀態(tài)表
圖12為物聯(lián)網(wǎng)網(wǎng)關-智能設備MAC 地址對照圖。智能插座需要通過物聯(lián)網(wǎng)網(wǎng)關進行控制信息群發(fā),所以在本系統(tǒng)中需要網(wǎng)關和智能設備的MAC 地址。

圖12 智能設備對照圖
本文設計一種基于EMQX 云平臺與ESP-WiFi-MESH 網(wǎng)絡的物聯(lián)網(wǎng)系統(tǒng),該系統(tǒng)能夠較好地完成用戶對智能家居設備進行操作以及智能設備狀態(tài)上傳等操作。不僅如此,本系統(tǒng)整體構(gòu)造簡單,方便用戶上手操作,僅需配置WiFi 與物聯(lián)網(wǎng)APP 即可做到操作智能設備。
本系統(tǒng)已做出基本的物聯(lián)網(wǎng)平臺框架,后續(xù)的設計中將針對物聯(lián)網(wǎng)設備運行邏輯深化、控制信息的細化以及APP 操作的簡化進行更加深層次的研究。