基于ZigBee無線傳感網絡技術節(jié)點設計與實現(xiàn)
引言
保護民族物質文化和非物質文化遺產的任務一直都為國家所重視,少數民族博物館中的文物是國家最為寶貴的民族物質文化遺產,利用發(fā)展前景最為廣闊的無線傳感技術,將數字化保護概念落實到實際的少數民族遺產保護當中,搭建無線傳感網絡以完成數據的采集和傳遞,將博物館中的實時環(huán)境信息轉換為易讀的數字信號傳遞給管理員。
受到“十一五”國家科技支撐計劃的重點課題《民族特需品數字化關鍵技術研究與示范應用[課題編號2009BAH41B05]》項目的支持,研發(fā)一套適合民族家具博物館的物聯(lián)網無線傳感網絡產品。本文對整個無線傳感網絡體系中的網絡節(jié)點硬件、軟件提出具體設計思路和實現(xiàn)方法。
ZigBee網絡路徑
1.1路由基本算法
ZigBee網絡區(qū)別于其他無線傳感網絡之處就在于其預先進行地址分配,各節(jié)點由分布式算法根據一系列網絡參數來確定,節(jié)點只有通過協(xié)調器或者路由器節(jié)點才能加入網絡,加入網絡后隨即獲得一個唯一的地址。我們這里設Cm和Rm分別為節(jié)點所能分配的最大節(jié)點數和路由節(jié)點數,L為網絡的最大深度,則網絡深度為d的路由節(jié)點所能分配的地址塊大小如式(1)所示:
深度為d的父親節(jié)點分配的第k個路由節(jié)點和第n個終端節(jié)點的地址分別為:
在式(2)、(3)中,代表負責分配網絡地址的父節(jié)點地址,ZigBee網絡路由算法應用的就是這種分布式網絡地址分配機制。
1.2基于AODV路由算法
AODV即無線自組網按需平面距離向量路由協(xié)議,此算法通過檢查自己的路由表,如存在到達目的節(jié)點的表項則直接跳取到下一地址,否則節(jié)點以洪泛的方式向網絡廣播路由請求數據包,當該數據包到達目的節(jié)點時,目的節(jié)點以單播方式向路由發(fā)起節(jié)點回復路由數據包。當路由發(fā)起節(jié)點收到路由回復包后,一條新加入到路由表的通信鏈路便產生了。
該算法有很多優(yōu)點能夠大大提高網絡通信效率,有效地避免傳統(tǒng)網絡路由算法中出現(xiàn)的環(huán)路問題?;谛枨蟮木嚯x向量鏈路中由于發(fā)送數據之前需要對現(xiàn)有的通信路徑進行遍歷過程,因此在網絡較大的情況時也會導致網絡數據傳輸延時增大,進而造成網絡效率不高的問題。
1.3基于樹型結構路由算法
在網絡中,深度為d,源節(jié)點S若要想傳輸到任意節(jié)點D時,就可以簡單地根據的公式S<D<S+Cskp(d-1)來判斷該節(jié)點是否屬于自己的子孫節(jié)點。
依據式(4)來進行跳到下一個地址的行為,否則將數據輸出給父親節(jié)點。該算法的優(yōu)點是空間復雜度以及時間復雜度比較簡單,適用在網絡節(jié)點數目不是很多的情況,否則會導致分組傳輸時延高的缺點,從而造成網絡效率低下的問題。
Cluster-Tree算法是在樹型路由算法技術基礎上,由協(xié)調器作為中心點生成簇樹狀網絡拓撲結構,通過判斷目的節(jié)點是否是具有轉發(fā)功能設備的下屬節(jié)點,以決定是否進行數據包的轉發(fā),最終達到分層遍歷查找目的節(jié)點的結果叫這種算法可以大大減少信息冗余度和源節(jié)點的發(fā)送功率,對于數據高內聚非常有利,也在一定程度上彌補了樹型結構的缺點。
ZigBee網絡節(jié)點硬件設計
2.1節(jié)點總體硬件設計
節(jié)點按功能共可分為CC2430模塊、電源模塊和天線模塊三大模塊。其總體硬件設計如圖1所示。
2.2CC2430模塊
CC2430具有增強性能的8051MCU,8KBRAM等,其增強的8051MCU核的性能是工業(yè)標準8051核性能的8倍叫CC2430/CC2431還具備直接存儲器定址(DMA)功能,它能夠被用于減輕8051微控制器內核對數據搬移,因此提高了芯片整體的性能、可編程看門狗定時器、AES-128安全協(xié)處理器、多達8輸入的8?14位ADC、USART、睡眠模式定時、上電復位、掉電檢測電路(BrownOutDetection)等,CC2430有兩個晶振,分別是32MHz晶振和32.768kHz晶振。
2.3天線模塊
CC2430發(fā)送數據時,信號從差分射頻端口RF_P、RF_N經巴倫電路變?yōu)閱味诵盘?,由RXTX_SWITCH信號控制2個邏輯開關,選通功率放大電路(PA),放大后的信號從天線發(fā)射出去。接收信號時,在RXTX_SWITCH信號控制下,從天線接收的信號經低噪聲放大電路(LNA)放大,巴倫電路轉換,由RF_P、RF_N端口接收。天線模塊電路圖如圖2所示。2.4電源模塊
電源模塊主要是由TPS79533低壓穩(wěn)壓器輸出3.3V電壓,其輸入電壓范圍是2.7?5.5V,并具有較高的電源抑制比、超低噪聲、較好的電壓線性和負載瞬態(tài)效應以及較小的電壓漂移??梢詫?V的電源通過DC-DC變換器得到3.3V的工作電壓,電源電路如圖3所示。
圖2天線模塊電路
圖3電源模塊電路
ZigBee網絡節(jié)點軟件設計3.1ZigBee協(xié)議棧
ZigBee無線網絡的實現(xiàn),是建立在ZigBee協(xié)議棧[5,6]的基礎上的,協(xié)議棧采用分層的結構,協(xié)議分層的目的是為了使各層相對獨立,每一層都提供一些服務,服務由協(xié)議定義,它們向高層提供服務,并由低層提供服務。
在ZigBee協(xié)議棧中,物理層、MAC層位于最低層,且與硬件相關;網絡層、安全層、應用框架層以及安全層建立在物理層和MAC層之上,并且完全與硬件無關。分層的結構脈絡清晰、一目了然,給設計和調試帶來極大的方便。
Z-Stack采用了操作系統(tǒng)的思想來構建,采用事件輪循機制[7],當各層初始化之后,系統(tǒng)進入低功耗模式,事件發(fā)生時,喚醒系統(tǒng),開始進入中斷處理事件,結束后繼續(xù)進入低功耗模式。如果同時有幾個事件發(fā)生,先判斷優(yōu)先級,再逐次處理事件。
3.2協(xié)調器網絡的建立
在ZigBee網絡中,網絡協(xié)調器具有建立一個網絡、維護鄰居設備表、對邏輯網絡地址進行分配、允許設備MAC層/應用層的連接或斷開網絡的功能,網絡協(xié)調器在進行一些初始化之后調用aplFormNetwork()來建立網絡。協(xié)調器通過掃描一個空信道來建立一個新的網絡,然后選擇一個隨機的
PANID并開始監(jiān)聽此信道冏。同時協(xié)調器還有一個目前連接設備的列表,以支持其他設備加入網絡。網絡建立程序如下:
voidmain(void){halInit();//硬件初始化aplInit();//協(xié)議棧初始化aplFormNetwork();//建立網絡while(apsBusy()){apsFSM();}//等待網絡相應while(1)
{apsFSM();//執(zhí)行協(xié)議棧
}
}
3.3節(jié)點加入網絡
當一個網絡建立成功以后,便要考慮路由節(jié)點和RFD節(jié)點如何加入到網絡中去。節(jié)點通過調用aplJoinNetword()函數加入到協(xié)調器建立的網絡當中。通過掃描信道找到協(xié)調器并進一步申請加入網絡,獲取協(xié)調器的地址,同時將自己的地址發(fā)送給協(xié)調器。網絡加入成功以后,網絡節(jié)點則進入休眠狀態(tài),知道有命令或者數據發(fā)送時才被喚醒。網絡加入的程序如下:
voidmain(void){
halInit();//硬件初始化
aplInit();//協(xié)議棧初始化
do{
aplJoinNetwork();//加入網絡while(apsBusy()){apsFSM();}//等待網絡格式化}while(aplGetStatus()=WXLPAN_STATUS_SUCCESS);while(1){apsFSM();}//執(zhí)行協(xié)議棧
3.4數據發(fā)送與接收
在ZigBee協(xié)議棧中進行數據發(fā)送可以調用AF-DataRequest函數來實現(xiàn),該函數會調用協(xié)議棧里面與硬件相關的函數最終將數據通過天線發(fā)送出去。以下是AF_DataRequest數據發(fā)送程序:
afStatus_tAF_DataRequest(afAddrType_t*dstAddr,
endPointDesc_t*srcEP,,
uintl6cID,
uint16len,
uint8*buf,
uint8*transID,
uint8options,
uint8radius)
上面的程序中:afAddrType_t*dstAddr為包含了目的節(jié)點的網絡地址以及發(fā)送數據的格式;endPointDesc_t*srcEP為使用網絡地址來區(qū)分不同的節(jié)點,用端口號來區(qū)分統(tǒng)一節(jié)點的不同端口;uint16cID為描述命令號,不同的命令號代表不同的控制命令,用來表示不同的控制操作;uint16len為表示發(fā)送數據的長度;uint8*buf為指向發(fā)送數據緩沖區(qū)的指針;uint8*transID為指向發(fā)送序號的指針,每次發(fā)送數據后就會自動加1,配合接收端計算丟包率;uint8options為默認取AF_DISCV_ROUTE;uint8radius為默認取AF_DEFAULT_RADIUSo
在發(fā)送數據之前,接收的設備必須處于工作狀態(tài),否則將會出現(xiàn)“丟包”上層使用NLME-SYNC.request原語初始化設備,打開其接收機,該原語將引起網絡層使用MLME-POLL.request原語對其父設備進行輪詢図。ZigBee協(xié)調器或路由器的網絡層必須在最大程度上保證任何時間接收機總是處于接收狀態(tài)。
當協(xié)調器接收到節(jié)點發(fā)送來的數據后,操作系統(tǒng)會將該數據封裝成一個消息,然后放入消息隊列中,每個消息都有自己的消息ID,表示接收到新數據的消息的ID是AF_INCOMING_MSG_CMD[10],其宏定義為:
#defineAF_INCOMING_MSG_CMD0x1A
在協(xié)調器中相應代碼如下:
MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);
while(MSGpkt)
{
switch(MSGpkt->hdr.event)
{
caseAF_INCOMING_MSG_CMD;
GenericApp_MessageMSGCB(MSGpkt);
break;
}
}
首先使用osal_msg_receive函數從消息隊列中接收一個消息,然后使用switch-case語句udixiaoxileixing進行判斷(判斷消息ID),如果消息ID是AF_INCOMING_MSG_CMD貝丫進行相應的數據處理,進而完成數據的接收。
4測試結果
測試釆用的軟件是PacketSniffer,PacketSniffer是一款專門的協(xié)議分析軟件,可以對各層協(xié)議上的信息包進行分析和解碼;顯示出錯的包以及接入錯誤;指示觸發(fā)包;在接收和注冊過程中可連續(xù)顯示包,可以利用PacketSniffer分析ZigBee建立網絡,加入網絡,發(fā)送數據,接收數據的過程[11]oIEEE8022.15.4/ZigBee協(xié)議下協(xié)調器的組網過程如圖4所示。
圖4協(xié)調器組網
從圖4中顯示的數據包數據中,第2行到第7行是建立一個網絡的過程,在這里可以看出在網絡層管理實體一旦選擇了一個PAN標識符,就會立刻選擇一個0x0000的16位網絡地址,并且設置MAC層的macShortAddressPIB屬性,使其等于所選擇的網絡地址。
第8行的源地址是路由器的物理地址0x1716151413120030,它的PANID沒有確定為0xFFFFF,這時的路由器還沒有加入網絡,所以還沒有網絡地址,目的地址為協(xié)調器的網絡地址0x0000,它的PANID為0x0022;它的命令是聯(lián)合方式加入請求。該行表示的意思是向協(xié)調器發(fā)送聯(lián)合方式加入請求,發(fā)送完成后將得到一個應答。
節(jié)點在等待應答并回應后,就開始加入建立好的無線網絡,其加入網絡的過程如圖5所示。
圖5節(jié)點加入網絡
從圖中可見,已成功組網的協(xié)調器在收到應答以后,節(jié)點開始加入網絡。與此同時,協(xié)調器開始為路由器分配網絡地址,路由器分配到的網絡地址(SourceAddress)為0x0001。這樣就完成了節(jié)點加入網絡的過程,并分配了各自的網絡地址,從而也完成了無線網絡的組建和節(jié)點加入網絡的過程。
5結語
本系統(tǒng)采用ZigBee技術設計無線網絡節(jié)點,其設計思想簡單,成本較低并且有著很好的擴展性,可以適應不同環(huán)境對系統(tǒng)的要求,與此同時,通過通用串口搭載不同的傳感器又可以輕而易舉地實現(xiàn)對各種信息的采集和傳輸工作,在短距離無線傳感網絡的應用上有著明顯的優(yōu)勢,相信日后的發(fā)展前景會更好,給人們日常生活工作帶來更大的便利。