基于微信和Arduino家用物聯網系統(tǒng)開發(fā)
引 言
隨著工業(yè) 4.0 的提出,各行各業(yè)開始嘗試將物品與互聯網相連,進行信息交換和通信,以實現智能化識別、定位、跟蹤、監(jiān)控和管理。家庭物聯網的出現很大程度上提升了家庭人居環(huán)境的安全性、方便性及宜居性。
目前市場上的家用物聯網系統(tǒng)多數都基于樂聯網、Yeelink 等平臺進行二次開發(fā)。用特定終端硬件驅動各傳感器采集數據并發(fā)送到平臺提供的接口,可在網站上查看自己上傳的數據。其開發(fā)雖然較為簡單,但也存在諸多弊端。首先, 以上平臺對手機移動端的支持并不友好,需要下載相應的 App 或登錄相應的網站才能查看信息。其次,數據傳輸到第三方平臺的數據庫,必然存在數據泄露等安全隱患。
考慮到以上弊端,文中提出了基于微信和 Arduino 家用物聯網系統(tǒng),以WiDo(Arduino 集成了CC3000 WiFi 模塊后的開發(fā)板)為控制板,結合微信公眾號平臺與阿里云中間服務器實現家庭遠程監(jiān)控系統(tǒng)。開源平臺Arduino 智能終端具有可定制性、功能強、性價比高等諸多優(yōu)點,為構建家用物聯網系統(tǒng)奠定了良好的基礎。微信平臺開發(fā)方便,對移動端支持比較友好,用戶操作方便。中間服務器用于存儲數據和微信端開發(fā),數據在自己的數據庫中,不易泄露。該系統(tǒng)具有實現簡便、可靠性高、實用性好、擴展性強等優(yōu)點。
1 系統(tǒng)結構設計
本系統(tǒng)由感知層、網絡層和應用層組成。
感知層由各傳感器硬件、開關執(zhí)行元件和 Wido(Arduino 集成了CC3000 WiFi 模塊后的開發(fā)板)組成。主要負責使用傳感器獲取室內的各種信息(溫濕度、煙霧、光線亮度)和通過Wido 數字接口寫入高低電平來控制各電器開關元件的通斷, 或使用模擬接口輸出模擬電壓達到控制室內家用電器的調幅等。以 LM35 溫度模塊為例,溫度傳感器電路將測量到的溫度信號轉換成電壓信號輸出到處理器的端口,處理器根據相應的算法對輸入的電壓信號進行采集、變送、運算后轉化為溫度數據,從而實現了對外界環(huán)境信息的感知采集。
網絡層由路由器和Internet 以太網組成,提供一條數據通道供感知層采集到的數據信息上傳到中間服務器并存貯在數據庫中,供微信公眾號用戶隨時查看;同時還要能將微信用戶的指令下傳到感知層執(zhí)行。如用戶可在微信端查看室內溫度, 并直接在微信端下達開燈指令,Wido 接收指令并驅動開關元件執(zhí)行開關指令。網絡層是物聯網系統(tǒng)的關鍵,是連接感知層和應用層的橋梁。它需要將感知層的信息傳輸到網絡中,并給應用層提供一個良好的用戶接口,采用無線路由器避免了冗長的接線,使感知層的硬件設備擺脫了特定地點的限制,實現了在WiFi 有效輻射范圍內的硬件自由配置。
應用層是本系統(tǒng)的最高層,直接與用戶連接,由中間服務器、數據庫和微信公眾平臺組成。應用層需要接收網絡層的信息,并將其存儲在相應的數據庫中,對數據庫中的信息及時更新。同時根據用戶請求,及時準確的將數據中的信息反饋給用戶,并將用戶指令存儲在數據庫中,發(fā)送到感知層執(zhí)行。微信公眾平臺提供友好的用戶接口和界面,使本系統(tǒng)不拘束于某個區(qū)域,只要用戶的手機能夠聯網,便可以享受該家用物聯網系統(tǒng)帶來的便捷。
基于微信平臺的物聯網架構如圖 1 所示。
2 硬件設計
本系統(tǒng)依據架構把硬件設計分成三部分,分別對應感知層、網絡層、應用層,依次為節(jié)點設備、網絡設備、服務端設備。
2.1 節(jié)點設備
節(jié)點設備端主要采用 WiDo,一塊集成 Arduino Leonardo 主控芯片和 CC3000 WiFi 內核的 Arduino 開發(fā)板。相比于 WiFi拓展模塊,WiDo 具有更輕便、更集成、更方便的特點, 且功耗比 WiFi 模塊低,適合作為家用物聯網長時間的連接節(jié) 點。因采用 WiFi 無線連接,所以對物聯網節(jié)點選址更加方便。
在利用 Arduino 主控板的基礎上,驅動各傳感器模塊采 集室內數據,如溫度、濕度等。并由 Arduino 主控板將這些采 集的數據通過網絡設備上傳到網絡。節(jié)點設備還包括 Arduino 主控板驅動的繼電器等開關元件,執(zhí)行來自用戶的命令。
在實際模型中,采用的硬件有 WiDo 主控板、LM35 溫度 傳感器、發(fā)光二極燈和電磁繼電器。其中,LM35 溫度傳感器 是各類傳感器模塊的代表,采集室內數據并上傳。發(fā)光二極 管和電磁繼電器是開關元件的代表,執(zhí)行來自用戶的開、關燈 指令以及家用高電壓電器的開關控制。
2.2 網絡設備
網絡設備為系統(tǒng)的上下級提供一條數據通道,主要由路由器和網線組成。即感知層通過連接路由器接入互聯網。所以網絡設備的穩(wěn)定是第一要義,而日常家庭生活的無線WiFi 網絡環(huán)境即可滿足要求。
在實際模型中, 為了操作演示方便, 直接用手機開啟WiFi 熱點作為網絡設備。
2.3 服務端設備
服務端的主要作用是接收并存儲來自節(jié)點的數據和向應用層用戶提供的數據查詢和指令下達等服務,并且能夠與微信公眾平臺對接。在家庭物聯網系統(tǒng)中,考慮到成本等問題,一般采用的服務端設備是租用的網絡云服務器。用戶級別的物聯網系統(tǒng)一般采用最基本的網絡云服務器 + 數據庫即可滿足要求。租用的服務器更加穩(wěn)定,并且有人維護,降低了系統(tǒng)的開發(fā)難度,易于普及家庭物聯網系統(tǒng)。
在實際模型中采用阿里云的云虛擬主機,其具有 1 G 空間+50 M MySQL 空間,完全能夠滿足物聯網系統(tǒng)的要求,并為公眾平臺提供穩(wěn)定、安全的服務。
3 軟件設計
軟件設計是家用物聯網平臺搭建的關鍵,軟件設計是在 Internet 以太網基礎上,構建一條穩(wěn)定的數據通道,以供數據 實時、準確的傳輸。但此處涉及兩個端的銜接問題,數據從感 知層發(fā)往應用層,指令從應用層傳入感知層,意味著兩個端 需要實時監(jiān)聽對方的數據。所以軟件設計部分主要分為數據 通道構建,數據發(fā)送與獲取,服務器端面向微信平臺設計。
3.1 數據通道的構建
數據通道的構建涉及 WiDo 控制板客戶端和服務器端。 兩者都需要實時監(jiān)聽對方的數據。故采用 C/S 客戶端 - 服務 器模式的網絡架構。
由于服務器端一直處于網絡環(huán)境中,所以服務器端的設計只需等待客戶端數據發(fā)送或控制命令請求并給出回應即可。
WiDo 控制板端需要先連接路由器,確定連接以太網; 然后在每次需要發(fā)送數據或者獲取指令時,先建立與目標服務器的連接,才能通過HTTP 協議把數據包發(fā)送出去,并接收目標服務器的應答信息。
3.1.1 WiDo客戶端程序設計
Wido 連接流程圖如圖 2 所示。在確認連接到路由器并由DHCP(動態(tài)主機配置協議)協議獲得 IP 地址后,控制板客戶端(Client)即采用輪詢(Polling)方式,由 CPU 定時向服務器發(fā)起請求,服務器收到請求后立即返回響應信息并關閉連接, 周而復始。
WiDo控制板核心代碼由函數體 setup()和 loop()組成,值得注意的是,setup函數只在控制板電啟動時執(zhí)行一次,其作用在于完成控制板的串口波特率初始化,控制板初始化,使控制板以WPA2加密方式連接WiFi熱點(AP),同時串口打印連接字符 Connected! 。隨后檢查等待路由器DHCP協議分配 IP 地址等功能。
Loop 函數在 Arduino 中會自動循環(huán)調用,確保 Arduino 控制板與目標服務器一直處于連接狀態(tài),并以輪詢方式周期性的發(fā)送讀取自傳感器的數據及控制命令請求。如果 Arduino處于異常狀態(tài),則會自動重啟進入 setup 然后再進入loop 函數, 即使Arduino 掉電異常,也能自動連接路由器繼續(xù)工作。服務端存儲流程圖如圖 3 所示。
3.1.2 服務器端程序設計
服務器端一直在等待數據POST(Arduino 通過HTTP 協議將數據包 POST 到服務器),當有數據響應時才有動作。先將數據存儲到數據庫中,然后將數據中存儲的開關量取出, 以應答的形式發(fā)送給WiDo 控制板。
3.2 數據的發(fā)送與獲取
上文已大概說明了數據的發(fā)送與獲取過程。在 Arduino 控制板和目標服務器建立連接時,發(fā)送數據到目標服務器。服務器收到POST 的數據并把開關量命令以應答的形式回復過去。Arduino 接收應答的開關量,并依據代碼控制相應端口的動作。數據發(fā)送與獲取如圖 4 所示。
3.3 服務端面向微信平臺設計
微信服務端的主要任務是處理用戶發(fā)來的消息。當用戶 請求數據時,將數據庫中存儲的傳感器數據發(fā)送給用戶;當用 戶發(fā)送指令時,將用戶指令存儲在數據庫中,等待下一次應答 返送給 Arduino。
圖 5 所示為用戶請求數據的概念圖,圖 6 所示為用戶發(fā) 送指令的概念圖。
4 實際測試
經實際測試,溫度測量最大誤差小于 +0.5 ℃,原因是傳感器的非線性因素。但對家用物聯網而言,可滿足其實時性與準確性條件。微信端溫度測量對比見表 1 所列。
微信端從發(fā)出命令到實際響應時間見表 2 所列。控制端命令自微信客戶端發(fā)出后直至客戶端執(zhí)行機構響應,所用七組時間取平均值,約為 4 s,延遲原因在于網絡信息的傳輸時延以及控制板的循環(huán)周期時延。執(zhí)行機構穩(wěn)定可響應。
5 結 語
本文采用開源 Arduino、阿里云虛擬服務器以及微信公眾號平臺,構建了可遠程監(jiān)控的家用物聯網系統(tǒng),實現對家庭環(huán)境的監(jiān)控及其反向控制方案。使用WiFi 接入方式避免了控制器冗長的布線且突破了空間限制,同時微信公眾號平臺接入物聯網系統(tǒng),可實現對插排,燈等家電的智能簡易控制。采用成熟的硬件平臺,不僅穩(wěn)定性高,成本低且易于部署推廣。但目前系統(tǒng)采用的HTTP 協議自身存在一定安全漏洞,且本系統(tǒng)所采集的參數和所支持的智能設備均有待增加,因此未來我們還將繼續(xù)努力,在后續(xù)研究中對其重點改進。