向 磊, 馬建設 , 劉 鵬, 劉向明
(1.武漢工程大學 湖北 武漢 430205;2.清華大學 深圳研究生院,廣東 深圳 518055)
隨著農業(yè)規(guī)模的不斷擴大、自動化程度的不斷提高,國內外興起了對農作物生長過程實施遠程監(jiān)控的研究,其中無線通信技術的快速發(fā)展為實現(xiàn)實時監(jiān)控農作物生長提供了可能[1]。ZigBee技術具有高可靠性、低成本、低功耗、高安全性、低數據速率等特點,廣泛應用于工業(yè)控制、智能家居、商業(yè)樓宇以及農業(yè)自動化等領域[2]。本文基于ZigBee無線傳感技術,實現(xiàn)了一套基于ZigBee網絡的蔬菜工廠監(jiān)控系統(tǒng)。
ZigBee是一種標準,該標準定義了短距離、低數據傳輸速率無線通信所需要的一系列通信協(xié)議[3]。ZigBee協(xié)議標準采用分層結構,每一層為上層提供一系列特殊的服務:數據實體提供數據傳輸服務;管理實體提供所有其他的服務,所有的服務實體都通過服務接入點為上層提供接口,每個服務接入點都支持一定數量的服務原語來實現(xiàn)所需的功能[4]。ZigBee協(xié)議分為兩個部分,IEEE802.15.4定義了物理層和媒體訪問控制層,ZigBee聯(lián)盟在此基礎上定義了網絡層和應用層架構,在應用層內提供了應用支持子層和ZigBee設備對象[5]。ZigBee協(xié)議棧將各個層定義的協(xié)議都集合在一起,以函數的形式實現(xiàn),并給用戶提供一些應用層API,供用戶調用。
蔬菜工廠監(jiān)控系統(tǒng)整體控制框架如圖1所示,由主控機、房間節(jié)點監(jiān)控單元、培菜架節(jié)點監(jiān)控單元3部分組成。在蔬菜工廠里有多個房間,每個房間里配置了一個房間節(jié)點監(jiān)控單元,每個房間里有多個培菜架,每個培菜架上配置了一個培菜架節(jié)點監(jiān)控單元,每個培菜架分為4層。
主控機的功能:1)作為服務器,接收各房間節(jié)點和培菜架節(jié)點的數據并存儲,通過網絡瀏覽器實現(xiàn)蔬菜工廠的整體監(jiān)控;2)在獲得相應權限后,給相關的房間節(jié)點和培菜架節(jié)點發(fā)送控制命令或數據采集命令。
房間節(jié)點監(jiān)控單元(包括整體監(jiān)控單元)的功能:1)房間節(jié)點監(jiān)控單元負責每個房間的空調控制、二氧化碳濃度采集和電源管理;2)整體監(jiān)控單元負責中央空調控制、二氧化碳發(fā)生器控制以及整個蔬菜工廠的電源管理。
培菜架節(jié)點監(jiān)控單元的功能:1)接收到主控機的數據采集命令后,采集本培菜架的溫度、濕度和圖像數據,并將數據發(fā)送給主控機;2)接收到主控機的控制命令后,控制本培菜架的LED燈的亮暗、營養(yǎng)液循環(huán)泵和電磁閥的開關等。
圖1 蔬菜工廠監(jiān)控系統(tǒng)整體控制框架Fig.1 Control framework of the monitoring system of vegetable factory
蔬菜工廠監(jiān)控系統(tǒng)采用如圖2所示的人機交互界面,該交互界面采用網頁瀏覽器實現(xiàn),用戶可以登錄該瀏覽器來實現(xiàn)對蔬菜的生長環(huán)境及生長狀況的實時監(jiān)控。
蔬菜工廠監(jiān)控系統(tǒng)的無線傳輸網絡模塊如圖3所示,在無線網絡中,配置了一個協(xié)調器,一個路由器和多個終端節(jié)點。協(xié)調器通過RS232連接上位機,與其進行通信,路由器用于無線網絡數據的路由轉發(fā),終端節(jié)點用于各房間和培菜架的數據和命令的收發(fā)。
圖2 人機交互界面Fig.2 Human-computer interaction interface
圖3 無線傳輸網絡模塊Fig.3 Wireless transmission network module
CC2530單片機是一款完全兼容8051內核,同時支持IEEE 802.15.4協(xié)議的無線射頻單片機,我們采用CC2530單片機來搭建無線傳感器網絡。
ZigBee網絡中的設備分為3種:1)協(xié)調器,主要負責無線網絡的建立與維護;2)路由器,主要負責無線網絡數據的路由轉發(fā);3)終端節(jié)點,主要負責無線網絡數據的采集。ZigBee無線傳感器網絡中的三種設備類型是由ZigBee協(xié)議棧不同的編譯選項來選擇的,它們的硬件部分其實都是一樣的,就是協(xié)調器多了一個串口,用于和上位機之間的通信。
3.2.1 協(xié)調器
協(xié)調器流程圖如圖4所示,協(xié)調器上電后,會按照編譯時給定的參數,選擇合適的信道、合適的網絡號,建立ZigBee無線網絡。然后,等待路由節(jié)點和終端節(jié)點加入網絡后,上位機通過串口給協(xié)調器發(fā)送命令,協(xié)調器將接收到的命令發(fā)送給路由節(jié)點和終端節(jié)點后,等待和接收返回的數據,判斷返回數據的類型并執(zhí)行相應的操作,如果返回的是地址回復幀,則更新地址列表,如果返回的是確認幀或采集到的數據,則將其通過串口發(fā)送給上位機。
3.2.2 路由器
在ZigBee無線網絡中,路由器是非常重要的節(jié)點設備,它不僅完成路由的功能,更重要的是,它在數據的的傳輸過程中起了“接力棒”的作用,大大地拓展了數據傳輸的距離[6]。路由節(jié)點上電后,先進行硬件電路的初始化,然后搜索是否有ZigBee無線網絡,如果有則自動加入,然后等待接收數據,接收到數據后對其進行轉發(fā)。路由對于應用層來說是完全透明的。Z-Stack提供了比較完善的路由算法,應用程序只需將數據下發(fā)到協(xié)議棧中,協(xié)議棧會自己負責尋找路徑,通過多跳的方式將數據傳送到目的地址。
3.2.3 終端節(jié)點
終端節(jié)點流程圖如圖4所示。終端節(jié)點上電后,先進行硬件電路的初始化,然后搜索是否有ZigBee無線網絡,如果有則自動加入,然后等待接收無線數據,解析接收到的無線數據后,向通過485總線連接的STC12LE5204AD單片機發(fā)送相應的命令,等待接收單片機采集的數據,接收到數據后將其發(fā)送給其父節(jié)點。另外,在蔬菜工廠監(jiān)控系統(tǒng)中,利用每個培菜架節(jié)點的串口1連接的串口攝像頭來采集圖像數據,利用房間節(jié)點的串口1連接的二氧化碳傳感器來采集二氧化碳濃度,采集到的數據經協(xié)調器發(fā)送到上位機。
圖4 ZigBee設備流程圖Fig.4 Flow chart of the ZigBee device
3.2.4 節(jié)點之間的數據發(fā)送與接收
在發(fā)送數據前需要按照通信協(xié)議中定義的數據幀格式來構建數據幀,數據幀包括起始字節(jié)、幀控制、序列號、目的地址、數據長度、數據載荷以及校驗和等信息。數據幀采用如下的結構體來定義:
typedef struct{
uint8 start;
uint8 reserved;
uint16 frameControl;
uint16 serialNumber;
uint16 dstAddr;
uint16 dataLen;
uint8 data[500];
uint16 checkSum;
}DataFrame;
對于數據幀DataFrame,起始字節(jié)start定義為0x55,保留字節(jié)reserved暫定義為0x00,為以后擴展所用,幀控制域frameControl用于表示數據包類型、幀類型以及幀屬性,序列號serialNumber從0x0001開始,每發(fā)送一個數據包,序列號加1,目的地址dstSddr表示發(fā)送數據包的目的地址,數據長度dataLen表示整個數據包的長度,包括數據域和其他域,數據域data[500]用于存放有效載荷數據,校驗和checkSum是將數據包除了checkSum外所有字節(jié)的數據相加,然后對256×256取余,校驗和用于遠距離通信中保證數據的準確性與完整性。
當需要進行節(jié)點之間的數據發(fā)送時,可以定義一個事件,在事件處理函數里實現(xiàn)數據的發(fā)送。
定義一個事件的方法如下:
#define SEND_DATA_EVENT 0x01;
然后在任務事件處理函數中對該事件作出響應,可以使用如下代碼實現(xiàn):
if(events&SEND_DATA_EVENT)
{
//在此添加相應的數據發(fā)送工作即可
return (events^SEND_DATA_EVENT);
}
數據發(fā)送時,只需調用數據發(fā)送函數AF_DataRequest()即可,該函數會調用協(xié)議棧里與硬件相關的函數最終將數據通過天線發(fā)送出去,這里面涉及對射頻模塊的操作,比如打開發(fā)射機、調整發(fā)射機的發(fā)送功率等,這些協(xié)議棧已經實現(xiàn)了,不需要自己去寫代碼實現(xiàn),只需知道 AF_DataRequest()函數的使用方法即可,發(fā)送數據可以使用如下的代碼實現(xiàn)(下面例子是以向協(xié)調器發(fā)送單播數據為例):
afAddrType_t my_DstAAddr;
my_DstAddr.addrMode= (afAddrMode_t)Addr16Bit; //發(fā)送模式
my_DstAddr.endPoint=GENERICAPP_ENDPOINT; //目的端口號
my_DstAddr.addr.shortAddr=0x0000; //目的節(jié)點的網絡地址
AF_DataRequest( &my_DstAddr, &GenericApp_epDesc,
GENERICAPP_CLUSTERID,//簇號
11, //發(fā)送數據的長度
(uint8*)buf, //發(fā)送數據緩沖區(qū)
&GenericApp_TransID, //發(fā)送序列號
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS);
當接收到數據后,操作系統(tǒng)會將該數據封裝成一個消息,然后放入消息隊列中,每個消息都有自己的消息ID,標識接收到新數據的消息的ID是AF_INCOMING_MSG_CMD,在ZigBee協(xié)議棧中AF_INCOMING_MSG_CMD宏的定義如下:
#define AF_INCOMING_MSG_CMD 0x1A
在路由器代碼中有如下代碼段:
MSGpkt= (afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);
while(MSGpkt)
{
switch(MSGpkt->hdr.event)
{
case AF_INCOMING_MSG_CMD:
GenericApp_MessageMSGCB( MSGpkt);
break;
……
當路由器接收到協(xié)調器或終端節(jié)點發(fā)送來的數據后,首先使用osal_msg_receive函數從消息隊列中接收一個消息,然后使用switch-case語句對消息類型進行判斷 (判斷消息ID),如果消息ID是AF_INCOMING_MSG_CMD,調用處理函數 GenericApp_MessageMSGCB(),在該函數中,對接收到的數據進行處理。
在蔬菜工廠監(jiān)控系統(tǒng)中,采用STC12LE5204AD單片機作為控制和數據采集模塊。單片機控制和數據采集模塊為一485主從機模型,主機為培菜架上的ZigBee無線網絡的終端節(jié)點,從機為STC12LE5204AD單片機,主機會依次給STC12LE5204AD單片機發(fā)送控制命令或數據采集命令,STC12LE5204AD單片機接收到命令后執(zhí)行相應操作并返回數據給主機。在培菜架的每層配置一個STC12LE5204AD單片機,負責該層的數據采集和執(zhí)行控制命令。
STC12LE5204AD單片機采用增強型8051CPU,片上集成4K字節(jié)用戶應用程序空間和256字節(jié)RAM、15個通用I/O口、4個16位定時器、2路PWM、高速A/D轉換、通用全雙工異步串行口等。
在蔬菜工廠監(jiān)控系統(tǒng)中,利用STC12LE5204AD單片機的P3_5和P3_7兩路8位PWM來控制培菜架LED燈板的白燈和紅燈的亮暗程度。通過P1_3口控制營養(yǎng)液循環(huán)泵的開關,來控制營養(yǎng)液循環(huán)系統(tǒng)。通過P1_2口控制電磁閥的開關,來控制排水系統(tǒng)。通過P1_6口連接的溫濕度傳感器來采集溫濕度。
將協(xié)調器、路由器、終端節(jié)點和培菜架依次上電,上位機通過串口調試軟件向協(xié)調器發(fā)送控制LED燈命令,可以觀察到培菜架上燈板的紅燈和白燈的亮度發(fā)生變化,并且上位機收到一個確認幀 “55 00 09 00 01 00 01 04 0C 00 70 00”。上位機通過串口調試軟件向協(xié)調器發(fā)送采集溫濕度命令,會收到采集到的溫濕度數據 “55 00 05 80 01 00 01 04 18 00 01 15 24 02 13 25 03 13 2E 04 12 2F F5 01”,“01 04” 表示04號房間的培菜架1,“01 15 24”表示培菜架第一層的溫濕度,“02 13 25”表示培菜架第二層的溫濕度。通過串口調試軟件定時每500ms發(fā)送一次采集溫濕度命令,可以觀察到數據傳輸過程中沒有出現(xiàn)丟包現(xiàn)象,而且采集到的數據值準確。此外上位機還能發(fā)送相應命令來采集二氧化碳濃度、圖片數據和控制二氧化碳發(fā)生器、營養(yǎng)液循環(huán)泵和電磁閥的開關。
蔬菜工廠監(jiān)控系統(tǒng)基于ZigBee無線傳感器網絡,以CC2530單片機和STC12LE5204AD單片機為硬件平臺,基于ZigBee 2007協(xié)議棧,在IAR開發(fā)環(huán)境下進行軟件開發(fā)。實驗結果表明該系統(tǒng)具有良好的可靠性和穩(wěn)定性,能夠實現(xiàn)對蔬菜生長環(huán)境的實時監(jiān)控,達到了預期的設計要求。
[1]包長春,石瑞珍,馬玉泉,等.基于ZigBee技術的農業(yè)設施測控系統(tǒng)的設計[J].農業(yè)工程學報,2007,23(8):160-164.BAO Chang-chun,SHI Rui-zhen,MA Yu-quan,et al.Design and realization of measuring and controlling system based on Zigbee technology in agriculture facilities[J].Transaction of the CSAE,2007,23(8):160-164.
[2]周怡,凌志浩,吳勤勤.ZigBee無線通信技術及其應用探討[J].自動化儀表,2005,26(6):5-9.ZHOU Yi,LING Zhi-hao,WU Qin-qin.ZigBee wireless communication technology and investigation on its application[J].Process Automation Instrumentation,2005,26(6):5-9.
[3]王風.基于CC2530的ZigBee無線傳感器網絡的設計與實現(xiàn)[D].西安:西安電子科技大學,2012.
[4]王小強,歐陽駿,黃寧淋,編著.ZigBee無線傳感器網絡設計與實現(xiàn)[M].北京:化學工業(yè)出版社,2012.
[5]蔡利婷,陳平華,羅彬,等.基于CC2530的ZigBee數據采集系統(tǒng)設計[J].計算機技術與發(fā)展,2012,22(11):197-200.CAI Li-ting,CHEN Ping-hua,LUO Bin,et al.Design of data acquisition system for ZigBee based on chip CC2530[J].Computer Technology and Development,2012,22(11):197-200.
[6]高守瑋,吳燦陽,主編.ZigBee技術實踐教程[M].北京:北京航空航天大學出版社,2009.