面向環(huán)境監(jiān)測的無線傳感器網(wǎng)絡節(jié)點的軟件設計
3.2節(jié)點工作流程
為便于管理和調度,節(jié)點所要實現(xiàn)的功能都是將其定義為事件進行處理的。每個事件完成相應功能。將事件按一定關系串接,就能實現(xiàn)節(jié)點工作時要完成的系統(tǒng)功能。采集節(jié)點和匯聚節(jié)點的工作流程如圖4、圖5所示。
匯聚節(jié)點和采集節(jié)點在同一時刻醒來。當匯聚節(jié)點創(chuàng)建網(wǎng)絡成功,并且采集節(jié)點入網(wǎng)成功后,全網(wǎng)節(jié)點處于通信狀態(tài)。匯聚節(jié)點會通過串口向數(shù)據(jù)中轉器發(fā)送1個表示網(wǎng)絡準備就緒的消息,數(shù)據(jù)中轉器接收到該消息之后根據(jù)上位機的要求決定要不要上傳數(shù)據(jù),以及上傳哪些數(shù)據(jù)。匯聚節(jié)點接收到命令之后會觸發(fā)相應的事件進行處理,先命令采集節(jié)點將相應的數(shù)據(jù)上傳給它,再通過觸發(fā)串口事件將數(shù)據(jù)發(fā)送至數(shù)據(jù)中轉器。采集節(jié)點在入網(wǎng)成功以后也處于準備就緒的狀態(tài),等待接受匯聚節(jié)點的命令,做相應的事件觸發(fā)處理。
在每次通信結束之前,匯聚節(jié)點會向數(shù)據(jù)中轉器發(fā)送1個請求休眠的消息,數(shù)據(jù)中轉器接收到該消息之后會按照上位機的要求對全網(wǎng)節(jié)點的休眠過程進行設置。
3.3 串口通信協(xié)議
匯聚節(jié)點與數(shù)據(jù)中轉器之間的通信是通過串口進行的。串口通信協(xié)議保證數(shù)據(jù)的安全收發(fā),便于匯聚節(jié)點和數(shù)據(jù)中轉器對數(shù)據(jù)進行解析和存儲管理。數(shù)據(jù)中轉器和匯聚節(jié)點之間的串口通信數(shù)據(jù)幀格式如下所示:
其中,SOP為起始標志符,用1字節(jié)來表示數(shù)據(jù)包的起始,將這個字節(jié)定義為0x02;CMD表示命令ID,用1字節(jié)的數(shù)據(jù)來標識命令消息。LEN表示DATA的長度,用1字節(jié)來指示DATA位的數(shù)據(jù)的長度。DATA為具體要發(fā)送的數(shù)據(jù)。FCS是校驗位,這里使用XOR(異或校驗),校驗CMD、LEN、DATA中的所有數(shù)據(jù)。
當匯聚節(jié)點和數(shù)據(jù)中轉器通過串口接收到數(shù)據(jù)后,都是通過判別CMD對數(shù)據(jù)進行解析的。串口數(shù)據(jù)的CMD有如下幾種:
①0x03,數(shù)據(jù)中轉器發(fā)送上傳路由表命令。作為響應,匯聚節(jié)點通過串口上傳路由表數(shù)據(jù)的CMD標識為0x83。
②0x04,數(shù)據(jù)中轉器發(fā)送上傳鄰居表命令。作為響應,匯聚節(jié)點通過串口上傳鄰居表數(shù)據(jù)的CMD標識為0x84。
③0x05,數(shù)據(jù)中轉器發(fā)送上傳采集數(shù)據(jù)命令。作為響應,匯聚節(jié)點通過串口上傳采集數(shù)據(jù)時的CMD標識為0x85。
④0x89,匯聚節(jié)點發(fā)送至數(shù)據(jù)中轉器,表示網(wǎng)絡創(chuàng)建成功,等待命令消息。
⑤0xF9,匯聚節(jié)點發(fā)送至數(shù)據(jù)中轉器,表示數(shù)據(jù)全部上傳完畢,等待休眠。作為響應,數(shù)據(jù)中轉器通過串口向匯聚節(jié)點發(fā)送CMD為0x09的休眠設置命令。
LEN表示數(shù)據(jù)的長度,方便數(shù)據(jù)中轉器對接收到的數(shù)據(jù)進行空間分配和存儲。FCS是校驗位,用于表征數(shù)據(jù)的準確性。
當匯聚節(jié)點接收到串口數(shù)據(jù)時,匯聚節(jié)點會觸發(fā)自身應用層的串口事件,用于解析發(fā)送過來的命令消息,然后根據(jù)該命令來觸發(fā)相應的事件進行處理。
3.4 休眠設置
實驗證實,節(jié)點在休眠過程中處于斷網(wǎng)狀態(tài)。因此,為節(jié)省節(jié)點頻繁聯(lián)網(wǎng)帶來的功耗和保證全網(wǎng)節(jié)點工作狀態(tài)同步,在軟件上設計為節(jié)點在聯(lián)網(wǎng)成功后只執(zhí)行通信任務,而休眠過程中只執(zhí)行采集任務。當節(jié)點采集時刻到來,觸發(fā)采集事件,打開傳感器的開關對環(huán)境數(shù)據(jù)進行采集,并控制I/O口對傳感器采集得到的信號進行A/D采樣,最后將采樣值以SPI方式存入外部存儲器。在每次通信結束之前節(jié)點都會判斷是否有休眠設置命令,若接收到休眠設置命令,節(jié)點則會按照該設置進行休眠,直到下一次醒來;若沒接收到命令,節(jié)點則會按照上一次的休眠設置進行休眠。
評論