方中純 李海榮



摘要:給出了一種能夠在ZigBee網絡和傳統網絡進行透明協議高效轉換的物聯網智能網關的解決方法。該方法利用MQTT服務器作為數據進入傳統網絡的中轉站,ZigBee網絡的數據通過網關上的路由功能接收數據,然后通過串口把數據轉發給NodeMCU,最后數據通過MQTT協議發送到數據中轉站。經過智能蔬菜大棚的實際應用證明,本文設計的網關造價低廉,實用性好,效率高。關鍵詞:物聯網;網關;ZigBee;NodeMCU
DOI:10.16640/j.cnki.37-1222/t.2018.02.087
0引言
物聯網(Internet 0f things,簡稱IoT)是“信息化”時代的重要發展階段,被稱為繼計算機、互聯網之后世界信息產業發展的第三次浪潮。要實現物物相連,工程真正的意義上的物聯網,就需要把各種網絡互聯在一起,那么網關功能的設備在物聯網應用中就起著非常重要的作用。物聯網涉及到多種網絡的互聯,因此設計一個能夠互聯所有網絡的物聯網網關是不現實的,更沒有必要,這樣不僅成本高而且研發周期長。因此,在實際的物聯網應用系統中,針對涉及到的網絡,研究特定功能的物聯網網關不僅能夠降低成本而且也會縮短研發周期。而在當前的物聯網中,由于ZigBee廣泛應用,那么數據在ZigBee網絡和傳統以太網之間的相互轉發就顯得非常重要。
本文主要研究ZigBee網絡和以太網之間的數據轉發,同時為了方便用戶二次開發,也提供數據獲取和控制數據傳送WebAPI。基于此,本文的研究內容包括:基于MQTT的數據收發、ZigBee網絡的實現、基于MongoDB的數據持久化服務的開發以及提供二次開發的WebAPI接口。
1相關技術和理論
(1)MQTr(Message QueuingTelemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議。該協議支持所有平臺,幾乎可以把所有聯網物品和外部連接起來,被用來當做傳感器和制動器的通信協議。(2)NodeMCU是一個開源的物聯網平臺,它自身就可以作為物聯網終端節點使用,可以應用于某些物聯網中。像Arduino一樣,它是簡單的開源可編程固件。本文通過MQTT協議,實現網關與數據中轉站相互傳輸數據。(3)CC2530是用于2.4-GHz IEEE802.15.4、ZigBee和RF4CE應用的一個真正的片上系統(SoC)解決方案。(4)ZigBee技術是一種近距離、低復雜度、低功耗、低速率、低成本的雙向無線通訊技術。從下到上分別為物理層、媒體訪問控制層、傳輸層、網絡層和應用層等。(5)Z-Stack是符合Zigbee協議棧規范的一個硬件和軟件平臺,是Zigbee協議棧的一個具體實現。本文利用Z-Stack設計物聯網網關的協調器和網關功能。
2 GlOT的體系結構
本文設計并實現的物聯網網關GIOT(Gateway ofiOT)的主要功能是要實現傳統網絡和ZigBee網絡之間的數據轉發并把數據放置到數據中轉站服務器上,該方案的體系結構如圖1所示:
圖1中,序號(1)、(2)和(3)是本文需要實現的部分,主要涉及到的相關技術如下:
(1)數據中轉站服務器:利用Java語言實現WebAPI,程序訂閱MQTT服務器的數據主題,監視物聯網終端節點上傳的數據以及用戶發送的控制數據,并把所有的數據寫入MongoDB數據庫中,同時給用戶終端提供WebAPI,方便基于PC和手機管理應用的二次開發調用。
(2)NodeMCU轉發服務:利用ESP8266芯片按照Arduino規范設計的模塊,具備無線功能,方便通過無線接入以太網中,利用MQTT協議和數據中轉站進行數據通訊,通過UART與CC2530模塊相互傳輸數據。
(3)ZigBee網絡轉發服務:利用TI公司的CC2530芯片以及Z-Stack協議棧實現ZigBee協調器和路由器功能,該部分主要接收ZigBee終端節點上傳的數據以及轉發控制數據給終端節點,以及負責和NodeMCU進行通訊。
3 GlOT的實現
通過前面的描述,GIOT系統的實現主要分為如下三個方面:
3.1數據中轉站服務的實現
(1)功能和流程描述:利用MQTT服務器進行數據傳輸、設計WebAPI二次開發接口便于對接其它應用、利用MongoDB保存中間數據和日志,所有功能采用Java語言設計。主要流程為:
第一步訂閱網關主題的名稱規范,網關數據的主題為“GIOT_網關的MAC”。
第二步訂閱WebAPI傳入數據的主題名稱規范為“WAPI_APP_USER”,根據調用API的驗證用戶即可生成。
第三步MQTT訂閱和發布的消息以及操作日志等相關數據保存于MongoDB數據庫中。
第四步設計數據獲取以及控制信息傳輸的二次開發WebAPI。
(2)主要相關的Java類和功能介紹:
ServerMQTT類:負責向客戶端(網關)推送訂閱的數據和WebAPI推送訂閱的實時數據。
ClientMQTr類:負責獲取客戶端(網關)和WebAPI發布的實時數據。
WebAPI類:該類主要提供異步和同步二次開發API,方便開發物聯網應用的人員進行二次開發。
DataMgrThread類:基于AOP(面向切面編程)技術,監視MQTT和操作日志,把相關數據寫入MongoDB數據庫中。
3.2 NodeMCU數據轉換的實現
(1)功能和流程描述利用NodeMCU的WiFi功能加入無線網絡中,通過MQTT與數據中轉站相互傳輸數據,利用UART和CC2530通訊,所有功能采用C語言設計。主要流程為:
第一步通過MQTT訂閱數據中轉站發布的數據,這些數據主要是用戶控制信息,接收到這些數據后,立刻放入MQTF接收緩沖區中。開發者可以通過調用WebAPI發送控制信息到對應的物聯網終端節點,從而對節點進行控制。
第二步把MQTr傳過來的數據通過UART發送給CC2530模塊。
第三步發布主題為“GIOT網關MAC”的消息到數據中轉站的MQTT服務器上,這些數據主要來自于CC2530通過傳感器采集到的數據。
第四步通過UART接收CC2530模塊傳過來的數據,然后放置到MQTT發送緩沖區中。
(2)數據格式定義。從數據中轉站發送到網關的數據格式為:
(3)主要相關的模塊和功能介紹。WiFi連接模塊:該模塊主要檢測WiFi網絡連接狀態,當網絡處于離線狀態的時候,自動連接網絡和MQTT服務器。
MQTT發布模塊:從UART接收隊列中獲取數據,利用MQTT把數據發布到數據中轉服務器上。
MOTT訂閱模塊:從數據中轉服務器獲取網關訂閱的數據,然后把數據保存于MQTT緩沖區中等待發送到CC2530中。
UART收發模塊:建立UART收發隊列,準備通過UART發送的數據事先保存于UART發送緩沖區中;從UART中獲取的數據保存于接收緩沖區中。數據的收發都是通過隊列實現,避免程序等待延時。
3.3 ZigBee協調器和路由器實現
協調器的功能是基于11公司的Z-Stack協議棧而實現的。CC2530在啟動的時候充當協調器,當ZigBee網絡形成后,協調器就不必存在了,網關的CC2530模塊就進入ZigBee的路由器功能。
CC2530網關主要允許終端設備節點加入網絡,并且通過ZigBee網絡接收終端節點采集的數據,以及通過ZigBee網絡發送NodeMCU發送過來的控制數據到終端設備并控制終端節點。
網關與終端之間的數據格式如下:
4總結
本文設計并實現了一種物聯網網關GIOT,它不僅能高效地實現ZigBee網絡和傳統網絡之間的數據相互轉發,并且為開發人員提供了二次開發的WebAPI,從而方便通過二次開發獲取節點的數據,并傳送用戶控制信息對終端節點進行控制。
該GIOT設計方案應用到智能蔬菜大棚系統中,運行安全、穩定。該方案經濟實惠(成本低于100元)、性能穩定。所以,此方案在物聯網應用中有著十分廣泛的應用前景。