無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的設(shè)計(jì)與實(shí)現(xiàn)
作者:西安培華學(xué)院 陜西西安 王心妍
發(fā)布時(shí)間:2012-10-29 11:33:53 來源:陜西教育報(bào)刊社
[摘 要]文章設(shè)計(jì)并實(shí)現(xiàn)了一種基于嵌入式Linux的無線傳感器網(wǎng)絡(luò)匯聚節(jié)點(diǎn),該節(jié)點(diǎn)以ARM9處理器S3C2440作為主控芯片,基于L inux平臺(tái)開發(fā)遠(yuǎn)程監(jiān)控體系。經(jīng)測(cè)試,可以實(shí)現(xiàn)無線傳感器網(wǎng)絡(luò)數(shù)據(jù)接收的功能,并能夠?qū)⑻幚砗玫臄?shù)據(jù)以動(dòng)態(tài)網(wǎng)頁的形式提供給用戶訪問。
[關(guān)鍵詞] 無線傳感器網(wǎng)絡(luò) 傳感器節(jié)點(diǎn) 嵌入式系統(tǒng) Boa Web服務(wù)器
無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)
無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)一般由4個(gè)部分組成:傳感器模塊、處理模塊、無線收發(fā)模塊和能量供應(yīng)模塊[1]。傳感器模塊負(fù)責(zé)信息采集和數(shù)據(jù)轉(zhuǎn)換;處理模塊控制整個(gè)傳感器節(jié)點(diǎn)的操作,處理本身采集的數(shù)據(jù)和其他節(jié)點(diǎn)發(fā)來的數(shù)據(jù)點(diǎn)提供運(yùn)行所需的能量,運(yùn)行高層網(wǎng)絡(luò)協(xié)議;無線通信模塊負(fù)責(zé)與其他傳感器節(jié)點(diǎn)進(jìn)行通信;能量供應(yīng)模塊為傳感器節(jié)點(diǎn)微型蓄電池。
硬件設(shè)計(jì)
本文所設(shè)計(jì)的匯聚節(jié)點(diǎn)的硬件結(jié)構(gòu)設(shè)計(jì)中,核心單元為處理器單元和射頻單元。處理器采用Samsung公司的ARM9處理器S3C2440,實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)的控制。射頻單元采用CC2430射頻芯片實(shí)現(xiàn)無線傳感器網(wǎng)絡(luò)的創(chuàng)建管理與數(shù)據(jù)收集的功能。系統(tǒng)的存儲(chǔ)采用SDRAM和FLASH來實(shí)現(xiàn),Internet網(wǎng)絡(luò)接入芯片采用DM9000網(wǎng)卡,電源模塊與復(fù)位模塊用來實(shí)現(xiàn)整個(gè)系統(tǒng)的供能和復(fù)位。為了實(shí)現(xiàn)系統(tǒng)的監(jiān)測(cè)與調(diào)試,又加入了串口模塊和JTAG模塊。
軟件設(shè)計(jì)
1.嵌入式Linux系統(tǒng)移植
建立一個(gè)與系統(tǒng)硬件密切相關(guān)的嵌入式系統(tǒng)軟件平臺(tái)不僅可以屏蔽系統(tǒng)的硬件特性,而且更是無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的遠(yuǎn)程監(jiān)控軟件實(shí)現(xiàn)的基礎(chǔ)[2]。
對(duì)于系統(tǒng)移植而言,Linux實(shí)際上是由內(nèi)核部分和系統(tǒng)部分構(gòu)成。其內(nèi)核初始化和控制絕大部分硬件設(shè)備,為內(nèi)存管理、進(jìn)程管理、設(shè)備讀寫等做好一切準(zhǔn)備工作;其系統(tǒng)加載必需的設(shè)備,配置各種環(huán)境以便用戶可以使用整個(gè)系統(tǒng)。
2.遠(yuǎn)程監(jiān)控軟件系統(tǒng)
無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控主要通過CC2430射頻芯片接收各個(gè)節(jié)點(diǎn)采集到的數(shù)據(jù),并將接收到的數(shù)據(jù)作初步處理,再通過虛擬總線發(fā)送給S3C2440,S3C2440芯片將接收到的數(shù)據(jù)包解包后送到數(shù)據(jù)存儲(chǔ)區(qū)。需要在Linux系統(tǒng)中移植一個(gè)Boa web服務(wù)器,使用CGI編程技術(shù)和AJAX技術(shù)實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁,用戶終端就可以通過瀏覽器訪問到實(shí)時(shí)數(shù)據(jù)。
(1)ARM系統(tǒng)對(duì)CC2430監(jiān)控程序
ARM-Linux軟件系統(tǒng)對(duì)CC2430監(jiān)控過程如下:程序運(yùn)行之后,首先調(diào)用CC2430設(shè)備驅(qū)動(dòng)中的cc2430_apace_ropen函數(shù),實(shí)現(xiàn)對(duì)CC2430設(shè)備的打開。然后打開數(shù)據(jù)存儲(chǔ)區(qū),存儲(chǔ)來自無線傳感器網(wǎng)絡(luò)中的數(shù)據(jù)。接著,系統(tǒng)進(jìn)入循環(huán)狀態(tài)。通過調(diào)用select函數(shù)來監(jiān)測(cè)CC2430設(shè)備,如果此時(shí)沒有數(shù)據(jù)到達(dá),則重新監(jiān)測(cè),一直等到有數(shù)據(jù)發(fā)送過來,則使用read函數(shù)讀取數(shù)據(jù)包,并按照協(xié)議解析數(shù)據(jù)包,將數(shù)據(jù)送到數(shù)據(jù)存儲(chǔ)區(qū)。此時(shí)為避免對(duì)數(shù)據(jù)存儲(chǔ)區(qū)的同時(shí)讀寫,先使用鎖定函數(shù)鎖定數(shù)據(jù)存儲(chǔ)區(qū),然后將數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)區(qū),之后再解鎖數(shù)據(jù)存儲(chǔ)區(qū),方便Internet客戶端訪問,至此則完成了一個(gè)數(shù)據(jù)包的接收。程序進(jìn)入循環(huán)狀態(tài),重新監(jiān)測(cè)CC2430設(shè)備,等待下個(gè)數(shù)據(jù)包的到來。
(2)建立Linux Boa服務(wù)器
Boa web服務(wù)器的工作流程:Boa從新到達(dá)的套接字獲得HTTP請(qǐng)求(由一個(gè)request結(jié)構(gòu)來存儲(chǔ)),使用get_request( )將所有數(shù)據(jù)保存在request→header_line中,之后調(diào)用process_request( )來處理在隊(duì)列中的每一個(gè)請(qǐng)求。根據(jù)request結(jié)構(gòu)中status所表示的不同狀態(tài),將進(jìn)行不同的處理。如果這個(gè)請(qǐng)求符合HTTP協(xié)議,則會(huì)調(diào)用process_option_line( )將一些頭部信息填寫到request結(jié)構(gòu)中完成這些環(huán)境變量的設(shè)置,隨后process_header_end( )會(huì)對(duì)用戶進(jìn)行驗(yàn)證。如果驗(yàn)證通過,則判斷request結(jié)構(gòu)中的is_cgi,非0則是CGI程序,調(diào)用init_cgi( )函數(shù)進(jìn)行處理,為0則是靜態(tài)頁面,調(diào)用init_get( )函數(shù)進(jìn)行處理。
(3)基于AJAX的實(shí)時(shí)監(jiān)控動(dòng)態(tài)網(wǎng)頁
本設(shè)計(jì)采用基于AJAX技術(shù)(asynchronousJavaScriptand XML)與CGI技術(shù)實(shí)現(xiàn)無線傳感器網(wǎng)絡(luò)的實(shí)時(shí)監(jiān)控動(dòng)態(tài)網(wǎng)頁。
AJAX是Web應(yīng)用中JavaScript和XML相結(jié)合的一種異步交互式網(wǎng)頁開發(fā)技術(shù),可以實(shí)現(xiàn)網(wǎng)頁無刷新動(dòng)態(tài)更新的效果。它提供了到HTTP協(xié)議的所有細(xì)節(jié)的完整存取,包括頭部和數(shù)據(jù)的任何定制格式。
通用網(wǎng)關(guān)接口CGI(Common Gateway Interface)是外部擴(kuò)展應(yīng)用程序與web服務(wù)器進(jìn)行數(shù)據(jù)交流的一種接口,Web服務(wù)器控制調(diào)用CGI程序可以實(shí)現(xiàn)外部應(yīng)用程序的執(zhí)行,CGI程序就是按照標(biāo)準(zhǔn)接口編程實(shí)現(xiàn)的運(yùn)行于Web服務(wù)器上的一種程序。在無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的軟件系統(tǒng)中,CGI程序主要的功能是向客戶端返回?zé)o線傳感器網(wǎng)絡(luò)中的實(shí)時(shí)數(shù)據(jù)。
要實(shí)現(xiàn)對(duì)無線傳感網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)據(jù)的實(shí)時(shí)監(jiān)控,首先需要通過表單向AJAX引擎發(fā)送請(qǐng)求,然后AJAX引擎會(huì)不斷地向web服務(wù)器發(fā)送請(qǐng)求,要求調(diào)用服務(wù)器中的CGI程序以獲取網(wǎng)絡(luò)實(shí)時(shí)數(shù)據(jù),無刷新實(shí)時(shí)監(jiān)控網(wǎng)頁中的數(shù)據(jù)。
系統(tǒng)測(cè)試
測(cè)試實(shí)驗(yàn)中,選用8個(gè)CC2430、組建的匯聚節(jié)點(diǎn)和一臺(tái)PC機(jī)。將匯聚節(jié)點(diǎn)和PC機(jī)接入Internet,PC機(jī)作為客戶端,CC2430作為通用節(jié)點(diǎn)與匯聚節(jié)點(diǎn)構(gòu)成一個(gè)星型拓?fù)浣Y(jié)構(gòu)的無線傳感器網(wǎng)絡(luò),設(shè)置匯聚節(jié)點(diǎn)的IP為192.168.1.230。預(yù)先設(shè)定好數(shù)據(jù),通用節(jié)點(diǎn)定時(shí)向匯聚節(jié)點(diǎn)發(fā)送數(shù)據(jù)包,匯聚節(jié)點(diǎn)接收到數(shù)據(jù)包后解包處理,等待PC機(jī)通過Internet訪問。在客戶端PC機(jī)上打開支持JavaScript的瀏覽器,單擊動(dòng)態(tài)監(jiān)控首頁上的send按鈕發(fā)送請(qǐng)求,屏幕上就會(huì)實(shí)時(shí)地顯示由8個(gè)通用無線節(jié)點(diǎn)所發(fā)送的數(shù)據(jù)包經(jīng)過解包后的結(jié)果。
結(jié)束語
結(jié)果表明,所設(shè)計(jì)的匯聚節(jié)點(diǎn)能夠通過Internet對(duì)遠(yuǎn)程的節(jié)點(diǎn)采集的數(shù)據(jù)進(jìn)行實(shí)時(shí)動(dòng)態(tài)監(jiān)測(cè)。下一步,計(jì)劃將所設(shè)計(jì)的節(jié)點(diǎn)與具體的實(shí)際應(yīng)用相結(jié)合,擴(kuò)展其應(yīng)用范圍。
參考文獻(xiàn):
[1]孫利民,李建中.無線傳感器網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社,2005:51—55.
[2]鄭靈翔.嵌入式Linux系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2008:61—70.



