摘 要: 以STC12系列單片機(jī)和nRF905射頻收發(fā)器為核心,,設(shè)計了一種無線傳感器網(wǎng)絡(luò)節(jié)點和基于這種節(jié)點的自組織通信協(xié)議。給出了節(jié)點的整體結(jié)構(gòu),,詳細(xì)闡述了軟件設(shè)計流程,。試驗表明該節(jié)點實現(xiàn)了自組織和多跳數(shù)傳,通信穩(wěn)定可靠,,網(wǎng)絡(luò)吞吐率達(dá)到無線傳感器網(wǎng)絡(luò)的要求,。
關(guān)鍵詞: nRF905;無線傳感器網(wǎng)絡(luò),;自組織
無線傳感器網(wǎng)絡(luò)是計算機(jī)技術(shù),、傳感器技術(shù)和網(wǎng)絡(luò)通信技術(shù)相結(jié)合的產(chǎn)物。它由大量隨機(jī)分布的,、具有實時感知,、無線通信和自組織能力的傳感器節(jié)點組成[1]。隨著無線技術(shù)的高速發(fā)展,,無線傳感器網(wǎng)絡(luò)越來越多地走進(jìn)人們的視野中,。與有線技術(shù)相比,無線技術(shù)具有成本低,、體積小,、省去復(fù)雜的布線等優(yōu)點,。但是由于現(xiàn)有的無線傳感器節(jié)點大都采用電池供電,放置地點隨機(jī)變動,,隨時可能出現(xiàn)節(jié)點中斷的情況,,通信能力十分有限,需要經(jīng)常性的人工維護(hù),。因此,,無線傳感器網(wǎng)絡(luò)節(jié)點要具有自組織、中斷自我修復(fù)的功能,,需要設(shè)計合適的通信協(xié)議和路由算法,,以提高系統(tǒng)通信的可靠性。為此,,本文采用無線射頻芯片nRF905和STC12系列單片機(jī)設(shè)計了一種無線傳感器節(jié)點,,并且在典型自組織網(wǎng)絡(luò)的通信協(xié)議-動態(tài)源路由協(xié)議DSR(Dynamic Source Routing)[2-4]的基礎(chǔ)上,針對路由維護(hù)算法做出改進(jìn),,設(shè)計出一種易于實現(xiàn)且實用性高的通信協(xié)議,,實現(xiàn)了自組織和多跳傳輸數(shù)據(jù)的無線通信系統(tǒng)。
1 節(jié)點硬件設(shè)計
節(jié)點分為協(xié)調(diào)器節(jié)點和普通節(jié)點,,普通節(jié)點帶有傳感器,,負(fù)責(zé)采集需要的數(shù)據(jù)并組成網(wǎng)絡(luò),協(xié)調(diào)器節(jié)點負(fù)責(zé)整個網(wǎng)絡(luò)的控制和數(shù)據(jù)的匯總,、分析,、處理等。圖1為協(xié)調(diào)器和普通節(jié)點的結(jié)構(gòu)圖,。
1.1 MCU
STC12LE5410AD單片機(jī)是單時鐘/機(jī)器周期(1T)的兼容8051內(nèi)核單片機(jī),,是高速、低功耗的新一代8051單片機(jī),,指令代碼完全兼容傳統(tǒng)8051,,而速度快8~12倍,內(nèi)部集成硬件高速SPI(Serial Peripheral Interface)接口,、2 KB EEPROM,、A/D轉(zhuǎn)換模塊和MAX810專用復(fù)位電路。工作電壓2.4~3.8 V,,因此可用電池工作,,并可長時間工作。器件在少于6 μs的時間內(nèi)可以從低功耗模式迅速喚醒,。STC12LE5410AD的超小封裝,、高度集成、精簡外部電路可設(shè)計出更小的節(jié)點,,超低的價格可以大規(guī)模鋪設(shè)傳感器節(jié)點,。STC12LE5410AD單片機(jī)的這些特征,,非常適合應(yīng)用在無線傳感器網(wǎng)絡(luò)中。
1.2 射頻收發(fā)器件nRF905[5]
nRF905由挪威Nordic公司生產(chǎn),,是一個為433/868/915 MHz-ISM(工業(yè),、科學(xué)、醫(yī)療)頻段設(shè)計的單片無線收發(fā)芯片,,32腳QFN封裝,,工作電壓為1.9~3.6 V,最大發(fā)射功率為10 dBm,。該收發(fā)芯片由頻率合成器,、接收解調(diào)器、功率放大器,、晶體振蕩器和調(diào)制器組成,,片內(nèi)自動完成曼徹斯特編碼/解碼。nRF905有兩種活動(TX/RX)模式和兩種節(jié)電模式,?;顒幽J街g轉(zhuǎn)換時間小于550 μs,活動模式與節(jié)電模式之間的轉(zhuǎn)換時間小于650 μs,。
nRF905通過SPI與微控制器通信,,自動處理字頭和循環(huán)冗余碼校驗(CRC)。當(dāng)進(jìn)行數(shù)據(jù)發(fā)送時,,只需將配置寄存器信息、所要發(fā)送的數(shù)據(jù)和接收地址送給nRF905,,它就會自動完成數(shù)據(jù)打包(加字頭和CRC校驗碼)和發(fā)送,。接收數(shù)據(jù)時,nRF905自動檢測載波并進(jìn)行地址匹配,,接收到正確數(shù)據(jù)后自動移去字頭,、地址和CRC校驗碼,再通過SPI將數(shù)據(jù)傳送到微控制器,。
1.3 硬件連接設(shè)置
STC單片機(jī)通過內(nèi)部集成的硬件高速串行外設(shè)接口SPI與nRF905連接,,最快可達(dá)3 Mb/s,比軟件模擬SPI方式快30倍左右,,大大減少了程序執(zhí)行時間,,提高了網(wǎng)絡(luò)的吞吐率。同時在設(shè)計協(xié)調(diào)器節(jié)點與PC上位機(jī)軟件通信程序時,,利用STC單片機(jī)1T時鐘的優(yōu)勢,,設(shè)置串口波特率使用的定時器12倍速方式,使串口波特率提高至115 200 b/s,,提高了協(xié)調(diào)器節(jié)點的反應(yīng)速度,,減少了等待時間,,提高了系統(tǒng)的吞吐率。
2 節(jié)點軟件設(shè)計
本系統(tǒng)的軟件設(shè)計分為協(xié)調(diào)器節(jié)點Connector軟件和普通節(jié)點Node軟件的設(shè)計,,其中協(xié)調(diào)器節(jié)點作為整個網(wǎng)絡(luò)系統(tǒng)的主節(jié)點,,起著控制全網(wǎng)絡(luò)的作用,通過PC機(jī)的上位機(jī)軟件,,可以對協(xié)調(diào)器進(jìn)行接收和發(fā)送命令及數(shù)據(jù),,從而實現(xiàn)對整個系統(tǒng)網(wǎng)絡(luò)的控制。而每個普通節(jié)點也預(yù)留通信接口,,可以在需要的時候與其他設(shè)備相連接,。
由于本系統(tǒng)實現(xiàn)自組織網(wǎng)絡(luò)的需要,在物理層中為每個節(jié)點(包括協(xié)調(diào)器和普通節(jié)點)定義了相同的物理地址,,實現(xiàn)全網(wǎng)的廣播功能,。在網(wǎng)絡(luò)層為每個節(jié)點分配唯一的網(wǎng)絡(luò)地址,通過軟件判斷接收數(shù)據(jù)的目的節(jié)點是否是本機(jī),。
圖2為節(jié)點自組織流程圖,。當(dāng)網(wǎng)絡(luò)中增加一個新節(jié)點,新節(jié)點上電初始化后,,首先會向協(xié)調(diào)器發(fā)送路由請求RREQ請求加入網(wǎng)絡(luò),,并打開定時器;協(xié)調(diào)器收到RREQ后,,記錄新節(jié)點信息,,并通過反路由發(fā)送應(yīng)答信號ACK至源節(jié)點;如果新節(jié)點在設(shè)定的時間內(nèi)收到ACK信號,,表示加入網(wǎng)絡(luò)成功,,并且記錄本節(jié)點至協(xié)調(diào)器的路由信息;如果在設(shè)定的時間內(nèi)沒有收到ACK信號,,那么重新發(fā)送路由請求RREQ至協(xié)調(diào)器,,如此循環(huán)直至收到ACK信號。如果重發(fā)次數(shù)達(dá)到設(shè)定的上線,,仍沒有收到ACK信號,,則進(jìn)行全網(wǎng)廣播RREQ,并打開定時器,,等待返回RREP命令,;在設(shè)定時間后進(jìn)行重新廣播RREQ,直到到達(dá)重發(fā)上限,。新節(jié)點收到RREP表示加入網(wǎng)絡(luò)成功,,同時保存RREP命令幀中的路由信息。
2.1 路由協(xié)議
現(xiàn)有無線網(wǎng)狀網(wǎng)絡(luò)的路由協(xié)議通常可分為:表驅(qū)動式路由協(xié)議和按需路由協(xié)議,。前者需要網(wǎng)絡(luò)中的每個節(jié)點維護(hù)一張或多張路由表,,以記錄到其他節(jié)點的路由,增加了路由開銷,。而按需路由協(xié)議——動態(tài)源路由協(xié)議(DSR)使用了源路由,,每一個數(shù)據(jù)分組的幀頭中包含整條路由的信息,中間節(jié)點不需要維持當(dāng)前的路由信息,,分組自己帶有路由信息,,按需路由的特性避免了周期性路由廣播和鄰居節(jié)點的檢測。
DSR協(xié)議包括兩個過程:路由發(fā)現(xiàn)和路由維護(hù),。路由發(fā)現(xiàn)過程使用泛洪路由(Flooding Routing),。為了減少路由發(fā)現(xiàn)過程的開銷,每一個節(jié)點都包括一個緩存器,,存放最近學(xué)到的和用過的路由信息,。路由維護(hù)過程是源節(jié)點用來檢測網(wǎng)絡(luò)拓?fù)涫欠癜l(fā)生變化的機(jī)制。若拓?fù)浒l(fā)生變化,、源路由發(fā)生中斷,,源節(jié)點就會收到路由錯誤信息。其他節(jié)點收到路由錯誤信息后刪除中斷路由,,并且重新發(fā)起廣播尋找路由,。
本系統(tǒng)中的路由協(xié)議采用DSR協(xié)議,并對DSR協(xié)議進(jìn)行一些改進(jìn),。
(1)每個節(jié)點中到達(dá)目的節(jié)點含有最多兩個路由緩存,。
(2)查到中斷節(jié)點后先檢查本節(jié)點中有無到中斷節(jié)點下級節(jié)點的信息,若有,,則直接使用此路由,,若無,則立即廣播發(fā)送RRER,。
(3)所有節(jié)點收到RRER后,檢查是否含有終端路由,,有則刪除中斷路由,。
系統(tǒng)通信協(xié)議格式如表1所示。其中,,F(xiàn)RAME_TYPE表示命令幀類型,,SOURCE_ADDR表示源地址,F(xiàn)IRE_ADDR表示目的地址,,MID表示路由節(jié)點地址,,REMIAN表示最大跳數(shù)下剩余跳數(shù),MAX表示最大跳數(shù),DATA表示要傳輸?shù)臄?shù)據(jù),,ODD代表奇校驗,。
2.2 程序設(shè)計
2.2.1 廣播
在廣播RREQ時,為了避免廣播沖突,,利用nRF905的載波檢測多路訪問機(jī)制CSMA/CA,,發(fā)送前先進(jìn)入接收模式,監(jiān)聽該信道是否空閑,。如果檢測到CD信號為高,,則表示該信道被占用,根據(jù)退避延時一段時間,,再檢測CD信號是否為高,。
而根據(jù)檢測,數(shù)據(jù)包接收的時間大致為20 μs,,時隙為60 μs,,加上程序運行的時間,定義短幀空間SIFS和時隙分別為50 μs及100 μs,,分散幀空間DIFS為SIFS加2個時隙即250 μs,。CSMA/CA程序流程如圖3所示,定義NB,、CW和BE,。
后退次數(shù)(NB):NB的初始值為0,當(dāng)設(shè)備有數(shù)據(jù)要傳送時,,經(jīng)過一段后退時間(2BE-1)×100 μs后,,檢測CD,若檢測到信道忙,,則會再一次產(chǎn)生倒退時間,。此時NB值會加1,NB值最大定義為4,。當(dāng)信道在經(jīng)過4次的后退延遲時間后仍為忙,,則放棄此次的傳送,以避免過大開銷,。
嘗試次數(shù)(CW):循環(huán)判斷當(dāng)前頻道是否空閑,,當(dāng)判斷到了一定次數(shù)后該頻道依然空閑則跳出循環(huán),開始傳送數(shù)據(jù),,設(shè)初值為2,。
后退指數(shù)(BE):初值設(shè)為2。
本設(shè)計中,,CD信號為高時必須通過切換至standby模式來使CD信號復(fù)位,,以保證下次CD信號的檢測,。
根據(jù)nRF905模塊的時序可知,模塊從standby模式切換至接收或發(fā)送模式的時間為650 μs,,發(fā)送和接收模式之間的切換需要550 μs,,切換時間遠(yuǎn)大于時隙及DIFS的值。因此,,BE設(shè)置為2,,最大為4。
2.2.2 數(shù)據(jù)傳輸
在進(jìn)行數(shù)據(jù)傳輸時,,源節(jié)點首先檢查自己的緩存中是否有到目的節(jié)點的路由信息,,如果沒有,則先進(jìn)行路由發(fā)現(xiàn),,與廣播模式相同,。如果有至目的節(jié)點的路由信息,則根據(jù)路由信息,,先發(fā)送數(shù)據(jù)請求命令RTS,。當(dāng)目的節(jié)點接收到返回的允許發(fā)送命令CTS信號時,則表示已經(jīng)建立了數(shù)據(jù)傳輸通道,,由請求節(jié)點開始傳輸數(shù)據(jù),,傳輸完畢后,由目的節(jié)點發(fā)送DATA_ACK給源節(jié)點,,表示數(shù)據(jù)發(fā)送完畢,。其工作流程如圖4所示。
2.2.3 路由修復(fù)
數(shù)據(jù)傳輸時,,每個節(jié)點收到數(shù)據(jù)后,,都要先回復(fù)應(yīng)答ACK信號給其前一個節(jié)點,再轉(zhuǎn)發(fā)至下一個中繼節(jié)點,,節(jié)點中設(shè)置超時定時器,,約等待1 633 μs ACK信號,前一個節(jié)點沒有收到ACK,,則重發(fā)數(shù)據(jù),,設(shè)置重發(fā)次數(shù)為3。假若重發(fā)3次都沒有收到ACK信號,,則判斷下一個節(jié)點為中斷節(jié)點,。查詢緩存路由中是否有其他到達(dá)中斷節(jié)點下游節(jié)點的信息,有則使用這個備用路由,,無則廣播發(fā)送RERR給所有包含中斷節(jié)點路由的源節(jié)點,每個節(jié)點在收到該RERR后,,就會從它的路由緩存中刪除所有包含該中斷節(jié)點的路由,。
路由修復(fù)示例如圖5所示。節(jié)點0需要發(fā)送數(shù)據(jù)給節(jié)點5,節(jié)點0中含有到節(jié)點5的路由信息,,0→1→2→5,;節(jié)點0開始發(fā)送RTS,每個節(jié)點收到RTS后返回給前一個節(jié)點ACK,,表示路由無中斷,;假若節(jié)點1沒有收到ACK,重發(fā)3次后仍沒有ACK返回,,則判斷節(jié)點2是中斷節(jié)點,;這時查詢節(jié)點1中有無到達(dá)節(jié)點5的路由,發(fā)現(xiàn)1→3→4→5,,則按照此路由繼續(xù)發(fā)送RTS,;當(dāng)節(jié)點1返回DATA_ACK,表示數(shù)據(jù)傳輸完成,,延遲10×跳數(shù)(ms)后,,廣播發(fā)送RRER,收到RRER的每個節(jié)點查詢本節(jié)點是否含有中斷路由,,有則從路由緩存中刪除包含中斷節(jié)點的路由,。
3 試驗結(jié)果
試驗網(wǎng)絡(luò)系統(tǒng)由10個普通節(jié)點和1個協(xié)調(diào)器節(jié)點組成,采用人工隨機(jī)安放的方式把所有節(jié)點放置在約200 m的空曠地帶,。首先,,把協(xié)調(diào)器節(jié)點通過串口與主控PC機(jī)連接,打開上位機(jī)控制軟件,,并給協(xié)調(diào)器節(jié)點上電,;隨后在隨機(jī)放置普通節(jié)點的同時一一打開節(jié)點的電源。
通過上位機(jī)軟件可以清楚地看到,,每當(dāng)有新節(jié)點加入網(wǎng)絡(luò)(打開電源),,上位機(jī)會實時顯示出新加入節(jié)點的地址和路由信息,并且通過反向路由返回應(yīng)答信號給新節(jié)點,,表示成功加入網(wǎng)絡(luò),。當(dāng)所有節(jié)點都加入網(wǎng)絡(luò)后,可以通過上位機(jī)軟件看到整個網(wǎng)絡(luò)中各個節(jié)點的路由信息,,并且可以對每個節(jié)點或多個節(jié)點進(jìn)行遠(yuǎn)程控制,。
為了實時監(jiān)測到每個節(jié)點的運行情況,每個節(jié)點程序都加入定時掃描程序,,定時時間1 min,,檢測節(jié)點本身在1 min內(nèi)是否為空閑狀態(tài),如果是空閑狀態(tài),,則向協(xié)調(diào)器節(jié)點發(fā)送節(jié)點信號,,保證本鏈路無中斷,;協(xié)調(diào)器在一定時間周期內(nèi),檢測接收到的每個節(jié)點信號,,如果缺少某個節(jié)點的信息,,則由協(xié)調(diào)器發(fā)送檢測信號給這個節(jié)點,尋找中斷節(jié)點并進(jìn)行路由維護(hù),。也可以直接通過主控電腦的上位機(jī)軟件手動發(fā)送檢測信號給每個節(jié)點,,從而檢測每個節(jié)點的運行情況。
nRF905的空中傳輸速率峰值為100 kb/s,,有效傳輸速率為50 kb/s,。
通過上位機(jī)軟件對整個網(wǎng)絡(luò)進(jìn)行連續(xù)數(shù)據(jù)傳輸試驗,測試在本協(xié)議下的網(wǎng)絡(luò)吞吐率,。測試條件:200 m空曠地帶,,分別測試一個節(jié)點至10節(jié)點網(wǎng)絡(luò)中點對點,1跳,、2跳,、3跳情況下的吞吐率,數(shù)據(jù)包大小32 B,。傳輸要求一個包到達(dá)目的節(jié)點后返回到應(yīng)答表示傳輸完成,,其吞吐率計算[6]如下:
測得的網(wǎng)絡(luò)吞吐率如圖6所示??梢钥闯?,網(wǎng)絡(luò)中進(jìn)行點對點的數(shù)據(jù)傳輸,吞吐率約為16 kb/s,,并且隨著節(jié)點數(shù)的增多,,影響很小,;隨著跳數(shù)的增加,,網(wǎng)絡(luò)吞吐率降低,但是網(wǎng)絡(luò)中節(jié)點數(shù)量增多,,同時節(jié)點傳輸幾率增加,,因此逐漸趨于穩(wěn)定值。最后在網(wǎng)絡(luò)設(shè)定最大跳數(shù)(3跳),、10個節(jié)點網(wǎng)絡(luò)的情況下,,網(wǎng)絡(luò)吞吐率約為4 kb/s。
通過實驗測得數(shù)據(jù)表明,,在短距離的無線通信網(wǎng)絡(luò)中,,該系統(tǒng)可以穩(wěn)定可靠地運行,數(shù)據(jù)傳輸率高,,網(wǎng)絡(luò)吞吐率完全可以達(dá)到一般的無線傳感器網(wǎng)絡(luò)的要求,。并且該系統(tǒng)具有良好的擴(kuò)展性,、移植性和實用性,可廣泛運用于溫度,、濕度、光傳感器采集數(shù)據(jù),、能量監(jiān)測及電路控制等技術(shù),。
參考文獻(xiàn)
[1] 孫利民,李建中,,陳渝,,等.無線傳感器網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社,2005.
[2] 陳???,陳勤,羅敏,,等.DSR本地修復(fù)算法的改進(jìn)[J].微電子學(xué)與計算機(jī),,2009(26):142-145.
[3] JAWHAR I, TRABELSI Z,, Al-JAROODI J. Towards more reliable source routing in wireless networks[C]. Proc. IEEE Int. Conf. Networking,, Archit., Storage-IEEE NAS 2008,, 2008.
[4] 屠梓浩,,吳榮泉,錢立群.無線Ad Hoc網(wǎng)絡(luò)DSR路由協(xié)議的優(yōu)化設(shè)計[J].計算機(jī)工程,,2009,,35(4):97-99.
[5] Nordic VLSIASA. Single Chip 433/868/915MHz Transceiver nRF905. 2004-01.
[6] 柯欣,孫利民.多跳無限傳感器網(wǎng)絡(luò)吞吐量分析[J].通信學(xué)報,,2007,,28(9):78-84.