用于環(huán)境監(jiān)測的無線傳感器網(wǎng)絡(luò)節(jié)點設(shè)計
引言
本文引用地址:http://butianyuan.cn/article/154651.htm環(huán)境監(jiān)測是無線傳感器網(wǎng)絡(luò)的重要應(yīng)用領(lǐng)域。為搜集某一區(qū)域內(nèi)的環(huán)境數(shù)據(jù),傳感器節(jié)點需要在無人值守情況下長時間地工作在惡劣環(huán)境條件下。傳感器節(jié)點的軟件設(shè)計為節(jié)點正常工作提供了重要保證。
1 無線傳感器網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu)
整個傳感器網(wǎng)絡(luò)是由若干個采集節(jié)點、1個匯聚節(jié)點、1個數(shù)據(jù)中轉(zhuǎn)器以及1個便于用戶查看和控制的上位機組成。系統(tǒng)結(jié)構(gòu)如圖1所示。采集節(jié)點用于對環(huán)境數(shù)據(jù)的采集、數(shù)據(jù)的預(yù)處理,承當(dāng)數(shù)據(jù)的路由;匯聚節(jié)點負(fù)責(zé)整個網(wǎng)絡(luò)的開啟和維護,向采集節(jié)點發(fā)送命令,搜集節(jié)點的數(shù)據(jù)以及和數(shù)據(jù)中轉(zhuǎn)器之間的串口通信;數(shù)據(jù)中轉(zhuǎn)器承擔(dān)數(shù)據(jù)的中轉(zhuǎn)及轉(zhuǎn)發(fā)上位機的命令;上位機是數(shù)據(jù)搜集的終端設(shè)備,并且可以根據(jù)用戶的需要對節(jié)點的采集時間間隔、休眠時間間隔、傳感器的開關(guān)進行相應(yīng)設(shè)置。
2 節(jié)點的硬件電路
為方便數(shù)據(jù)的搜集,匯聚節(jié)點和采集節(jié)點硬件電路設(shè)計相同,只是軟件設(shè)計有所不同。任意節(jié)點都可作為匯聚節(jié)點,與數(shù)據(jù)中轉(zhuǎn)器通過串口進行通信,來搜集網(wǎng)絡(luò)中其他節(jié)點的數(shù)據(jù)。節(jié)點的硬件結(jié)構(gòu)如圖2所示。
本設(shè)計選用的核心芯片是TI公司推出的ZigBee芯片CC2430。它以8051微處理器為內(nèi)核,自身攜帶的射頻收發(fā)器用來實現(xiàn)無線傳感器網(wǎng)絡(luò)節(jié)點的通信,提供了4路I/O口來控制傳感器的打開和關(guān)閉。傳感器將相應(yīng)的環(huán)境數(shù)據(jù)變成電壓、電流等信號送給信號調(diào)理電路,經(jīng)相關(guān)調(diào)理后送到CC2430的 ADC接口進行A/D采樣,最后CC2430將得到的A/D值存人1個外接的64 Kb的存儲器中。當(dāng)節(jié)點作為網(wǎng)絡(luò)中的匯聚節(jié)點時,CC2430的 2路I/O口被設(shè)置成UART0串口Tx和Rx,用于和數(shù)據(jù)中轉(zhuǎn)器進行串口通信。對于能源供應(yīng)部分,為保證節(jié)點長期穩(wěn)定工作,選用2300 mA的鎳氫充電電池,2組鎳氫電池采用雙電源供電模式。軟件通過控制2組鎳氫電池的切換實現(xiàn)對節(jié)點的輪流供電,并在電池電壓不足時控制太陽能電池板對其進行充電。
3 節(jié)點軟件設(shè)計
3.1 Z-Stack協(xié)議棧簡介
本次的軟件設(shè)計基于TI公司Z-Stack 2006協(xié)議棧。Z-Stack 2006是TI公司專門為CC2430芯片設(shè)計的ZigBee協(xié)議棧。它由1個簡單的單線程的操作系統(tǒng)管理。該操作系統(tǒng)基于任務(wù)調(diào)度機制,任務(wù)通過API函數(shù)osalTaskAdd()按照優(yōu)先級添加到任務(wù)鏈表。任務(wù)的事件觸發(fā)實現(xiàn)任務(wù)調(diào)度。每個任務(wù)最多可定義16個事件,每個事件都對應(yīng)1個唯一的事件號。NextActiveTask()是任務(wù)事件查詢函數(shù),返回任務(wù)的事件狀態(tài)ActiveTask,根據(jù)返回的事件值來調(diào)用相應(yīng)的任務(wù)處理函數(shù)ActiveTask()進行處理。操作系統(tǒng)任務(wù)調(diào)度如圖3所示。
主函數(shù)在完成節(jié)點相關(guān)初始化之后會進入無限循環(huán)過程,該過程會一直檢測操作系統(tǒng)的任務(wù)鏈表中是否有事件要進行處理。
3.2 節(jié)點工作流程
為便于管理和調(diào)度,節(jié)點所要實現(xiàn)的功能都是將其定義為事件進行處理的。每個事件完成相應(yīng)功能。將事件按一定關(guān)系串接,就能實現(xiàn)節(jié)點工作時要完成的系統(tǒng)功能。采集節(jié)點和匯聚節(jié)點的工作流程如圖4、圖5所示。
匯聚節(jié)點和采集節(jié)點在同一時刻醒來。當(dāng)匯聚節(jié)點創(chuàng)建網(wǎng)絡(luò)成功,并且采集節(jié)點入網(wǎng)成功后,全網(wǎng)節(jié)點處于通信狀態(tài)。匯聚節(jié)點會通過串口向數(shù)據(jù)中轉(zhuǎn)器發(fā)送1個表示網(wǎng)絡(luò)準(zhǔn)備就緒的消息,數(shù)據(jù)中轉(zhuǎn)器接收到該消息之后根據(jù)上位機的要求決定要不要上傳數(shù)據(jù),以及上傳哪些數(shù)據(jù)。匯聚節(jié)點接收到命令之后會觸發(fā)相應(yīng)的事件進行處理,先命令采集節(jié)點將相應(yīng)的數(shù)據(jù)上傳給它,再通過觸發(fā)串口事件將數(shù)據(jù)發(fā)送至數(shù)據(jù)中轉(zhuǎn)器。采集節(jié)點在入網(wǎng)成功以后也處于準(zhǔn)備就緒的狀態(tài),等待接受匯聚節(jié)點的命令,做相應(yīng)的事件觸發(fā)處理。
在每次通信結(jié)束之前,匯聚節(jié)點會向數(shù)據(jù)中轉(zhuǎn)器發(fā)送1個請求休眠的消息,數(shù)據(jù)中轉(zhuǎn)器接收到該消息之后會按照上位機的要求對全網(wǎng)節(jié)點的休眠過程進行設(shè)置。
3.3 串口通信協(xié)議
匯聚節(jié)點與數(shù)據(jù)中轉(zhuǎn)器之間的通信是通過串口進行的。串口通信協(xié)議保證數(shù)據(jù)的安全收發(fā),便于匯聚節(jié)點和數(shù)據(jù)中轉(zhuǎn)器對數(shù)據(jù)進行解析和存儲管理。數(shù)據(jù)中轉(zhuǎn)器和匯聚節(jié)點之間的串口通信數(shù)據(jù)幀格式如下所示:
其中,SOP為起始標(biāo)志符,用1字節(jié)來表示數(shù)據(jù)包的起始,將這個字節(jié)定義為0x02;CMD表示命令I(lǐng)D,用1字節(jié)的數(shù)據(jù)來標(biāo)識命令消息。 LEN表示DATA的長度,用1字節(jié)來指示DATA位的數(shù)據(jù)的長度。DATA為具體要發(fā)送的數(shù)據(jù)。FCS是校驗位,這里使用XOR(異或校驗),校驗 CMD、LEN、DATA中的所有數(shù)據(jù)。
當(dāng)匯聚節(jié)點和數(shù)據(jù)中轉(zhuǎn)器通過串口接收到數(shù)據(jù)后,都是通過判別CMD對數(shù)據(jù)進行解析的。串口數(shù)據(jù)的CMD有如下幾種:
①0x03,數(shù)據(jù)中轉(zhuǎn)器發(fā)送上傳路由表命令。作為響應(yīng),匯聚節(jié)點通過串口上傳路由表數(shù)據(jù)的CMD標(biāo)識為0x83。
②0x04,數(shù)據(jù)中轉(zhuǎn)器發(fā)送上傳鄰居表命令。作為響應(yīng),匯聚節(jié)點通過串口上傳鄰居表數(shù)據(jù)的CMD標(biāo)識為0x84。
③0x05,數(shù)據(jù)中轉(zhuǎn)器發(fā)送上傳采集數(shù)據(jù)命令。作為響應(yīng),匯聚節(jié)點通過串口上傳采集數(shù)據(jù)時的CMD標(biāo)識為0x85。
④0x89,匯聚節(jié)點發(fā)送至數(shù)據(jù)中轉(zhuǎn)器,表示網(wǎng)絡(luò)創(chuàng)建成功,等待命令消息。
⑤0xF9,匯聚節(jié)點發(fā)送至數(shù)據(jù)中轉(zhuǎn)器,表示數(shù)據(jù)全部上傳完畢,等待休眠。作為響應(yīng),數(shù)據(jù)中轉(zhuǎn)器通過串口向匯聚節(jié)點發(fā)送CMD為0x09的休眠設(shè)置命令。
LEN表示數(shù)據(jù)的長度,方便數(shù)據(jù)中轉(zhuǎn)器對接收到的數(shù)據(jù)進行空間分配和存儲。FCS是校驗位,用于表征數(shù)據(jù)的準(zhǔn)確性。
評論