劉榮 周杰 杜景林
摘要:設(shè)計(jì)了一種基于無(wú)線傳感器網(wǎng)絡(luò)的農(nóng)田監(jiān)測(cè)系統(tǒng)的網(wǎng)關(guān),通過(guò)在以PXA270為內(nèi)核的嵌入式硬件平臺(tái)上采用Linux操作系統(tǒng)作為應(yīng)用程序的運(yùn)行環(huán)境,實(shí)現(xiàn)了農(nóng)田信息的采集、傳輸和處理功能。并且通過(guò)在嵌入式網(wǎng)關(guān)之間搭建Ad Hoc網(wǎng)絡(luò),實(shí)現(xiàn)了農(nóng)田監(jiān)測(cè)信息在網(wǎng)關(guān)之間的多跳傳輸功能,從而為農(nóng)田的遠(yuǎn)程監(jiān)控提供了一種可靠的解決方案。
關(guān)鍵詞:網(wǎng)關(guān);無(wú)線傳感網(wǎng);嵌入式;監(jiān)測(cè)
中圖分類(lèi)號(hào):TP393;S126 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):0439-8114(2013)07-1672-04
無(wú)線傳感器網(wǎng)絡(luò)是繼計(jì)算機(jī)和互聯(lián)網(wǎng)之后世界信息產(chǎn)業(yè)的第三次浪潮,已成為新一輪全球經(jīng)濟(jì)和科技發(fā)展的戰(zhàn)略焦點(diǎn)。隨著研究的不斷深入,無(wú)線傳感器網(wǎng)絡(luò)會(huì)逐漸融入人們的日常生活和社會(huì)生活活動(dòng)的各個(gè)領(lǐng)域。所以把無(wú)線傳感器網(wǎng)絡(luò)技術(shù)應(yīng)用到農(nóng)田監(jiān)測(cè)方面對(duì)農(nóng)業(yè)事業(yè)的現(xiàn)代化發(fā)展具有重大的推進(jìn)作用。
而對(duì)嵌入式網(wǎng)關(guān)的開(kāi)發(fā)是構(gòu)建整個(gè)農(nóng)田監(jiān)測(cè)系統(tǒng)至關(guān)重要的一步,直接影響了監(jiān)測(cè)系統(tǒng)的性能。網(wǎng)關(guān)類(lèi)似于一種轉(zhuǎn)換器,具有效率高、響應(yīng)實(shí)時(shí)、可靠性高、功耗低、抗干擾能力強(qiáng)等特點(diǎn), 同時(shí)具有很好的通用性。對(duì)于農(nóng)田監(jiān)測(cè)系統(tǒng)來(lái)講, 它是連接無(wú)線傳感器網(wǎng)絡(luò)與互聯(lián)網(wǎng)的橋梁。而目前的IP網(wǎng)關(guān)協(xié)議雖然具有壽命長(zhǎng)、穩(wěn)定性好、可擴(kuò)展性強(qiáng)等優(yōu)點(diǎn), 但已經(jīng)不能滿(mǎn)足集成電路芯片小型化、低功耗、低速率、高帶寬利用率的傳輸要求。因此,盡快開(kāi)發(fā)一種低功耗、能夠滿(mǎn)足探測(cè)系統(tǒng)要求、適合農(nóng)田監(jiān)測(cè)的網(wǎng)關(guān)是目前亟待解決的問(wèn)題[1,2]。
1 農(nóng)田監(jiān)測(cè)系統(tǒng)結(jié)構(gòu)
基于無(wú)線傳感器網(wǎng)絡(luò)的農(nóng)田監(jiān)測(cè)系統(tǒng)主要由無(wú)線傳感器網(wǎng)絡(luò)、網(wǎng)關(guān)和信息展示平臺(tái)組成。無(wú)線傳感器網(wǎng)絡(luò)是由各種能夠采集農(nóng)田監(jiān)測(cè)要素的傳感器節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)協(xié)議(例如Zigbee和Tinyos)而形成的一個(gè)或者多個(gè)無(wú)線網(wǎng)絡(luò)。信息展示平臺(tái)是一種可以向用戶(hù)直接提供監(jiān)測(cè)區(qū)域數(shù)據(jù)的應(yīng)用系統(tǒng)。而網(wǎng)關(guān)在信息展示平臺(tái)和無(wú)線傳感器網(wǎng)絡(luò)之間則扮演著橋梁的角色,使多種異構(gòu)的無(wú)線傳感器網(wǎng)絡(luò)能夠直接與信息展示平臺(tái)進(jìn)行交互。各個(gè)監(jiān)測(cè)區(qū)域都會(huì)擁有一個(gè)與外部設(shè)備通信的匯聚節(jié)點(diǎn),無(wú)論無(wú)線傳感器網(wǎng)絡(luò)采用星型的或者網(wǎng)狀的拓?fù)浣Y(jié)構(gòu),匯聚節(jié)點(diǎn)都會(huì)匯聚整個(gè)監(jiān)測(cè)區(qū)域的數(shù)據(jù),通過(guò)串口傳遞給相應(yīng)的網(wǎng)關(guān),并且各個(gè)網(wǎng)關(guān)通過(guò)Ad Hoc網(wǎng)絡(luò)互相連接。網(wǎng)關(guān)通過(guò)3G網(wǎng)絡(luò)與農(nóng)田觀測(cè)中心的信息展示平臺(tái)直接通信,在網(wǎng)絡(luò)基礎(chǔ)設(shè)施條件允許的情況下,也可以通過(guò)以太網(wǎng)或者WIFI連接觀測(cè)中心。觀測(cè)中心得到相應(yīng)的農(nóng)田監(jiān)測(cè)數(shù)據(jù)后以Web的方式展示,這樣用戶(hù)就可以順利地通過(guò)PC、手機(jī)或者其他手持移動(dòng)設(shè)備瀏覽監(jiān)測(cè)區(qū)域的信息。圖1為農(nóng)田監(jiān)測(cè)系統(tǒng)的總體結(jié)構(gòu)圖[3-5]。
2 網(wǎng)關(guān)的硬件設(shè)計(jì)
網(wǎng)關(guān)系統(tǒng)的硬件模塊如圖2。主要由處理器、存儲(chǔ)器、無(wú)線射頻收發(fā)模塊、無(wú)線網(wǎng)卡模塊、電源模塊、JTAG模塊、串口模塊、USB模塊、以太網(wǎng)接口模塊組成。
ARM處理器采用PXA270 CPU,該CPU是Intel開(kāi)發(fā)的高度集成的片上系統(tǒng)微處理器,結(jié)合了Intel XScale技術(shù),具有動(dòng)態(tài)電壓調(diào)整、動(dòng)態(tài)頻率調(diào)整以及成熟的電源管理特點(diǎn)。具體型號(hào)采用FW(NH)PXA270C5C520, 主頻為520 MHz。
存儲(chǔ)器模塊主要由FLASH存儲(chǔ)器和內(nèi)存模塊組成。FLASH采用三星公司的K9F1208UDM NAND FASH,內(nèi)存SDRAM部分采用Hynix Semiconductor公司的HY57V561620芯片。
以太網(wǎng)接口模塊采用SMSC公司的10 M/100 M的以太網(wǎng)芯片LAN91C111/LAN91C113,主要負(fù)責(zé)目標(biāo)機(jī)從宿主機(jī)下載應(yīng)用程序。串口模塊用于連接射頻收發(fā)模塊。JTAG模塊主要用于用戶(hù)進(jìn)行JTAG 調(diào)試。USB模塊用來(lái)連接USB設(shè)備以及下載Linux內(nèi)核等功能。
無(wú)線網(wǎng)關(guān)模塊采用的是型號(hào)為gspi8686的WIFI無(wú)線網(wǎng)卡,主要負(fù)責(zé)在網(wǎng)關(guān)板之間建立Ad Hoc網(wǎng)絡(luò),使傳感器采集的數(shù)據(jù)能夠通過(guò)多跳的方式傳遞給遠(yuǎn)距離的服務(wù)器。
射頻無(wú)線模塊采用了TI公司的CC2430核心板,該核心板主要由一片集成了8051單片機(jī)和射頻模塊的CC2430芯片和天線組成。CC2430內(nèi)含的8051單片機(jī)具有高性能、低功耗的特性,同時(shí)具有128 kB可編程Flash和8 kB的RAM, 并集成了符合IEEE802.15.4標(biāo)準(zhǔn)的2.4 GHz RF無(wú)線電收發(fā)機(jī),具有優(yōu)良的無(wú)線接收靈敏度和強(qiáng)大的抗干擾能力。
3 網(wǎng)關(guān)的操作系統(tǒng)平臺(tái)設(shè)計(jì)
Linux操作系統(tǒng)開(kāi)放源代碼,可以剪裁內(nèi)核,并且已經(jīng)在Motorola、NEC、ARM等多種硬件平臺(tái)上穩(wěn)定、高效運(yùn)行,具有強(qiáng)大的網(wǎng)絡(luò)和卓越的文件系統(tǒng)支持功能等優(yōu)點(diǎn)。所以系統(tǒng)選擇Linux操作系統(tǒng),并根據(jù)具體應(yīng)用進(jìn)行裁剪和交叉編譯,然后形成ARM可執(zhí)行文件,借助串口和網(wǎng)絡(luò)口下載到FLASH之中。構(gòu)建適合網(wǎng)關(guān)的Linux操作系統(tǒng)必須進(jìn)行Bootloader的移植、內(nèi)核裁剪以及文件系統(tǒng)的制作。只有在操作系統(tǒng)平臺(tái)建立之后,應(yīng)用程序才能在此操作平臺(tái)上運(yùn)行來(lái)實(shí)現(xiàn)整個(gè)網(wǎng)關(guān)的主要工作。應(yīng)用程序是在安裝Linux操作系統(tǒng)發(fā)行版的虛擬機(jī)上進(jìn)行開(kāi)發(fā)的,通過(guò)交叉編譯器對(duì)應(yīng)用程序的編譯生成適合在目標(biāo)機(jī)上運(yùn)行的程序。最終通過(guò)NFS服務(wù)進(jìn)行應(yīng)用程序的下載。
Bootloader是系統(tǒng)啟動(dòng)過(guò)程中執(zhí)行的第一個(gè)軟件,它與網(wǎng)關(guān)板有著高度的依存關(guān)系。Bootloader在完成底層硬件初始化工作后會(huì)直接跳到與硬件架構(gòu)無(wú)關(guān)的start_kernel()函數(shù)執(zhí)行,此函數(shù)會(huì)初始化高層內(nèi)核功能、安裝根文件系統(tǒng),以及啟動(dòng)init進(jìn)程。
內(nèi)核是操作系統(tǒng)的中心組件。使用內(nèi)核的目的是希望以一致的方式管理硬件,以及為用戶(hù)軟件提供高層抽象層。正如其他的類(lèi)Unix內(nèi)核那樣,Linux會(huì)驅(qū)動(dòng)設(shè)備、管理I/O的存取、調(diào)度進(jìn)程、共享存儲(chǔ)空間、管理信號(hào)的配送以及處理其他的管理工作。
文件系統(tǒng)是指在物理設(shè)備上的任何文件組織和目錄,它構(gòu)成了Linux系統(tǒng)上所有數(shù)據(jù)的基礎(chǔ)。該網(wǎng)關(guān)選用JFFS2作為文件系統(tǒng)。
在Linux中設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)和使用一般有兩種方式可供選擇。一種是把設(shè)備驅(qū)動(dòng)程序在編譯內(nèi)核時(shí)直接編譯進(jìn)去,另一種是以模塊的方式動(dòng)態(tài)地插進(jìn)內(nèi)核。設(shè)計(jì)選用的是第二種方式。
4 數(shù)據(jù)的傳輸設(shè)計(jì)與實(shí)現(xiàn)
網(wǎng)關(guān)針對(duì)具體的應(yīng)用場(chǎng)合和用戶(hù),所以采用了C/S結(jié)構(gòu)來(lái)對(duì)應(yīng)用程序進(jìn)行設(shè)計(jì)和開(kāi)發(fā)。當(dāng)服務(wù)器與客戶(hù)端建立好通信之后,首先由服務(wù)器向客戶(hù)端發(fā)送服務(wù)請(qǐng)求,客戶(hù)端接到請(qǐng)求命令立即向服務(wù)器返回請(qǐng)求響應(yīng)包,一旦服務(wù)器接收到響應(yīng)包并解析出正確的內(nèi)容就會(huì)向客戶(hù)端發(fā)送數(shù)據(jù)查詢(xún)的命令,客戶(hù)端接收到數(shù)據(jù)查詢(xún)命令之后對(duì)命令包進(jìn)行解析,根據(jù)數(shù)據(jù)包的解析內(nèi)容分析是實(shí)時(shí)數(shù)據(jù)查詢(xún)還是歷史數(shù)據(jù)查詢(xún)。如果是歷史數(shù)據(jù)查詢(xún),那么客戶(hù)端會(huì)直接提取數(shù)據(jù)庫(kù)中的采集信息并發(fā)送給服務(wù)器,如果是實(shí)時(shí)數(shù)據(jù)查詢(xún),那么客戶(hù)端就會(huì)實(shí)時(shí)地接收無(wú)線傳感網(wǎng)中協(xié)調(diào)器的數(shù)據(jù)并把接收到的數(shù)據(jù)發(fā)送給服務(wù)器。整個(gè)工作流程如圖3。
4.1 數(shù)據(jù)接收程序的設(shè)計(jì)
數(shù)據(jù)庫(kù)采用了程序方式直接驅(qū)動(dòng)的SQLite數(shù)據(jù)庫(kù)。SQLite是一款輕型數(shù)據(jù)庫(kù),設(shè)計(jì)目標(biāo)主要針對(duì)嵌入式系統(tǒng)。其占用資源少,一般只需要幾百kB內(nèi)存。它能夠很好地支持Linux操作系統(tǒng)。SQLite雖然很小巧,但是支持的SQL語(yǔ)句不會(huì)遜色于其他開(kāi)源數(shù)據(jù)庫(kù)。SQLite不但支持命令方式操作數(shù)據(jù)庫(kù),而且為實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的管理提供了豐富的API接口函數(shù),包括創(chuàng)建數(shù)據(jù)庫(kù)、刪除數(shù)據(jù)庫(kù)、創(chuàng)建表、刪除表、插入數(shù)據(jù)、刪除數(shù)據(jù)、查找數(shù)據(jù)等。
在網(wǎng)關(guān)中數(shù)據(jù)接收程序主要任務(wù)是把協(xié)調(diào)器上傳的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)。數(shù)據(jù)接收程序的流程如圖4所示。主要包括串口參數(shù)的配置、串口接收線程的建立、串口發(fā)送線程的建立。串口參數(shù)的配置主要包括波特率設(shè)置、奇偶校驗(yàn)位和停止位的設(shè)置。串口接收數(shù)據(jù)線程負(fù)責(zé)把協(xié)調(diào)器上傳的數(shù)據(jù)存入到串口緩沖區(qū),串口主線程負(fù)責(zé)把緩沖區(qū)的數(shù)據(jù)解析后存儲(chǔ)到數(shù)據(jù)庫(kù)。
4.2 網(wǎng)關(guān)與服務(wù)器之間的網(wǎng)絡(luò)程序設(shè)計(jì)
網(wǎng)關(guān)采用了可靠的、面向連接的TCP協(xié)議的網(wǎng)絡(luò)程序設(shè)計(jì)。程序的工作流程如圖5所示。Socket()函數(shù)用于創(chuàng)建Socket;Bind()函數(shù)用于將Socket尋址結(jié)構(gòu)綁定到其所建立的Socket, 這樣當(dāng)有數(shù)據(jù)包到達(dá)時(shí),Linux內(nèi)核會(huì)將這個(gè)數(shù)據(jù)包讓給其綁定的Socket來(lái)處理;Listen()函數(shù)用來(lái)監(jiān)聽(tīng)、等待客戶(hù)端的連接請(qǐng)求;Connect()函數(shù)是客戶(hù)端使用的函數(shù),當(dāng)客戶(hù)端建立好Socket后會(huì)調(diào)用這個(gè)函數(shù)向服務(wù)器請(qǐng)求連接;Read()和write()函數(shù)是用來(lái)進(jìn)行數(shù)據(jù)的讀寫(xiě),在本網(wǎng)關(guān)中客戶(hù)端的read()函數(shù)一方面接收串口的數(shù)據(jù)輸入用來(lái)提供服務(wù)器的實(shí)時(shí)數(shù)據(jù)查詢(xún)功能,另一方面接收數(shù)據(jù)庫(kù)信息的輸入用來(lái)完成歷史數(shù)據(jù)的查詢(xún)功能。
4.3 Ad Hoc網(wǎng)絡(luò)的搭建
Ad Hoc網(wǎng)絡(luò)是一種新穎的計(jì)算機(jī)網(wǎng)絡(luò),其自身的獨(dú)特性賦予其巨大的發(fā)展前景。這種無(wú)線移動(dòng)網(wǎng)絡(luò)不依賴(lài)固定的網(wǎng)絡(luò)設(shè)施,在有限的無(wú)線通信帶寬和主機(jī)能源的情況下,通過(guò)系統(tǒng)主機(jī)自由地組網(wǎng),建立動(dòng)態(tài)變化的網(wǎng)絡(luò)結(jié)構(gòu)。網(wǎng)關(guān)系統(tǒng)中通過(guò)在嵌入式網(wǎng)關(guān)之間搭建Ad Hoc網(wǎng)絡(luò)來(lái)傳遞數(shù)據(jù)到遠(yuǎn)距離的服務(wù)器。目前所提出的Ad Hoc網(wǎng)絡(luò)的多路徑路由協(xié)議基本上都是在DSR協(xié)議或AODV協(xié)議的基礎(chǔ)上改進(jìn)而來(lái)的。本網(wǎng)關(guān)采用了AODV的路由協(xié)議進(jìn)行Ad Hoc網(wǎng)絡(luò)的搭建。搭建步驟為:第一步移植AODV路由協(xié)議,本網(wǎng)絡(luò)選擇了aodv-uu-0.9.5作為路由協(xié)議,主要是通過(guò)交叉編譯器編譯出aodv-arm.ko和aodv-arm;第二步通過(guò)ifconfig eth1 up,iwconfig eth1 mode Ad-Hoc,iwconfig eth1 essid 服務(wù)區(qū)別號(hào)這幾條命令來(lái)配置無(wú)線網(wǎng)卡工作模式為Ad Hoc模式;第三步把a(bǔ)odv-arm.ko模塊動(dòng)態(tài)地插進(jìn)網(wǎng)關(guān)的內(nèi)核;第四步執(zhí)行aodv-arm路由協(xié)議。這幾個(gè)關(guān)鍵步驟完成之后整個(gè)的Ad Hoc網(wǎng)絡(luò)就搭建好了。
5 小結(jié)
所設(shè)計(jì)的基于無(wú)線傳感器網(wǎng)絡(luò)的農(nóng)田監(jiān)測(cè)系統(tǒng)的網(wǎng)關(guān)完成了多種異構(gòu)的無(wú)線傳感器網(wǎng)絡(luò)的無(wú)縫隙連接工作,屏蔽了底層無(wú)線傳感器網(wǎng)絡(luò)的具體網(wǎng)絡(luò)結(jié)構(gòu),實(shí)現(xiàn)了多個(gè)無(wú)線傳感器網(wǎng)絡(luò)和處于外網(wǎng)的信息展示平臺(tái)的實(shí)時(shí)通信功能。并且根據(jù)具體的嵌入式平臺(tái)對(duì)aodv路由協(xié)議進(jìn)行了移植探索,最終也成功地在中間件的各個(gè)子系統(tǒng)之間搭建了一種無(wú)中心的自主的Ad Hoc網(wǎng)絡(luò),為農(nóng)田監(jiān)測(cè)數(shù)據(jù)的遠(yuǎn)距離傳輸提供了一種可靠的解決方案。
參考文獻(xiàn):
[1] 羅錫文,臧 英,周志艷.精細(xì)農(nóng)業(yè)中農(nóng)情信息采集技術(shù)的研究進(jìn)展[J].農(nóng)業(yè)工程學(xué)報(bào),2006,22(1):167-173.
[2] 石復(fù)習(xí),鄒志勇. 農(nóng)業(yè)環(huán)境參數(shù)檢測(cè)WSN網(wǎng)關(guān)設(shè)計(jì)[J].安徽農(nóng)業(yè)科學(xué),2010,38(23):12923-12924.
[3] 宋先居,張宗灝,趙體召. 地面氣象觀測(cè)數(shù)據(jù)實(shí)時(shí)傳輸及質(zhì)量控制程序?qū)崿F(xiàn)[J].氣象科技,2011,39(3):344-347.
[4] 唐慧強(qiáng), 莊安榮.一種氣象數(shù)據(jù)采集傳輸系統(tǒng)的設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2011,37(3):82-85.
[5] 崔炳儉,董衛(wèi)紅,黃躍青,等.無(wú)線傳感器網(wǎng)絡(luò)在氣象領(lǐng)域的應(yīng)用與研究[J].環(huán)境科學(xué)與技術(shù),2010,33(6E):55-57.