周艷平,馬維軍
(青島科技大學 信息科學技術(shù)學院,山東 青島 266061)
ZigBee技術(shù)作為時下新興的近距離無線傳感網(wǎng)絡(luò)通信技術(shù),具有距離短、功耗低、成本低和自組網(wǎng)等優(yōu)點,在工農(nóng)業(yè)、軍事、醫(yī)療和環(huán)境監(jiān)測領(lǐng)域有著普遍的應用[1-3]。近年來溫室大棚因其突破地域、季節(jié)、氣候等因素的限制,在我國得到廣泛的推廣[4]。但傳統(tǒng)的溫室大棚生產(chǎn)效率低,人力成本高,網(wǎng)絡(luò)和信息技術(shù)的發(fā)展為溫室大棚供了新的方向[5]。
本文設(shè)計了一種改進ZigBee路由算法,解決了ZigBee網(wǎng)絡(luò)中由于RREQ分組洪泛而導致的能量過度損耗和節(jié)點失效的問題,結(jié)合改進的ZigBee路由算法設(shè)計了溫室監(jiān)控無線網(wǎng)絡(luò),實現(xiàn)了溫室內(nèi)農(nóng)作物生長參數(shù)的實時采集、遠程監(jiān)測和控制功能。
ZigBee聯(lián)盟將ZigBee網(wǎng)絡(luò)中的節(jié)點分為協(xié)調(diào)器節(jié)點(coordinator)、路由器節(jié)點(router)和終端節(jié)點(end device)[6]。IEEE802.15.4標準從設(shè)備完整性的角度出發(fā),將ZigBee網(wǎng)絡(luò)中的設(shè)備分成全功能型(FFD)和精簡功能型(RFD)。ZigBee網(wǎng)絡(luò)中的協(xié)調(diào)器負責發(fā)起和建立網(wǎng)絡(luò)且協(xié)調(diào)器只能由FFD充任,終端節(jié)點既可以由FFD充任也可以由RFD充任。ZigBee網(wǎng)絡(luò)分成星型網(wǎng)(star)、網(wǎng)狀網(wǎng)(Mesh)和簇樹型(cluster-tree)3種網(wǎng)絡(luò)拓撲結(jié)構(gòu)。星型網(wǎng)絡(luò)的終端節(jié)點以協(xié)調(diào)器為中心呈星型分布,終端節(jié)點必須處于協(xié)調(diào)器的通信范圍之內(nèi),致使星型網(wǎng)絡(luò)的通信范圍過小。網(wǎng)狀網(wǎng)絡(luò)中各節(jié)點之間可以直接或間接的進行通信,具有高可靠性和高冗余性的特點,但網(wǎng)狀網(wǎng)絡(luò)的拓撲結(jié)構(gòu)復雜,路由開銷大。簇樹型網(wǎng)絡(luò)是一種分層次的網(wǎng)絡(luò)拓撲結(jié)構(gòu),吸收了星型網(wǎng)絡(luò)和網(wǎng)狀型網(wǎng)絡(luò)的優(yōu)點,可擴展性強,得到了廣泛應用。
ZigBee網(wǎng)絡(luò)中的節(jié)點具有一個16位的網(wǎng)絡(luò)地址和一個64位IEEE地址,64位IEEE地址具有唯一性,16位的網(wǎng)絡(luò)地址由父節(jié)點予以分配。ZigBee網(wǎng)絡(luò)采用DAAM分布式地址分配機制[7]。在DAAM分布式地址分配機制中,定義Cskip(d)函數(shù)用于計算父節(jié)點為子節(jié)點分配的地址偏移量,公式如下:
(1)
其中:d表示父節(jié)點深度,Cm代表每個父節(jié)點能擁有的至多子節(jié)點的個數(shù),Lm代表網(wǎng)絡(luò)的最大深度,Rm代表父節(jié)點能擁有的至多路由器節(jié)點的數(shù)量[8-9]。不同類型的節(jié)點分配地址的方式也不同。ZigBee協(xié)調(diào)器節(jié)點地址為0x00,新加入的節(jié)點按照加入順序地址深度依次加1,若新加入的節(jié)點是終端節(jié)點,其父節(jié)點通過式(2)計算節(jié)點的地址;若新加入的節(jié)點是路由器節(jié)點,其父節(jié)點通過式(3)計算節(jié)點的地址。
An=Aparent+Cskip(d)×Rm+n
(2)
An=Aparent+(n-1)×Cskip(d)+1
(3)
在ZigBee網(wǎng)絡(luò)中,每一個具有路由能力的節(jié)點都會維護一個在其一跳通信范圍內(nèi)的鄰居表。在ZigBee協(xié)議中規(guī)定,鄰居表包含了在其一跳范圍內(nèi)ZigBee節(jié)點的所有信息且其記錄的內(nèi)容會因為網(wǎng)絡(luò)內(nèi)節(jié)點的變化而保持實時更新。鄰居表的實時更新有利于及時獲取相鄰節(jié)點信息,選擇符合通信要求的節(jié)點。鄰居表中記錄的內(nèi)容不是固定的,可根據(jù)需要在鄰居表中添加一些特定的參數(shù)信息。
目前在ZigBee網(wǎng)絡(luò)常用的路由算法有Cluster-Tree路由算法和AODVjr路由算法。
Cluster-Tree路由算法基于ZigBee地址分配機制計算下一跳節(jié)點的16位網(wǎng)絡(luò)短地址,在傳輸方向上按照樹形結(jié)構(gòu)向上或向下傳輸。在 Cluster- Tree算法中,結(jié)合式(4)辨別目的節(jié)點是否為自己的后代,根據(jù)式(5)計算出下一跳的地址,并將數(shù)據(jù)轉(zhuǎn)發(fā)至下一跳節(jié)點。Cluster-Tree路由算法傳輸效率低,且選擇的傳輸路徑不一定是最優(yōu)路徑,接近協(xié)調(diào)器的節(jié)點容易因能量低而脫離網(wǎng)絡(luò),致使網(wǎng)絡(luò)癱瘓。
A (4) (5) AODVjr算法是一種按需分配的路由協(xié)議,規(guī)定只有目的節(jié)點能發(fā)送路由應答分組(RREP),刪除了先驅(qū)節(jié)點列表以及hello分組。AODVjr算法路由發(fā)現(xiàn)過程如圖1所示。在前向路由建立的過程中,節(jié)點在接收到RREQ后,選擇跳數(shù)較少的RREQ并更新節(jié)點路由信息,直至目的節(jié)點接收到RREQ。目的節(jié)點在接收到RREQ分組之后,選擇跳數(shù)較少的路徑向源節(jié)點發(fā)送RREP分組來創(chuàng)建反向路由[10]。源節(jié)點收到RREP之后,準備進行數(shù)據(jù)的傳輸。 AODVjr路由算法在路由發(fā)現(xiàn)過程中對RREQ分組的廣播范圍和廣播方向沒有限制,當網(wǎng)絡(luò)規(guī)模較大時容易引起廣播風暴,增加節(jié)點的能耗[11]。 圖1 路由發(fā)現(xiàn)過程示意圖 針對 ZigBeeCluster- Tree算法和 AODVjr算法中存在的問題,提出一種優(yōu)化的 ZigBee路由算法,該算法以 AODVjr算法為基礎(chǔ),結(jié)合 Cluster- Tree算法,對 RREQ分組的廣播過程進行限制,并從節(jié)點的剩余能量值和鏈路質(zhì)量入手,對ZigBee路由算法進行改進。 在ZigBee網(wǎng)絡(luò)中,越靠近協(xié)調(diào)器的節(jié)點,數(shù)據(jù)轉(zhuǎn)發(fā)量越大,需要對節(jié)點的剩余能量值進行估量,防止網(wǎng)絡(luò)分割現(xiàn)象的出現(xiàn)。可運用下式對節(jié)點的剩余能量值進行估量: (6) 其中:Emin表示節(jié)點最小剩余能量值,t表示網(wǎng)絡(luò)運行時間,energy表示節(jié)點初始能量,dj表示節(jié)點深度,為特定系數(shù)用于減緩Emin衰減的速度。 在ZigBee中規(guī)定的鏈路質(zhì)量指示(link quality indicator, LQI)用于計量接收到的數(shù)據(jù)幀的強度與質(zhì)量,衡量通信過程中數(shù)據(jù)包的丟失情況。LQI的值可以通過下式計算得到。 (7) 其中:n表示環(huán)境衰減因子,d表示節(jié)點之間的間隔,A表示節(jié)點發(fā)射端和接收端間隔1米時的信號強度。LQI的取值在0x00~0xFF之間,當LQI的值大于0x4B時,表明節(jié)點接收到的數(shù)據(jù)幀的強度與質(zhì)量滿足通信要求,當LQI的值低于0x32時,節(jié)點接收到的數(shù)據(jù)幀的強度和質(zhì)量較差,數(shù)據(jù)包的多次重傳導致節(jié)點能量消耗加劇[12-13]。 在Cluster-Tree算法中,網(wǎng)絡(luò)最大深度的2倍即2 Lm是可能存在的最大路徑,故在優(yōu)化算法中設(shè)置RREQ分組的最大廣播范圍為2 Lm。結(jié)合Cluster-Tree路由算法辨別目的節(jié)點是不是自己的子孫節(jié)點來控制RREQ分組的廣播方向。在 RREQ分組中設(shè)置標記位 Flag, Flag=0則接收到 RREQ的節(jié)點的子孫節(jié)點不廣播該 RREQ, Flag=1則接收到該 RREQ分組的節(jié)點的父節(jié)點不廣播該 RREQ分組。在路由節(jié)點中添加一個變量Power表示節(jié)點可用的能量值。 改進算法流程如下: 1)源節(jié)點為終端節(jié)點時,由父節(jié)點廣播終端節(jié)點的數(shù)據(jù)。 2)源節(jié)點為路由節(jié)點且其鄰居表內(nèi)未記錄目的節(jié)點地址,則啟動路由發(fā)現(xiàn)過程,并根據(jù)式5)設(shè)置Flag值。 3)在路由發(fā)現(xiàn)階段,中間節(jié)點B在接收到節(jié)點A的RREQ分組之后,檢查RREQ分組的轉(zhuǎn)發(fā)次數(shù)(Hops)以及中間節(jié)點自身的剩余能量值(Power)和鏈路質(zhì)量(LQI)。 4)如果Hops>2Lm,節(jié)點B丟棄該分組;如果Power 5)中間節(jié)點查詢鄰居表中是否記錄該目的節(jié)點,若有記錄,中間節(jié)點直接將RREQ分組發(fā)送給該鄰居節(jié)點。否則Flag=0時,若節(jié)點B是節(jié)點A的子節(jié)點,節(jié)點B不廣播該RREQ。若節(jié)點B是A的父節(jié)點,且目的節(jié)點是節(jié)點B的子孫節(jié)點,節(jié)點B在設(shè)置Flag=1,Hops加1后廣播RREQ分組并替換Power值;如果目的節(jié)點不是節(jié)點B的子孫節(jié)點,則節(jié)點B保持Flag值不變,替換Power值和Hops值之后,轉(zhuǎn)發(fā)RREQ分組。 Flag=1時,若節(jié)點B是節(jié)點A的父節(jié)點,節(jié)點B不廣播該RREQ分組。若節(jié)點B是節(jié)點A的子節(jié)點,且目的節(jié)點不是節(jié)點B的子孫節(jié)點,則節(jié)點B不廣播該RREQ分組;若目的節(jié)點是節(jié)點B的子節(jié)點,節(jié)點B保持Flag值不變,更新Power值和Hops之后,廣播RREQ分組。 6)目的節(jié)點在接收到RREQ之后,按照RREQ的廣播路徑向源節(jié)點發(fā)送RREP。源節(jié)點收到后,按照該路徑傳輸數(shù)據(jù)。 為了評估改進后的路由算法的性能,在NS2仿真軟件中從網(wǎng)絡(luò)剩余能量、分組投遞率以及網(wǎng)絡(luò)節(jié)點死亡數(shù)量3個方面設(shè)置仿真實驗,對改進算法和傳統(tǒng)算法進行仿真。 在仿真實驗中,設(shè)置網(wǎng)絡(luò)范圍為100 m*100 m,網(wǎng)絡(luò)參數(shù)Cm=5,Lm=6,Rm=4,數(shù)據(jù)包長度為128 bits,節(jié)點的初始能量值為1 500 J,采用 CBR作為數(shù)據(jù)信息源,在分析網(wǎng)絡(luò)剩余能量和分組投遞率時,分別設(shè)置節(jié)點數(shù)量為10~100個不同的網(wǎng)絡(luò)環(huán)境下進行仿真,在分析網(wǎng)絡(luò)節(jié)點死亡率時,設(shè)置節(jié)點數(shù)量為100。仿真實驗結(jié)果如圖2~4所示。 圖2 網(wǎng)絡(luò)剩余能量百分比對比圖 圖3 分組投遞率對比圖 圖4 網(wǎng)絡(luò)節(jié)點死亡率對比圖 根據(jù)NS2仿真實驗得出的結(jié)果,從網(wǎng)絡(luò)剩余能量、分組投遞率以及網(wǎng)絡(luò)死亡節(jié)點數(shù)量3個方面對仿真結(jié)果進行分析。 網(wǎng)絡(luò)剩余能量百分比的值越高表明網(wǎng)絡(luò)的剩余能量值越高,網(wǎng)絡(luò)的能量損耗也就越低,網(wǎng)絡(luò)的生命周期也就越長。該值可以通過網(wǎng)絡(luò)剩余能量值和網(wǎng)絡(luò)初始能量值計算得到。分組投遞率是接收數(shù)據(jù)分組與投遞數(shù)據(jù)分組總數(shù)的比值,體現(xiàn)了節(jié)點間的LQI,是衡量網(wǎng)絡(luò)傳輸性能的關(guān)鍵指標。 從圖2可以看出,節(jié)點數(shù)量的逐步增多,導致網(wǎng)絡(luò)剩余能量百分比逐漸降低。改進的路由算法由于在路由發(fā)現(xiàn)階段對 RREQ分組的廣播范圍進行限制,減少了不必要的能量損耗,同時能量較低的節(jié)點不參與 RREQ分組廣播,有效了節(jié)省了網(wǎng)絡(luò)的整體耗能。 從圖3中可以看出,由于改進的路由算法對RREQ分組的廣播范圍進行限制并選擇LQI值符合要求的節(jié)點,使得分組投遞率得到提高。 從圖4可以看出,在網(wǎng)絡(luò)運轉(zhuǎn)的前期,由于節(jié)點能量充裕,節(jié)點死亡率為零,隨著網(wǎng)絡(luò)的運轉(zhuǎn),部分節(jié)點因頻繁進行數(shù)據(jù)轉(zhuǎn)發(fā)和數(shù)據(jù)接收,導致節(jié)點能量耗盡,節(jié)點死亡率逐漸升高。優(yōu)化的 ZigBee路由算法從節(jié)點的剩余能量值入手,數(shù)據(jù)不廣播給剩余能量值較低的節(jié)點,死亡節(jié)點出現(xiàn)的時間較晚且節(jié)點死亡率低于傳統(tǒng)的路由算法,顯著的提高了網(wǎng)絡(luò)的運行周期。 結(jié)合圖2~4的仿真結(jié)果及以上分析,可以看出優(yōu)化算法能夠達到預期效果。 結(jié)合改進的ZigBee路由算法,設(shè)計了一種基于ZigBee技術(shù)的溫室監(jiān)控無線網(wǎng)絡(luò),無線網(wǎng)絡(luò)采用樹型拓撲結(jié)構(gòu),在每個溫室內(nèi)設(shè)置一個路由節(jié)點和十至二十個終端節(jié)點。 溫室監(jiān)控無線網(wǎng)絡(luò)由監(jiān)控終端、ZigBee網(wǎng)關(guān)以及上位機數(shù)據(jù)監(jiān)控中心三部分構(gòu)成,網(wǎng)絡(luò)架構(gòu)如圖5所示。監(jiān)控終端包括路由節(jié)點、采集及控制節(jié)點。路由節(jié)點負責存儲和轉(zhuǎn)發(fā)采集節(jié)點采集的數(shù)據(jù),并將控制指令轉(zhuǎn)發(fā)給控制節(jié)點。采集節(jié)點和控制節(jié)點由ZigBee通信模塊和特定的傳感器組成,負責采集和控制溫室內(nèi)的環(huán)境參數(shù)(包括溫濕度、CO2濃度和光照強度等)。 ZigBee網(wǎng)關(guān)是溫室監(jiān)控無線網(wǎng)絡(luò)的核心,由 ZigBee協(xié)調(diào)器和 STM32微控制器兩部分組成,負責建立和維護無線網(wǎng)絡(luò),接收采集節(jié)點發(fā)送的數(shù)據(jù),將數(shù)據(jù)格式轉(zhuǎn)換之后發(fā)送至上位機數(shù)據(jù)監(jiān)控中心,同時將上位機數(shù)據(jù)監(jiān)控中心發(fā)送的指令轉(zhuǎn)發(fā)給終端節(jié)點。 圖5 溫室監(jiān)控無線網(wǎng)絡(luò)架構(gòu) ZigBee網(wǎng)關(guān)由ZigBee協(xié)調(diào)器和STM32微型控制器組成。 STM32微控制器選用 ALIENTEK戰(zhàn)艦 STM32 F103開發(fā)板,以ARM Cortrex- M3為內(nèi)核,CPU工作頻率最高可達72 MHz,板載十多種標準接口和豐富的片上資源,板載的 DM9000網(wǎng)絡(luò)接口芯片通過1個100 M以太網(wǎng)接口( RJ45)實現(xiàn)連接互聯(lián)網(wǎng)和數(shù)據(jù)的遠程傳輸功能。 ZigBee協(xié)調(diào)器選擇 CC2530芯片,它是一種支持 IEEE802.15.4、 ZigBee和 RF4 CE應用的片上系統(tǒng)( SOC)解決方案,具有無線射頻模塊,集成RF收發(fā)器功能,是一種增強型的8051CPU,能夠以極低的功耗和極低的成本建立起強大的無線傳感器網(wǎng)絡(luò)[14-15]。ZigBee網(wǎng)關(guān)硬件結(jié)構(gòu)如圖6所示。 圖6 ZigBee網(wǎng)關(guān)硬件結(jié)構(gòu) 軟件設(shè)計部分需要對溫室監(jiān)控無線網(wǎng)絡(luò)中的3種ZigBee節(jié)點的通信模塊移植 Z- stack協(xié)議棧,它是 TI公司推出的 ZigBee無線通訊協(xié)議,定義了 OSAL操作系統(tǒng)并管理和調(diào)度 ZigBee網(wǎng)絡(luò)中各層定義的協(xié)議,并提供 API接口函數(shù),方便用戶調(diào)用。根據(jù)Z-stack協(xié)議棧分別為協(xié)調(diào)器節(jié)點、終端節(jié)點和路由節(jié)點設(shè)計程序。 圖7 ZigBee網(wǎng)關(guān)軟件流程 ZigBee網(wǎng)關(guān)是連接上位機數(shù)據(jù)監(jiān)控中心和監(jiān)控終端的橋梁。它既要保證節(jié)點正常工作,也要建立起與上位機數(shù)據(jù)監(jiān)控中心的通信功能。 ZigBee網(wǎng)關(guān)在建立網(wǎng)絡(luò)并處理完入網(wǎng)請求后,檢查是否接收到指令數(shù)據(jù)和采集節(jié)點傳回的環(huán)境數(shù)據(jù)并對指令及時作出響應,ZigBee網(wǎng)關(guān)軟件流程如圖7所示。路由節(jié)點在運行過程中只負責進行數(shù)據(jù)和控制指令的存儲和轉(zhuǎn)發(fā)。路由器節(jié)點在上電初始化后,檢測是否有新節(jié)點加入網(wǎng)絡(luò),接收終端節(jié)點發(fā)送的數(shù)據(jù)并將其轉(zhuǎn)發(fā)至 ZigBee網(wǎng)關(guān),同時將 ZigBee網(wǎng)關(guān)發(fā)送的控制指令轉(zhuǎn)發(fā)至終端節(jié)點。終端節(jié)點包括采集節(jié)點和控制節(jié)點,采集節(jié)點將定時采集到的環(huán)境數(shù)據(jù)發(fā)往ZigBee網(wǎng)關(guān),控制節(jié)點接收到控制指令后,解析指令并運行相應的控制設(shè)備。終端節(jié)點采取休眠-喚醒的機制,喚醒期間節(jié)點接收指令并執(zhí)行相應的采集和控制操作。終端節(jié)點的休眠時間可結(jié)合實際情況調(diào)節(jié),終端節(jié)點程序流程圖如圖8所示。 圖8 終端節(jié)點軟件流程 本文提出了一種優(yōu)化的ZigBee路由算法并將其應用在溫室監(jiān)控無線網(wǎng)絡(luò)中。改進的算法通過控制 RREQ分組的廣播范圍和廣播方向,選擇節(jié)點剩余能量和 LQI值較優(yōu)的節(jié)點廣播,從仿真圖像中可以看出,優(yōu)化的算法有效地降低了 ZigBee網(wǎng)絡(luò)的能耗,提高了 ZigBee網(wǎng)絡(luò)的運行時間。改進的ZigBee路由算法成功應用于溫室監(jiān)控無線網(wǎng)絡(luò)中,該改進算法和監(jiān)控無線網(wǎng)絡(luò)也可以在相關(guān)領(lǐng)域中應用。2 改進ZigBee路由算法
2.1 改進算法思路
2.2 改進算法流程
2.3 改進算法仿真
2.4 實驗結(jié)果與分析
3 溫室監(jiān)控無線網(wǎng)絡(luò)設(shè)計
3.1 硬件設(shè)計
3.2 軟件設(shè)計
4 結(jié)束語