【摘 要】本文在Z-Stack協(xié)議的基礎(chǔ)上采用以 CC2530 芯片為核心,構(gòu)建一個無線傳感網(wǎng)絡(luò)。通過各終端利用自帶的 A/D 轉(zhuǎn)化器采集溫度數(shù)據(jù)并通過網(wǎng)絡(luò)匯聚到協(xié)調(diào)器,最終在PC機上顯示各節(jié)點數(shù)據(jù)和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。本實驗實現(xiàn)了ZigBee網(wǎng)絡(luò)的通信并驗證了無線傳感器網(wǎng)絡(luò)的自組織、自愈、多跳的特性。
【關(guān)鍵詞】Z-Stack協(xié)議棧 無線傳感器網(wǎng)絡(luò) ZigBee CC2530
無線傳感器網(wǎng)絡(luò)是由大量體積小,成本低,具有無線通信、傳感、數(shù)據(jù)處理能力的傳感器節(jié)點組成的,各傳感器節(jié)點被布置在整個觀測區(qū)域中,它們通過無線通信方式形成多跳、自組織網(wǎng)絡(luò)系統(tǒng),ZigBee作為一種專注于低功耗、低速率的無線網(wǎng)絡(luò)通信標(biāo)準(zhǔn),被廣泛應(yīng)用于WSN如智能抄表、家庭控制、醫(yī)療監(jiān)護和環(huán)境檢測等。本文主要介紹了基于Z-Stack協(xié)議棧的WSN建立過程,通過組建不同的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),以溫度采集為例,來剖析基于Z-Stack協(xié)議棧的應(yīng)用開發(fā)流程。
一、 Z-Stack協(xié)議棧的分析
(一)總體軟件框架
Z_Stack協(xié)議棧主要由Zigbee協(xié)議、操作系統(tǒng)抽象層(OSAL)和硬件抽象層(HAL)等各層組成。Z_Stack協(xié)議棧總體框架如圖1所示。HAL層提供了I/O,ADC,SPI等豐富的API接口;OSAL層負(fù)責(zé)管理系統(tǒng)的任務(wù)調(diào)度,整個調(diào)度采用輪詢機制,采用優(yōu)先級控制管理任務(wù),其主要作用是隔離硬件系統(tǒng)和協(xié)議棧,因此用戶可以大大縮短開發(fā)周期,即可在未知硬件平臺細(xì)節(jié)的基礎(chǔ)上,就可以利用OSAL提供的豐富工具實現(xiàn)各種功能 [4]。Z_Stack協(xié)議從main()函數(shù)開始啟動,main()函數(shù)按模塊劃分共執(zhí)行了2個任務(wù):第一個是系統(tǒng)軟硬件初始化,第二個是執(zhí)行輪轉(zhuǎn)查詢式操作系統(tǒng),進入死循環(huán)狀態(tài)。
(二)任務(wù)調(diào)度流程
Z_Stack的任務(wù)管理主要由OSAL層完成。在系統(tǒng)運行時,OSAL調(diào)用 osal_run_system( )函數(shù)開始執(zhí)行任務(wù)調(diào)度主循環(huán),由代碼結(jié)構(gòu)得出,在OSAL中是通過tsakEvents[idx]任務(wù)事件來判斷事件發(fā)生是的。在OSAL初始化時,tsakEvents數(shù)組被初始化為零,在輪詢機制下,一旦系統(tǒng)中產(chǎn)生任務(wù),就調(diào)用osal_set_event( )函數(shù)把tsakEvents[taskID]賦值為對應(yīng)的事件。不同的任務(wù)對應(yīng)不同的taskID, tsakEvents數(shù)組表示了系統(tǒng)中哪些任務(wù)存在沒有處理的事件,然后就會調(diào)用相應(yīng)的任務(wù)處理對應(yīng)的事件。
(三)處理任務(wù)事件
協(xié)議棧通過調(diào)用ApplicationName_ProcessEvent函數(shù)(可自定義)來處理任務(wù)事件,除了強制的事件之外,任一OSAL任務(wù)能被定義多達15個任務(wù)事件[5]。例如當(dāng)檢測到節(jié)點成功加入構(gòu)建的網(wǎng)絡(luò)以后,ZDO就會向在應(yīng)用程序框架中注冊過的任務(wù)發(fā)送一個設(shè)備狀態(tài)改變的消息,其狀態(tài)指示了當(dāng)前網(wǎng)絡(luò)的狀態(tài)。因此任務(wù)事件管理者只要根據(jù)系統(tǒng)信息處理事件(比如AF_INCOMING_MSG_CMD),就可以完成相應(yīng)的應(yīng)用功能。
二、WSN系統(tǒng)軟件設(shè)計
(一)協(xié)調(diào)器啟動及構(gòu)建網(wǎng)絡(luò)
ZigBee網(wǎng)絡(luò)的構(gòu)建是由網(wǎng)絡(luò)協(xié)調(diào)器來完成的,且每個網(wǎng)絡(luò)只有一個協(xié)調(diào)器。當(dāng)協(xié)調(diào)器節(jié)點上電啟動之后,首先完成系統(tǒng)的初始化,包括初始化系統(tǒng)時鐘、檢測芯片電壓、falsh存儲器、端口描述符等,然后進入操作系統(tǒng)。首先進入的是應(yīng)用層任務(wù)函數(shù),通過按鍵來設(shè)置其為協(xié)調(diào)器,然后將設(shè)備類型ZG_DEVICETYPE_COORDINATOR寫入至非易失性存儲器NV中,系統(tǒng)重啟。重啟之后系統(tǒng)執(zhí)行zb_StartRequest( )函數(shù)來初始化ZDO設(shè)備函數(shù)ZDOInitDevice( )。至此整個網(wǎng)絡(luò)構(gòu)建開始執(zhí)行,通過ZDO層中的網(wǎng)絡(luò)初始化函數(shù)ZDApp_NetworkInit()以及預(yù)設(shè)的網(wǎng)絡(luò)通道和ID號,調(diào)用網(wǎng)絡(luò)形成函數(shù)NLME_NetworkFormationRequest( )來構(gòu)建整個網(wǎng)絡(luò)。
(二)路由器啟動及加入網(wǎng)絡(luò)
在測試網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中,本文加入了路由器節(jié)點,路由器采用自啟動模式,在網(wǎng)絡(luò)初始化時,調(diào)用NLME_NetworkDiscoveryRequest( )函數(shù)來發(fā)現(xiàn)網(wǎng)絡(luò),然后等待協(xié)調(diào)器的響應(yīng),直至加入網(wǎng)絡(luò)成功。為了在PC上實時顯示路由器節(jié)點(即使沒有充當(dāng)路由功能),通過定時器來調(diào)用 osal_set_event( TaskID, REPORT_EVT )函數(shù),當(dāng)系統(tǒng)收到MY_REPORT_EVT事件后,將會觸發(fā)osal_start_timerEx( TaskID, REPORT_EVT, Report_MyPeriod )函數(shù),該函數(shù)將會周期性的發(fā)送路由器節(jié)點信息至協(xié)調(diào)器。
(三)終端節(jié)點加入網(wǎng)路、綁定操作和發(fā)送數(shù)據(jù)
當(dāng)打開傳感器終端節(jié)點的電源,傳感器節(jié)點便會自動搜索是否存在網(wǎng)絡(luò),若發(fā)現(xiàn)存在網(wǎng)絡(luò)的話,調(diào)用NLME_JionRequest( )函數(shù),向協(xié)調(diào)器發(fā)送加入網(wǎng)絡(luò)請求。另外終端與協(xié)調(diào)器之間需通過綁定才能完成傳輸,綁定是一種兩個應(yīng)用設(shè)備之間信息傳輸?shù)目刂茩C制。首先協(xié)調(diào)器在啟動時通過執(zhí)行zb_AllowBind( )函數(shù),開啟允許綁定功能。這里默認(rèn)設(shè)置綁定時間為無限等待,一旦終端節(jié)點發(fā)出綁定請求函數(shù)zb_BindDevice( ),協(xié)調(diào)器節(jié)點就會響應(yīng)綁定,完成綁定操作。最后通過調(diào)用osal_set_event( )函數(shù)來觸發(fā)數(shù)據(jù)發(fā)送事件,并在每次發(fā)送完以后調(diào)用osal_start_timerEx( )函數(shù)來周期性發(fā)送采集的數(shù)據(jù)。
三、實驗測試
本系統(tǒng)采用4個自行設(shè)計的CC2330開發(fā)板作為傳感器節(jié)點,組成傳感器網(wǎng)絡(luò),測試數(shù)據(jù)由片內(nèi)自帶的溫度傳感器提供。
(一)星型網(wǎng)絡(luò)
通過修改Z_Stack協(xié)議棧nwk_globals.h中的STACK_PROFILE_ID值,使其為GENERIC_STAR,在編譯環(huán)境中關(guān)閉一些宏(比如LCD_SUPPORT_ED),并編寫溫度采集程序,協(xié)調(diào)器以一定的數(shù)據(jù)格式往串口發(fā)送數(shù)據(jù)。將協(xié)調(diào)器的串口與PC連接起來,啟動ZigBee Sensor Monitor上位機軟件。開啟目標(biāo)板電源,重啟目標(biāo)板電源,開啟路由器節(jié)點電源,按下S2鍵,路由器開始向協(xié)調(diào)器發(fā)送報告。開啟終端節(jié)點電源,直至LED1開始閃爍,表面節(jié)點以加入網(wǎng)絡(luò),按下S3鍵,終端節(jié)點開始向協(xié)調(diào)器發(fā)送報告。如圖1所示是星型網(wǎng)絡(luò)組網(wǎng)通訊實驗結(jié)果。
(二)樹型網(wǎng)絡(luò)
修改Z_Stack協(xié)議棧nwk_globals.h中的STACK_PROFILE_ID值,使其為GENERIC_TREE,重新編譯下載至各個傳感器節(jié)點。依次打開協(xié)調(diào)器、路由器、終端器電源,待組網(wǎng)成功后,可以看到如圖2所示的樹型網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。通過移動終端節(jié)點,可以看到網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)發(fā)生了相應(yīng)的變化。
綜上,本文從應(yīng)用方面著手,簡明概要地介紹了ZigBee協(xié)議棧的體系結(jié)構(gòu),采用TI公司的Z_Stack協(xié)議棧,以CC2530芯片為核心構(gòu)建了一個基于Z_Stack協(xié)議棧的無線傳感器網(wǎng)絡(luò)。它可以大大減輕開發(fā)人員的而負(fù)擔(dān),加快開發(fā)進度;同時其開源免費的特點降低了成本,可用于智能家居,環(huán)境監(jiān)測等領(lǐng)域。
參考文獻:
[1] 高守瑋,吳燦陽.ZigBee技術(shù)實踐教程[M].北京:北京航空航天大學(xué)出版社,2009.
[2] 鐘永鋒,劉永俊.ZigBee無線傳感器網(wǎng)絡(luò)[M].北京:北京郵電大學(xué)出版社,2011.
[3] 瞿雷,劉盛德.ZigBee技術(shù)及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2007.