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