用于環(huán)境監測的無(wú)線(xiàn)傳感器網(wǎng)絡(luò )節點(diǎn)設計
引言
本文引用地址:http://dyxdggzs.com/article/154651.htm環(huán)境監測是無(wú)線(xiàn)傳感器網(wǎng)絡(luò )的重要應用領(lǐng)域。為搜集某一區域內的環(huán)境數據,傳感器節點(diǎn)需要在無(wú)人值守情況下長(cháng)時(shí)間地工作在惡劣環(huán)境條件下。傳感器節點(diǎn)的軟件設計為節點(diǎn)正常工作提供了重要保證。
1 無(wú)線(xiàn)傳感器網(wǎng)絡(luò )系統結構
整個(gè)傳感器網(wǎng)絡(luò )是由若干個(gè)采集節點(diǎn)、1個(gè)匯聚節點(diǎn)、1個(gè)數據中轉器以及1個(gè)便于用戶(hù)查看和控制的上位機組成。系統結構如圖1所示。采集節點(diǎn)用于對環(huán)境數據的采集、數據的預處理,承當數據的路由;匯聚節點(diǎn)負責整個(gè)網(wǎng)絡(luò )的開(kāi)啟和維護,向采集節點(diǎn)發(fā)送命令,搜集節點(diǎn)的數據以及和數據中轉器之間的串口通信;數據中轉器承擔數據的中轉及轉發(fā)上位機的命令;上位機是數據搜集的終端設備,并且可以根據用戶(hù)的需要對節點(diǎn)的采集時(shí)間間隔、休眠時(shí)間間隔、傳感器的開(kāi)關(guān)進(jìn)行相應設置。

2 節點(diǎn)的硬件電路
為方便數據的搜集,匯聚節點(diǎn)和采集節點(diǎn)硬件電路設計相同,只是軟件設計有所不同。任意節點(diǎn)都可作為匯聚節點(diǎn),與數據中轉器通過(guò)串口進(jìn)行通信,來(lái)搜集網(wǎng)絡(luò )中其他節點(diǎn)的數據。節點(diǎn)的硬件結構如圖2所示。

本設計選用的核心芯片是TI公司推出的ZigBee芯片CC2430。它以8051微處理器為內核,自身攜帶的射頻收發(fā)器用來(lái)實(shí)現無(wú)線(xiàn)傳感器網(wǎng)絡(luò )節點(diǎn)的通信,提供了4路I/O口來(lái)控制傳感器的打開(kāi)和關(guān)閉。傳感器將相應的環(huán)境數據變成電壓、電流等信號送給信號調理電路,經(jīng)相關(guān)調理后送到CC2430的 ADC接口進(jìn)行A/D采樣,最后CC2430將得到的A/D值存人1個(gè)外接的64 Kb的存儲器中。當節點(diǎn)作為網(wǎng)絡(luò )中的匯聚節點(diǎn)時(shí),CC2430的 2路I/O口被設置成UART0串口Tx和Rx,用于和數據中轉器進(jìn)行串口通信。對于能源供應部分,為保證節點(diǎn)長(cháng)期穩定工作,選用2300 mA的鎳氫充電電池,2組鎳氫電池采用雙電源供電模式。軟件通過(guò)控制2組鎳氫電池的切換實(shí)現對節點(diǎn)的輪流供電,并在電池電壓不足時(shí)控制太陽(yáng)能電池板對其進(jìn)行充電。
3 節點(diǎn)軟件設計
3.1 Z-Stack協(xié)議棧簡(jiǎn)介
本次的軟件設計基于TI公司Z-Stack 2006協(xié)議棧。Z-Stack 2006是TI公司專(zhuān)門(mén)為CC2430芯片設計的ZigBee協(xié)議棧。它由1個(gè)簡(jiǎn)單的單線(xiàn)程的操作系統管理。該操作系統基于任務(wù)調度機制,任務(wù)通過(guò)API函數osalTaskAdd()按照優(yōu)先級添加到任務(wù)鏈表。任務(wù)的事件觸發(fā)實(shí)現任務(wù)調度。每個(gè)任務(wù)最多可定義16個(gè)事件,每個(gè)事件都對應1個(gè)唯一的事件號。NextActiveTask()是任務(wù)事件查詢(xún)函數,返回任務(wù)的事件狀態(tài)ActiveTask,根據返回的事件值來(lái)調用相應的任務(wù)處理函數ActiveTask()進(jìn)行處理。操作系統任務(wù)調度如圖3所示。

主函數在完成節點(diǎn)相關(guān)初始化之后會(huì )進(jìn)入無(wú)限循環(huán)過(guò)程,該過(guò)程會(huì )一直檢測操作系統的任務(wù)鏈表中是否有事件要進(jìn)行處理。
3.2 節點(diǎn)工作流程
為便于管理和調度,節點(diǎn)所要實(shí)現的功能都是將其定義為事件進(jìn)行處理的。每個(gè)事件完成相應功能。將事件按一定關(guān)系串接,就能實(shí)現節點(diǎn)工作時(shí)要完成的系統功能。采集節點(diǎn)和匯聚節點(diǎn)的工作流程如圖4、圖5所示。

匯聚節點(diǎn)和采集節點(diǎn)在同一時(shí)刻醒來(lái)。當匯聚節點(diǎn)創(chuàng )建網(wǎng)絡(luò )成功,并且采集節點(diǎn)入網(wǎng)成功后,全網(wǎng)節點(diǎn)處于通信狀態(tài)。匯聚節點(diǎn)會(huì )通過(guò)串口向數據中轉器發(fā)送1個(gè)表示網(wǎng)絡(luò )準備就緒的消息,數據中轉器接收到該消息之后根據上位機的要求決定要不要上傳數據,以及上傳哪些數據。匯聚節點(diǎn)接收到命令之后會(huì )觸發(fā)相應的事件進(jìn)行處理,先命令采集節點(diǎn)將相應的數據上傳給它,再通過(guò)觸發(fā)串口事件將數據發(fā)送至數據中轉器。采集節點(diǎn)在入網(wǎng)成功以后也處于準備就緒的狀態(tài),等待接受匯聚節點(diǎn)的命令,做相應的事件觸發(fā)處理。
在每次通信結束之前,匯聚節點(diǎn)會(huì )向數據中轉器發(fā)送1個(gè)請求休眠的消息,數據中轉器接收到該消息之后會(huì )按照上位機的要求對全網(wǎng)節點(diǎn)的休眠過(guò)程進(jìn)行設置。
3.3 串口通信協(xié)議
匯聚節點(diǎn)與數據中轉器之間的通信是通過(guò)串口進(jìn)行的。串口通信協(xié)議保證數據的安全收發(fā),便于匯聚節點(diǎn)和數據中轉器對數據進(jìn)行解析和存儲管理。數據中轉器和匯聚節點(diǎn)之間的串口通信數據幀格式如下所示:

其中,SOP為起始標志符,用1字節來(lái)表示數據包的起始,將這個(gè)字節定義為0x02;CMD表示命令I(lǐng)D,用1字節的數據來(lái)標識命令消息。 LEN表示DATA的長(cháng)度,用1字節來(lái)指示DATA位的數據的長(cháng)度。DATA為具體要發(fā)送的數據。FCS是校驗位,這里使用XOR(異或校驗),校驗 CMD、LEN、DATA中的所有數據。
當匯聚節點(diǎn)和數據中轉器通過(guò)串口接收到數據后,都是通過(guò)判別CMD對數據進(jìn)行解析的。串口數據的CMD有如下幾種:
①0x03,數據中轉器發(fā)送上傳路由表命令。作為響應,匯聚節點(diǎn)通過(guò)串口上傳路由表數據的CMD標識為0x83。
②0x04,數據中轉器發(fā)送上傳鄰居表命令。作為響應,匯聚節點(diǎn)通過(guò)串口上傳鄰居表數據的CMD標識為0x84。
③0x05,數據中轉器發(fā)送上傳采集數據命令。作為響應,匯聚節點(diǎn)通過(guò)串口上傳采集數據時(shí)的CMD標識為0x85。
④0x89,匯聚節點(diǎn)發(fā)送至數據中轉器,表示網(wǎng)絡(luò )創(chuàng )建成功,等待命令消息。
⑤0xF9,匯聚節點(diǎn)發(fā)送至數據中轉器,表示數據全部上傳完畢,等待休眠。作為響應,數據中轉器通過(guò)串口向匯聚節點(diǎn)發(fā)送CMD為0x09的休眠設置命令。
LEN表示數據的長(cháng)度,方便數據中轉器對接收到的數據進(jìn)行空間分配和存儲。FCS是校驗位,用于表征數據的準確性。
評論