文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)02-0084-04
溫室控制技術(shù)隨著溫室農(nóng)業(yè)的發(fā)展應(yīng)運(yùn)而生,傳統(tǒng)的人工檢測(cè)和控制方法費(fèi)時(shí)費(fèi)力,計(jì)算機(jī)的采用代表著它發(fā)展的逐步成熟;有線傳輸面臨著布線復(fù)雜、維護(hù)和更新升級(jí)困難,而無(wú)線傳感網(wǎng)絡(luò)技術(shù)的誕生給它帶來(lái)了一場(chǎng)全新的革命。
本文提出了一種基于ZigBee無(wú)線網(wǎng)絡(luò)技術(shù)的智能溫室大棚監(jiān)控系統(tǒng)設(shè)計(jì)方案,通過(guò)對(duì)影響植物生長(zhǎng)的光照、濕度、溫度等幾個(gè)重要因素進(jìn)行實(shí)時(shí)的智能化監(jiān)測(cè)和控制,同時(shí)還可以通過(guò)手機(jī)短信通知農(nóng)戶。文中重點(diǎn)介紹了基于ZStack的應(yīng)用程序開發(fā),實(shí)現(xiàn)了對(duì)溫室內(nèi)多種信息的遠(yuǎn)程監(jiān)測(cè)、處理和控制。
1 ZigBee無(wú)線網(wǎng)絡(luò)技術(shù)
ZigBee是一種新興的短距離、低速率無(wú)線網(wǎng)絡(luò)技術(shù)[1]。它是建立在IEEE 802.15.4[2]標(biāo)準(zhǔn)之上的,IEEE 規(guī)定了ZigBee的物理層和媒體接入控制層,網(wǎng)絡(luò)層、應(yīng)用支持子層和高層應(yīng)用規(guī)范由ZigBee聯(lián)盟制定。ZigBee協(xié)議規(guī)定了三個(gè)可用頻段868 MHz、915 MHz和2.4 GHz,分別提供1個(gè)、10個(gè)和16個(gè)共計(jì)27個(gè)信道。其中2.4 GHz為全球通用頻段,傳輸速率達(dá)250 kb/s[3]。
2 系統(tǒng)總體設(shè)計(jì)
2.1 系統(tǒng)結(jié)構(gòu)
以自動(dòng)控制原理為理論基礎(chǔ),應(yīng)用傳感器與執(zhí)行器件構(gòu)成閉環(huán)控制系統(tǒng)。傳感器節(jié)點(diǎn)配有傳感器感知植物的生長(zhǎng)環(huán)境,控制節(jié)點(diǎn)配有執(zhí)行器件控制執(zhí)行器件改善植物生長(zhǎng)環(huán)境。傳感器節(jié)點(diǎn)與控制節(jié)點(diǎn)相互配合,共同為植物提供適宜的生長(zhǎng)環(huán)境。
本系統(tǒng)由無(wú)線傳感器網(wǎng)絡(luò)、網(wǎng)關(guān)和主控中心組成。無(wú)線傳感器網(wǎng)絡(luò)是物聯(lián)網(wǎng)的神經(jīng)末梢,負(fù)責(zé)感知環(huán)境的變化,并將數(shù)據(jù)通過(guò)網(wǎng)關(guān)傳輸?shù)交ヂ?lián)網(wǎng)。系統(tǒng)結(jié)構(gòu)如圖1所示。
2.2 網(wǎng)關(guān)系統(tǒng)結(jié)構(gòu)
網(wǎng)關(guān)是互聯(lián)網(wǎng)與無(wú)線傳感器網(wǎng)絡(luò)之間的數(shù)據(jù)通信橋梁。本方案提供了三種網(wǎng)關(guān)接入方式:本地訪問(wèn)、手機(jī)訪問(wèn)和互聯(lián)網(wǎng)訪問(wèn)。網(wǎng)關(guān)系統(tǒng)結(jié)構(gòu)如圖2所示。
2.3 傳感器網(wǎng)絡(luò)結(jié)構(gòu)
ZigBee網(wǎng)絡(luò)存在三種邏輯設(shè)備類型,即協(xié)調(diào)器、路由器、終端設(shè)備,并且在一個(gè)ZigBee網(wǎng)絡(luò)中有且只有一個(gè)協(xié)調(diào)器。當(dāng)協(xié)調(diào)器被激活后,它就會(huì)建立一個(gè)自己的網(wǎng)絡(luò)。本方案采用的是星型網(wǎng)絡(luò),在星型網(wǎng)絡(luò)結(jié)構(gòu)中有一個(gè)唯一的PAN主協(xié)調(diào)器,通過(guò)選擇一個(gè)PAN標(biāo)識(shí)符確保網(wǎng)絡(luò)的唯一性。路由或終端都可以加入到這個(gè)網(wǎng)絡(luò)中來(lái)。系統(tǒng)的傳感器網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
3 硬件設(shè)計(jì)
本系統(tǒng)硬件主要包括三部分,其中無(wú)線傳感器網(wǎng)絡(luò)核心是基于TI公司的CC2430開發(fā)的無(wú)線模塊;網(wǎng)關(guān)是基于ARM微處理器的嵌入式平臺(tái);主控中心是PC機(jī)。
3.1 ZigBee協(xié)調(diào)器節(jié)點(diǎn)硬件設(shè)計(jì)
ZigBee協(xié)調(diào)器節(jié)點(diǎn)由無(wú)線收發(fā)器CC2430、射頻天線RF、電源模塊、晶振模塊、串口模塊和LED指示燈組成[4],功能模塊如圖4所示。RF的輸入/輸出是高阻和差動(dòng)的,用于RF口最合適的差動(dòng)負(fù)載是(115+180 Ω)。當(dāng)使用不平衡天線時(shí)為了優(yōu)化性能,應(yīng)當(dāng)使用不平衡變壓器。由于CC2430的工作電壓為3.3 V,所以要用電壓轉(zhuǎn)換模塊把5 V降到3.3 V。CC2430可以同時(shí)接32 MHz和32.768 kHz的兩種頻率的晶振電路,以滿足不同的要求。串口模塊用于ZigBee協(xié)調(diào)器將無(wú)線接收的數(shù)據(jù)信息傳送給網(wǎng)關(guān),同時(shí)接收網(wǎng)關(guān)傳送過(guò)來(lái)的控制命令。LED指示燈用于顯示網(wǎng)絡(luò)連接狀態(tài)。
3.2 傳感器節(jié)點(diǎn)硬件設(shè)計(jì)
無(wú)線傳感器節(jié)點(diǎn)由各種數(shù)據(jù)采集模塊、CC2430數(shù)據(jù)傳輸模塊、電源模塊和外部數(shù)據(jù)存儲(chǔ)等功能模塊組成,功能模塊如圖5所示。數(shù)據(jù)采集模塊負(fù)責(zé)采集監(jiān)測(cè)區(qū)域的溫度、濕度、光照強(qiáng)度等信息并完成數(shù)據(jù)轉(zhuǎn)換;CC2430數(shù)據(jù)傳輸模塊負(fù)責(zé)與路由節(jié)點(diǎn)進(jìn)行無(wú)線數(shù)據(jù)交換、傳輸采集數(shù)據(jù)、接收控制命令。外部數(shù)據(jù)存儲(chǔ)模塊用來(lái)保存?zhèn)鞲衅鞴?jié)點(diǎn)采集的數(shù)據(jù)。電源管理模塊采用兩節(jié)5號(hào)干電池。LED指示燈顯示加入或退出網(wǎng)絡(luò)的狀態(tài)。
路由器節(jié)點(diǎn)的主要任務(wù)是將不同區(qū)域的數(shù)據(jù)從傳感器節(jié)點(diǎn)路由到協(xié)調(diào)器節(jié)點(diǎn),因此電路比較簡(jiǎn)單不再贅述。
4 軟件設(shè)計(jì)
本系統(tǒng)采用的開發(fā)環(huán)境是IAR7,系統(tǒng)軟件是基于TI公司的Z-Stack 2006協(xié)議棧開發(fā)。從系統(tǒng)結(jié)構(gòu)中可以看出本系統(tǒng)軟件設(shè)計(jì)包括三大部分:無(wú)線傳感器網(wǎng)絡(luò)基于Z-Stack的應(yīng)用程序開發(fā);網(wǎng)關(guān)基于Qt的應(yīng)用程序開發(fā);主控中心Web應(yīng)用程序開發(fā)本文著重實(shí)現(xiàn)基于Z-Stack的應(yīng)用程序開發(fā)。
4.1 ZigBee協(xié)議棧
ZigBee協(xié)議棧由一組子層構(gòu)成,每一層向它的上層提供數(shù)據(jù)和管理服務(wù),分別為物理層(PHY)、媒體訪問(wèn)控制層(MAC)、網(wǎng)絡(luò)層(NWK)和應(yīng)用層(ADL),應(yīng)用層又分為:應(yīng)用支持子層(APS)、ZigBee設(shè)備對(duì)象(ZDO)和由制造商制定的應(yīng)用對(duì)象[2,4-5]。
實(shí)際開發(fā)中根據(jù)需要將協(xié)議棧的層次又做了細(xì)化。Z-Stack中的硬件抽象層HAL提供各種硬件模塊的驅(qū)動(dòng),基于HAL之上是操作系統(tǒng)抽象層OSAL。OSAL實(shí)現(xiàn)了一個(gè)易用的操作系統(tǒng)平臺(tái),以實(shí)現(xiàn)多任務(wù)為核心的系統(tǒng)資源管理機(jī)制。Z-Stack 采用操作系統(tǒng)的思想來(lái)構(gòu)建,采用事件輪循機(jī)制,當(dāng)各個(gè)層初始化完成后,系統(tǒng)將會(huì)進(jìn)入低功耗模式,當(dāng)有事件發(fā)生時(shí),系統(tǒng)立刻被喚醒,并轉(zhuǎn)而進(jìn)入中斷處理事件,處理完成后再次進(jìn)入低功耗模式,減少功耗。OSAL把優(yōu)先級(jí)放在了最重要的地位。當(dāng)在處理的任務(wù)中有兩個(gè)以上事件待處理,處理完一件后,也要去查詢優(yōu)先級(jí)更高的任務(wù)。賦予優(yōu)先級(jí)高的任務(wù)最大的權(quán)利,盡可能保證高優(yōu)先級(jí)任務(wù)的每一個(gè)事件都能得到最及時(shí)的處理。
4.2 無(wú)線傳感網(wǎng)軟件平臺(tái)搭建
操作系統(tǒng)是通過(guò)調(diào)度各項(xiàng)任務(wù)來(lái)使整個(gè)系統(tǒng)協(xié)調(diào)運(yùn)作起來(lái)的。對(duì)不同類型設(shè)備的處理作為一個(gè)任務(wù),把新建的任務(wù)添加到系統(tǒng)中,操作系統(tǒng)便會(huì)把新任務(wù)與協(xié)議棧融合到一起,使系統(tǒng)具備新的功能,即完成了無(wú)線傳感器網(wǎng)絡(luò)軟件平臺(tái)的搭建。
(1) 建立任務(wù):任務(wù)初始化函數(shù)的建立
任務(wù)初始化函數(shù)要做兩件事,首先是為任務(wù)獲取系統(tǒng)分配的任務(wù)ID,最后是初始化運(yùn)行任務(wù)所需的硬件資源及變量。
任務(wù)初始化函數(shù)的格式為:
XXX_Init(unsigned char task_id)
{
XXX_TaskID = task_id;
初始化任務(wù)運(yùn)行所需的硬件資源及變量。
}
其中“XXX”表示任務(wù)的名稱。“XXX_TaskID”是用戶自己定義的變量,用于存儲(chǔ)任務(wù)的ID號(hào)。
(2) 建立任務(wù):任務(wù)事件處理函數(shù)的建立
對(duì)模塊的各種外部變化操作系統(tǒng)以事件的方式來(lái)處理,不同的宏定義代表不同事件,比如:KEY_CHANGE為按鍵事件;ZDO_STATE_CHANGE為網(wǎng)絡(luò)狀態(tài)變化事件;AF_INCOMING_MSG_CMD表示接收到其他節(jié)點(diǎn)發(fā)送來(lái)的數(shù)據(jù),該事件為無(wú)線處理的重要事件。
任務(wù)事件處理函數(shù)原型為:uint16 Sample_ProcessEvent( uint8 task_id, uint16 events );形參task_id 為任務(wù) ID號(hào),events為事件代號(hào)。
(3) 添加任務(wù)
所有的任務(wù)添加都是在應(yīng)用層App/OSAL_SampleApp.c中通過(guò)osalTaskAdd()函數(shù)添加一個(gè)OSAL任務(wù),函數(shù)原型為:
void osalTaskAdd(const pTaskInitFn pfninit,
const pTaskEventHandlerFn pfnEventProcessor,
const byte taskPriority)
參數(shù)1:pfnInit(指向任務(wù)初始化函數(shù)的指針);
參數(shù)2:pfnEventProcessor(指向任務(wù)事件處理函數(shù)的指針);
參數(shù)3:taskPriority(任務(wù)優(yōu)先級(jí))。
4.3 ZigBee網(wǎng)絡(luò)通信設(shè)置與組網(wǎng)
4.3.1 網(wǎng)絡(luò)通信設(shè)置
在Tools/f8wConfig.cfg配置文件中定義了工程相關(guān)的網(wǎng)絡(luò)通信設(shè)置。其中比較重要的是ZigBee通信相關(guān)的信道通道的設(shè)置和PAN ID的設(shè)置。用戶可以通過(guò)更改該文件中的相關(guān)宏定義來(lái)控制 ZigBee網(wǎng)絡(luò)的通道和PAN ID,以此來(lái)解決多個(gè)ZigBee網(wǎng)絡(luò)的沖突問(wèn)題。信道是數(shù)據(jù)在物理層傳輸時(shí)使用的通道;PIN ID為ZigBee網(wǎng)絡(luò)的標(biāo)示符,用來(lái)區(qū)別不同的網(wǎng)絡(luò)。
除此之外,在啟動(dòng)網(wǎng)絡(luò)前還需要修改模塊的物理地址。在ZigBee網(wǎng)絡(luò)中,無(wú)論是協(xié)調(diào)器還是路由器或終端節(jié)點(diǎn),每個(gè)模塊都有自己唯一的64位物理地址。物理地址的修改有兩種方式,一種是通過(guò)Zmain/Zmain.c中的zmain_ext_addr()函數(shù)設(shè)置;另一種是使用ChipconFlashProgrammer軟件。默認(rèn)地址0xFF FF FF FF FF FF FF FF為無(wú)效的,除此之外都是有效的,且保證在網(wǎng)絡(luò)中的唯一性即可。
4.3.2 網(wǎng)絡(luò)組建
(1) 協(xié)調(diào)器格式化網(wǎng)絡(luò)
協(xié)調(diào)器將掃描DEFAULT_CHANLIST指定的通道,最后在其中之一上形成網(wǎng)絡(luò)。如果ZDAPP_CONFIG_PAN_
ID被定義為0xFFFF,則協(xié)調(diào)器將根據(jù)自身的IEEE地址建立一個(gè)隨機(jī)的PAN ID。如果ZDAPP_CONFIG_PAN_ID沒(méi)有被定義為0xFFFF,則協(xié)調(diào)器建立網(wǎng)絡(luò)的PAN ID將由ZDAPP_CONFIG_PAN_ID指定, 通常這個(gè)值介于0~0x3FFF。
(2) 路由器和終端設(shè)備加入網(wǎng)絡(luò)
路由器和終端設(shè)備啟動(dòng)后,將掃描DEFAULT_CHANLIST指定的頻道。如果ZDAPP_CONFIG_PAN_ID沒(méi)有被定義為0xFFFF,則路由器或終端將強(qiáng)制加入ZDAPP_CONFIG_PAN_ID定義的網(wǎng)絡(luò)。反之隨機(jī)加入網(wǎng)絡(luò)。
4.4 數(shù)據(jù)傳輸
本系統(tǒng)中涉及的數(shù)據(jù)傳輸方式有兩種:無(wú)線收發(fā)和串口收發(fā)。其中節(jié)點(diǎn)向協(xié)調(diào)器發(fā)送采集信息、協(xié)調(diào)器向控制節(jié)點(diǎn)發(fā)送控制信息是通過(guò)無(wú)線收發(fā)實(shí)現(xiàn)的;協(xié)調(diào)器將采集信息傳送給網(wǎng)關(guān)、網(wǎng)關(guān)向協(xié)調(diào)器發(fā)送控制命令是通過(guò)串口收發(fā)實(shí)現(xiàn)的。
4.4.1 無(wú)線數(shù)據(jù)收發(fā)
(1) 無(wú)線發(fā)送
系統(tǒng)中采用短地址方式發(fā)送數(shù)據(jù),數(shù)據(jù)以幀格式傳輸。在發(fā)送前按照協(xié)議規(guī)定的幀形式構(gòu)建數(shù)據(jù)幀,然后調(diào)用無(wú)線發(fā)送函數(shù)。函數(shù)原型為:uint8 SendData(uint8 *buf, uint16 addr, uint8 Leng);buf為發(fā)送數(shù)據(jù)指針;addr為目的地址;Leng發(fā)送數(shù)據(jù)長(zhǎng)度。
(2) 無(wú)線接收
對(duì)于無(wú)線接收并沒(méi)有像發(fā)送一樣單獨(dú)地處理函數(shù),而是在任務(wù)處理函數(shù)中通過(guò)處理無(wú)線接收數(shù)據(jù)事件來(lái)完成處理的,具體函數(shù)如下:
uint16 SampleApp_ProcessEvent(uint8 task_id, uint16 events)
{
switch ( MSGpkt->hdr.event )
{
case AF_INCOMING_MSG_CMD: SampleApp_Message
(MSGpkt);
break;
}
}
其中AF_INCOMING_MSG_CMD為無(wú)線接收事件宏定義,SampleApp_MessageMSGCB()函數(shù)為具體接收事件的處理函數(shù)。
4.4.2 串口數(shù)據(jù)收發(fā)
系統(tǒng)中所用的串口為無(wú)線芯片CC2430自帶資源,通過(guò)自定義串口收發(fā)函數(shù)來(lái)使用該資源,從而實(shí)現(xiàn)網(wǎng)關(guān)與協(xié)調(diào)器節(jié)點(diǎn)數(shù)據(jù)傳輸。
串口發(fā)送函數(shù)原型為:
void UartTX_Send_String(char *Data,int len);
串口接收函數(shù)原型為:
char UartRX_Receive_Char (void);
伴隨著物聯(lián)網(wǎng)概念的普及,基于ZigBee的無(wú)線傳感器網(wǎng)絡(luò)技術(shù)得到越來(lái)越廣泛的應(yīng)用。本文將ZigBee網(wǎng)絡(luò)技術(shù)應(yīng)用于溫室監(jiān)控系統(tǒng)中,介紹了系統(tǒng)總體架構(gòu)和無(wú)線傳感器網(wǎng)絡(luò)部分的軟、硬件設(shè)計(jì)及實(shí)現(xiàn)過(guò)程,重點(diǎn)介紹了無(wú)線網(wǎng)絡(luò)的構(gòu)建與數(shù)據(jù)傳輸。與網(wǎng)關(guān)及上層應(yīng)用程序整合后該系統(tǒng)能實(shí)時(shí)、準(zhǔn)確地測(cè)量并顯示溫室內(nèi)各點(diǎn)的數(shù)據(jù)信息,使管理者能夠及時(shí)了解農(nóng)作物的生長(zhǎng)環(huán)境,從而及時(shí)、有效地采取措施,在保證作物健康成長(zhǎng)的前提下提高產(chǎn)量、增加收益。如果更換采集節(jié)點(diǎn)的傳感器,則該監(jiān)控系統(tǒng)可以應(yīng)用于不同的場(chǎng)合具有廣闊的應(yīng)用前景。
參考文獻(xiàn)
[1] 李文仲,段朝玉.ZigBee無(wú)線網(wǎng)絡(luò)技術(shù)入門與實(shí)戰(zhàn)[M].北京:北京航空航天大學(xué)出版社,2007.
[2] IEEE 802.15.4-2003Std: Wireless Medium Access Control (MAC) and Physical Layer(PHY) Specifications for Low-Rate Wireless Personal Area Networks(LR- WPANs)[2010-08]. http://www.ieee802.org/.
[3] 任秀麗,于海斌. ZigBee無(wú)線通信協(xié)議實(shí)現(xiàn)技術(shù)的研究[J]. 計(jì)算機(jī)工程與應(yīng)用,2007,43(6):143-145.
[4] 蔡文晶, 秦會(huì)斌. 基于ZigBee精簡(jiǎn)協(xié)議的無(wú)線數(shù)據(jù)采集系統(tǒng)[J].機(jī)電工程, 2011,28(2):224-226.
[5] Suggestions for the improvement of the IEEE 802.15.4 standard. [2010-08]. http://www.ieee.org.