張美平,丁文才,許友澤
(福建師范大學(xué) 數(shù)學(xué)與計算機科學(xué)學(xué)院,福州 350007)
隨著科學(xué)技術(shù)的發(fā)展,信息技術(shù)的進步,我們正逐漸的從互聯(lián)網(wǎng)向物聯(lián)網(wǎng)邁進.物聯(lián)網(wǎng)就是物物相連的互聯(lián)網(wǎng),是新一代信息技術(shù)的重要組成部分,也是“信息化”時代的重要階段.
物聯(lián)網(wǎng)技術(shù)在現(xiàn)代農(nóng)業(yè)中的應(yīng)用,對提高農(nóng)業(yè)的生產(chǎn)管理水平效果顯著.搭建一個智能農(nóng)業(yè)大棚系統(tǒng)模擬系統(tǒng),監(jiān)測環(huán)境數(shù)據(jù),探究溫度、濕度、光強等環(huán)境因素對農(nóng)作物的影響.采集節(jié)點采用移植了Contiki操作系統(tǒng)的傳感器,該操作系統(tǒng)支持6LoWPAN協(xié)議,該協(xié)議是IPv6在無線傳感網(wǎng)的一種實現(xiàn),為使傳感器節(jié)點接入網(wǎng)絡(luò),與現(xiàn)有的IPv4融合,需要設(shè)計移植一個支持IPv6的嵌入式設(shè)備作為物聯(lián)網(wǎng)接入網(wǎng)關(guān).
物聯(lián)網(wǎng)網(wǎng)關(guān),作為一個新的名詞,在未來的物聯(lián)網(wǎng)時代將會扮演非常重要的角色,它將成為連接物聯(lián)網(wǎng)與互聯(lián)網(wǎng)的紐帶.作為網(wǎng)關(guān)設(shè)備,物聯(lián)網(wǎng)網(wǎng)關(guān)可以實現(xiàn)物聯(lián)網(wǎng)與通信網(wǎng)絡(luò)以及不同類型無線傳感器與執(zhí)行器網(wǎng)絡(luò)之間的協(xié)議轉(zhuǎn)換設(shè)備.既可以實現(xiàn)廣域互聯(lián),也可以實現(xiàn)局域互聯(lián)[1].對于使用IPv6的無線傳感器與執(zhí)行器網(wǎng)絡(luò)的設(shè)備來說,如果要跟互聯(lián)網(wǎng)上的設(shè)備終端進行連接,那就必須經(jīng)過協(xié)議轉(zhuǎn)換才能做到,但由于自身性能的限制,而不能自行進行協(xié)議轉(zhuǎn)換,若在傳統(tǒng)的無線路由器上,結(jié)合開源無線路由操作系統(tǒng)OpenWRT,將其作為網(wǎng)關(guān)設(shè)備,就能實現(xiàn)與互聯(lián)網(wǎng)的無縫連接.
本網(wǎng)關(guān)是在OpenWRT無線路由器上部署MQTTMQTT-SN協(xié)議,以實現(xiàn)無線傳感器與執(zhí)行器網(wǎng)絡(luò)與傳統(tǒng)通信網(wǎng)絡(luò)的無縫連接.消息隊列遙測傳輸(Message Queuing Telemetry Transport,MQTT)是IBM開發(fā)基于消息發(fā)布與訂閱機制的即時通訊協(xié)議,有可能成為物聯(lián)網(wǎng)的重要組成部分.該協(xié)議支持大部分的嵌入式系統(tǒng)平臺,幾乎可以把大部分的物聯(lián)網(wǎng)硬件和外部網(wǎng)絡(luò)連接起來,通常被用來當(dāng)做傳感器和執(zhí)行器(比如通過Twitter讓房屋聯(lián)網(wǎng))的通信協(xié)議[2].MQTT-SN協(xié)議是MQTT針對無線傳感器網(wǎng)絡(luò)(Wireless Sensor Networks,WSN)的拓展.MQTT-SN的運行需要依賴于已部署MQTT協(xié)議的網(wǎng)絡(luò).MQTT-SN協(xié)議中有兩個角色:節(jié)點(Node)和網(wǎng)關(guān)(GW).WSN節(jié)點通過MQTT-SN協(xié)議與網(wǎng)關(guān)交互,網(wǎng)關(guān)進行協(xié)議轉(zhuǎn)換之后使節(jié)點接入MQTT服務(wù)器.由于MQTT-SN協(xié)議運行需要依賴于MQTT協(xié)議,下文使用MQTT-SN協(xié)議泛指MQTTMQTT-SN的組合[3].
本文提出的IPv6物聯(lián)網(wǎng)接入網(wǎng)關(guān)將IPv6無線傳感網(wǎng)與現(xiàn)有的IPv4網(wǎng)絡(luò)相融合,進行協(xié)議轉(zhuǎn)換.底層的物聯(lián)網(wǎng)使用部署了MQTT-SN協(xié)議的contiki節(jié)點,這些節(jié)點通過IEEE 802.15.14無線協(xié)議與邊界節(jié)點通信;邊界節(jié)點則使用PL2302 USB轉(zhuǎn)串口芯片與運行MQTT-SN網(wǎng)關(guān)的無線路由器相連;運行OpenWRT系統(tǒng)的路由器可與contiki節(jié)點組建一個網(wǎng)絡(luò),MQTT服務(wù)器通過網(wǎng)線或Wifi接入網(wǎng)關(guān)所在的局域網(wǎng)內(nèi);物聯(lián)網(wǎng)應(yīng)用程序可運行在手機、電腦、開發(fā)板或其它平臺,也是通過網(wǎng)線或Wifi接入該局域網(wǎng),并與MQTT服務(wù)器通信,系統(tǒng)結(jié)構(gòu)如圖1所示.
網(wǎng)關(guān)選擇華為HG255D無線路由器作為硬件平臺,其處理器為MIPS架構(gòu)的Ralink RT3052,擁有4個Lan口、1個Wan口、一個USB接口.運行OpenWRT系統(tǒng),可拓展路由器的功能,配合contiki物聯(lián)網(wǎng)節(jié)點,共同完成本設(shè)計.
圖1 系統(tǒng)結(jié)構(gòu)
Contiki傳感器與執(zhí)行器節(jié)點的處理器為意法半導(dǎo)體公司的STM32W108,該處理器采用了32位ARMCortex-M3內(nèi)核,其特點是低功耗、處理能力強,該微控制器提供了豐富的GIPO接口,可以當(dāng)作連接外部設(shè)備的控制接口,如用于提供LED、按鍵、蜂鳴器接口,使節(jié)點具有豐富的人機交互與設(shè)備控制功能;STM32W108提供豐富外設(shè)接口如UART、ADC等.
OpenWRT是一個高度模塊化、高度自動化的嵌入式Linux操作系統(tǒng),具有強大的網(wǎng)絡(luò)功能和擴展能力.同時,還提供了100多個軟件以供編譯選擇,而且數(shù)量還在不斷增加,其中包含支持IPv6的相關(guān)軟件.在同類的無線路由器固件系統(tǒng)中,OpenWRT在性能、穩(wěn)定性、可擴展性方面的出色表現(xiàn),贏得眾多開發(fā)者的支持.是一個全功能的,易于擴展的路由器操作系統(tǒng),成為在同類產(chǎn)品中最好的固件解決方案.由于OpenWRT系統(tǒng)擁有強大的可擴展性,可以通過交叉編譯來運行OpenWRT官方未提供的程序,以滿足用戶定制的需求.此外,Linux也為用戶提供了眾多的開源且免費的軟件,基于此,本系統(tǒng)選擇OpenWRT作為網(wǎng)關(guān)的操作系統(tǒng).
在物聯(lián)網(wǎng)中,運行contiki系統(tǒng)的無線傳感器與執(zhí)行器網(wǎng)絡(luò)的節(jié)點通過contiki邊界節(jié)點與外界通信,基于6LoWPAN的物聯(lián)網(wǎng)使用IPv6協(xié)議,因此在路由器上需有一個IPv6的網(wǎng)絡(luò)接口與之建立通信.在路由運行contiki自帶的tunslip6程序,該程序執(zhí)行后會建立一個名為“tun0”的虛擬網(wǎng)卡.Tunslip6的作用是建立RPL邊界節(jié)點與tun0兩者之間相互通信的橋梁,給邊界路由器賦予IPv6網(wǎng)絡(luò)地址,例如aaaa::1/64,它的原理是在主機上為tun0 虛擬網(wǎng)卡配置網(wǎng)絡(luò)參數(shù)(虛擬網(wǎng)卡設(shè)備位于/dev/net/tun0,可以直接用程序讀寫該設(shè)備,tun0建立在數(shù)據(jù)鏈路層,所以讀寫內(nèi)容為IP數(shù)據(jù)包),邊界路由器(border-router)與主機之間通信使用的是slip協(xié)議,slip協(xié)議為一個串口IP協(xié)議,tunslip6程序中包含讀串口的代碼,可將讀到的內(nèi)容可以寫到tun0設(shè)備上,tunslip6程序中還包含讀tun0的代碼,可以將tun0讀到的內(nèi)容通過slip協(xié)議封裝后寫到串口,其原理可由圖2表示.
圖2 tunslip6原理
MQTT協(xié)議是為大量計算能力有限,且工作在低帶寬、不可靠的網(wǎng)絡(luò)的遠程傳感器和控制設(shè)備通訊而設(shè)計的協(xié)議.使用消息發(fā)布/訂閱模式,提供一對多的消息發(fā)布,使用TCP/IP提供網(wǎng)絡(luò)連接,小型傳輸,開銷很小(固定長度的頭部是2字節(jié)),協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量,使用Last Will和Testament特性通知有關(guān)各方客戶端異常中斷的機制以及“至多一次”、“至少一次”、“只有一次”三種消息發(fā)布服務(wù)質(zhì)量.
在MQTT協(xié)議中有發(fā)布者、訂閱者和代理(broker)三種角色,消息由發(fā)布者通過topic發(fā)布,由訂閱者對感興趣的topic進行訂閱,一個發(fā)布者可以對應(yīng)多個訂閱者,一個訂閱者也可以訂閱多個topic,另外訂閱者也可以是發(fā)布者,發(fā)布者也可以是訂閱者,這樣就實現(xiàn)了“M2M”(Machine to Machine)的通信.Broker類似于信差的角色,主要作用就是接收信件并投遞給訂閱信件的人.如果訂閱者不在線,也就是說沒有connected to the broker,那么消息會保留,等訂閱者在線時推送.圖3為MQTT協(xié)議消息訂閱發(fā)布模型.
圖3 MQTT訂閱發(fā)布模型
MQTT是基于TCP/IP協(xié)議的,在無線傳感器網(wǎng)絡(luò)中,可以采用MQTT-SN (MQTT for Sensor Networks)協(xié)議進行補充,它是為了資源受限硬件如傳感器設(shè)計的,能夠通過IEEE 802.15.4發(fā)送UDP數(shù)據(jù)包,再通過MQTT-SN網(wǎng)關(guān)與MQTT broker建立連接.MQTTSN的網(wǎng)關(guān)程序名為“mipsmqttsn”,負責(zé)處理tun0上的數(shù)據(jù),然后由 tun0轉(zhuǎn)發(fā)處理這些數(shù)據(jù).在運行mipsmqttsn程序時,需要MQTT服務(wù)器的IPv4地址作為參數(shù).應(yīng)用程序則與MQTT服務(wù)器直接通信.其工作原理可由圖5表示,圖4為物聯(lián)網(wǎng)網(wǎng)關(guān)設(shè)計系統(tǒng)結(jié)構(gòu)示意圖.
圖4 系統(tǒng)結(jié)構(gòu)
圖5 MQTT-SN訂閱發(fā)布交互模型
為了測試該設(shè)計,我們搭建一個簡單的測試環(huán)境,邏輯如圖6所示.
其中,MQTT服務(wù)器運行在Windows系統(tǒng),應(yīng)用程序運行在Linux系統(tǒng)中;contiki節(jié)點連接光敏傳感器,路由器為運行OpenWRT的物聯(lián)網(wǎng)網(wǎng)關(guān).Contiki光照節(jié)點捕獲光照數(shù)據(jù)后,將所獲取的光照數(shù)據(jù)以IPv6數(shù)據(jù)包形式通過無線射頻發(fā)送給邊界節(jié)點,邊界節(jié)點通過串口將數(shù)據(jù)包傳輸?shù)轿锫?lián)網(wǎng)網(wǎng)關(guān),網(wǎng)關(guān)進行協(xié)議轉(zhuǎn)換,轉(zhuǎn)換為IPv4數(shù)據(jù)包,發(fā)布到MQTT服務(wù)器,運行在Linux中的QT程序向MQTT服務(wù)器訂閱該topic,服務(wù)器收到訂閱請求后,向訂閱者推送訂閱消息,組網(wǎng)測試實物連接如圖7所示.
圖6 測試環(huán)境邏輯框圖
圖7 測試環(huán)境實物圖
在該測試系統(tǒng)中,contiki節(jié)點采集光敏傳感器的數(shù)據(jù),并向服務(wù)器發(fā)布數(shù)據(jù);contiki邊界節(jié)點則負責(zé)contiki節(jié)點與tun0網(wǎng)卡間的相互通信.
測試步驟:
1)啟動 MQTT服務(wù)器 apache-activemq,運行“apache-activemq-5.9.0inwin64”目錄中的 activemq.bat批處理文件,即可啟動服務(wù)器.該服務(wù)器的IP地址即為PC的IP地址,通過開始→運行→cmd→ipconfig來查看PC的IP地址.此時,IP地址為192.168.1.141.
圖8 MQTT服務(wù)器IP地址
2)查看無線路由器是否掛載邊界節(jié)點,若成功掛載上contiki的RPL邊界節(jié)點,則會在/dev/目錄下找到名為“ttyUSB0”的設(shè)備文件.
3)運行tunslip6命令生成tun0網(wǎng)卡:
tunslip6 -s/dev/ttyUSB0 aaaa::1/64 &
運行tunslip6,該程序使用tun/tap網(wǎng)絡(luò)協(xié)議使USB口可以作為虛擬網(wǎng)接口使用,在這里是建立起Contiki邊界節(jié)點與tun0之間的相互通信,結(jié)果如圖9所示.
圖9 運行tunslip6
啟動成功后,建立了tun0的接口,tun0節(jié)點的ip為aaaa::1/64,程序與邊界節(jié)點交互,根據(jù)tun0的網(wǎng)段與邊界節(jié)點自身的mac地址,獲得邊界節(jié)點的IPv6 地址為“aaaa::280:e102:15:c635”.
4)成功啟動tunslip6程序后,即可運行MQTTSN協(xié)議的網(wǎng)關(guān)程序.在路由器的終端輸入命令mipsmqttsn-h “MQTT服務(wù)器IP地址”,結(jié)果如圖10所示.
圖10 運行 mipsmqttsn
5)接入 contiki節(jié)點,給 contiki節(jié)點上電,它將自動與邊界節(jié)點組成6LoWPAN網(wǎng)絡(luò),根據(jù)邊界節(jié)點所處網(wǎng)段與節(jié)點自身mac地址,獲得一個與邊界節(jié)點處于同一網(wǎng)段的 IPv6 地址“aaaa::280:e102:15:cda5”,并開始向MQTT服務(wù)器發(fā)布光照強度的數(shù)據(jù).
圖11 Contiki節(jié)點串口信息
6)在Linux虛擬機中運行一個Qt數(shù)據(jù)采集程序,該程序向MQTT服務(wù)器訂閱光照強度的數(shù)據(jù),如圖12所示.
圖12 Qt應(yīng)用程序界面
結(jié)果顯示,該Qt程序能從MQTT服務(wù)器上獲取相應(yīng)的數(shù)據(jù).
在選擇物聯(lián)網(wǎng)網(wǎng)關(guān)的嵌入式設(shè)備與操作系統(tǒng)的過程中,我們曾考慮使用各種ARM嵌入式開發(fā)板,我們分別嘗試過運行Arm-Linux的Tiny210、Mini2440開發(fā)板,最后選擇了支持帶USB接口并支持OpenWRT的無線路由器.因為要使ARM開發(fā)板支持IPv6,就需要重新編譯內(nèi)核、新增相關(guān)模塊如tun/tap、IPv6以及各種硬件驅(qū)動,如果希望該網(wǎng)關(guān)提供無線熱點功能,還需要增加并驅(qū)動無線網(wǎng)卡,配置并交叉編譯HostAP,步驟繁瑣復(fù)雜.而提供USB接口的無線路由器可以方便連接contiki IPv6邊界路由節(jié)點,并且OpenWRT提供官方固件,各項內(nèi)核模塊以及相關(guān)硬件驅(qū)動(如USB串口驅(qū)動)均可通過“opkg install xxx”命令在線安裝(opkg是一個輕量快速的套件管理系統(tǒng),目前已成為Opensource界嵌入式系統(tǒng)標(biāo)準(zhǔn).常用于路由、交換機等嵌入式設(shè)備中,用來管理軟件包的安裝升級與下載).更重要的是無線路由器本身就板載無線Wifi模塊,并完美驅(qū)動可作為無線熱點AP使用,此外OpenWRT提供的WEB配置界面方便用戶配置各種網(wǎng)絡(luò)參數(shù).
在選擇MQTT服務(wù)器方面,當(dāng)前流行的開源MQTT代理服務(wù)器(MQTT Broker)的實現(xiàn)有:Mosquitto、HiveMQ、Apache ActiveMQ、RabbitMQ、Apollo、RSMB等.MQTT客戶端也有不同操作系統(tǒng)和編程語言的實現(xiàn),流行的客戶端庫有:Eclipse Paho(支持C、C++、Java、JavaScript、Python、Go、C#),M2MQTT(C#),FusesourceMQTTClient(Java),MQTT.js(javascript),libmosquitto(c/c++)等等,我們使用了Apache ActiveMQ作為MQTT服務(wù)器;由于contiki的應(yīng)用程序使用C語言開發(fā),在MQTT客戶端的開發(fā)也采用了基于Mosquitto庫來開發(fā)客戶端.
本設(shè)計是為解決物聯(lián)網(wǎng)中無線傳感器與執(zhí)行器網(wǎng)絡(luò)與傳統(tǒng)互聯(lián)網(wǎng)的接入網(wǎng)關(guān)問題,通過部署MQTTSN協(xié)議,使無線傳感器與執(zhí)行器網(wǎng)絡(luò)的各節(jié)點具備訂閱/發(fā)布的功能,通過移植MQTT-SN協(xié)議的網(wǎng)關(guān)程序到OpenWRT系統(tǒng)上,并與MQTT服務(wù)器相連,再加入自行開發(fā)的C/C++ Linux應(yīng)用程序,即可構(gòu)成一個簡單、實用的IPv6物聯(lián)網(wǎng)應(yīng)用系統(tǒng).
無線傳感與執(zhí)行器網(wǎng)絡(luò)的各節(jié)點采用IPv6協(xié)議,打破了傳統(tǒng)的IPv4物聯(lián)網(wǎng)格局,增大了地址量、增強了安全性.外部終端通過有線無線均可接入,使底層物聯(lián)網(wǎng)的控制變得更方便,具有一定的實際應(yīng)用意義與推廣價值.
但本次的設(shè)計也存在一些不足,如未將MQTT服務(wù)器架設(shè)到Internet上,以實現(xiàn)真正意義上的遠程控制物聯(lián)網(wǎng),如果將MQTT服務(wù)器架設(shè)到Internet上,將能實現(xiàn)遠程推送服務(wù),增強物聯(lián)網(wǎng)應(yīng)用系統(tǒng)的實用功能.
1互聯(lián)網(wǎng).物聯(lián)網(wǎng)網(wǎng)關(guān)總結(jié).http://wenku.baidu.com/link?url=R847CuPuArEW4ErfZwkV_yYoLBfVyjjhdgvK0sZGvignP6 wYik-GiG_DQ6TNES011Hx8wNn-N-CyLAbBfS1KRAr SntR1nr549XYjoBJQwwe.[2015-01-29].
2互聯(lián)網(wǎng).MQTT.http://baike.baidu.com/link?url=DEeX5Hzg ZIOlxUTy2w5VjX2e__WcmkRmQxr7iXg_prTVM-1dU0JRtdPu8HbsHAXMtW2sVaOiDdRr9BzIWf9Uw_.[2016-08-01].
3陳旖,張美平,許力.WSN應(yīng)用層協(xié)議MQTT-SN與CoAP的剖析與改進.計算機系統(tǒng)應(yīng)用,2015,24(2):229-234.