文献标识码:A
文章编号: 0258-7998(2012)02-0084-04
温室控制技术随着温室农业的发展应运而生,传统的人工检测和控制方法费时费力,计算机的采用代表着它发展的逐步成熟;有线传输面临着布线复杂、维护和更新升级困难,而无线传感网络技术的诞生给它带来了一场全新的革命。
本文提出了一种基于ZigBee无线网络技术的智能温室大棚监控系统设计方案,通过对影响植物生长的光照、湿度、温度等几个重要因素进行实时的智能化监测和控制,同时还可以通过手机短信通知农户。文中重点介绍了基于ZStack的应用程序开发,实现了对温室内多种信息的远程监测、处理和控制。
1 ZigBee无线网络技术
ZigBee是一种新兴的短距离、低速率无线网络技术[1]。它是建立在IEEE 802.15.4[2]标准之上的,IEEE 规定了ZigBee的物理层和媒体接入控制层,网络层、应用支持子层和高层应用规范由ZigBee联盟制定。ZigBee协议规定了三个可用频段868 MHz、915 MHz和2.4 GHz,分别提供1个、10个和16个共计27个信道。其中2.4 GHz为全球通用频段,传输速率达250 kb/s[3]。
2 系统总体设计
2.1 系统结构
以自动控制原理为理论基础,应用传感器与执行器件构成闭环控制系统。传感器节点配有传感器感知植物的生长环境,控制节点配有执行器件控制执行器件改善植物生长环境。传感器节点与控制节点相互配合,共同为植物提供适宜的生长环境。
本系统由无线传感器网络、网关和主控中心组成。无线传感器网络是物联网的神经末梢,负责感知环境的变化,并将数据通过网关传输到互联网。系统结构如图1所示。
2.2 网关系统结构
网关是互联网与无线传感器网络之间的数据通信桥梁。本方案提供了三种网关接入方式:本地访问、手机访问和互联网访问。网关系统结构如图2所示。
2.3 传感器网络结构
ZigBee网络存在三种逻辑设备类型,即协调器、路由器、终端设备,并且在一个ZigBee网络中有且只有一个协调器。当协调器被激活后,它就会建立一个自己的网络。本方案采用的是星型网络,在星型网络结构中有一个唯一的PAN主协调器,通过选择一个PAN标识符确保网络的唯一性。路由或终端都可以加入到这个网络中来。系统的传感器网络结构如图3所示。
3 硬件设计
本系统硬件主要包括三部分,其中无线传感器网络核心是基于TI公司的CC2430开发的无线模块;网关是基于ARM微处理器的嵌入式平台;主控中心是PC机。
3.1 ZigBee协调器节点硬件设计
ZigBee协调器节点由无线收发器CC2430、射频天线RF、电源模块、晶振模块、串口模块和LED指示灯组成[4],功能模块如图4所示。RF的输入/输出是高阻和差动的,用于RF口最合适的差动负载是(115+180 Ω)。当使用不平衡天线时为了优化性能,应当使用不平衡变压器。由于CC2430的工作电压为3.3 V,所以要用电压转换模块把5 V降到3.3 V。CC2430可以同时接32 MHz和32.768 kHz的两种频率的晶振电路,以满足不同的要求。串口模块用于ZigBee协调器将无线接收的数据信息传送给网关,同时接收网关传送过来的控制命令。LED指示灯用于显示网络连接状态。
3.2 传感器节点硬件设计
无线传感器节点由各种数据采集模块、CC2430数据传输模块、电源模块和外部数据存储等功能模块组成,功能模块如图5所示。数据采集模块负责采集监测区域的温度、湿度、光照强度等信息并完成数据转换;CC2430数据传输模块负责与路由节点进行无线数据交换、传输采集数据、接收控制命令。外部数据存储模块用来保存传感器节点采集的数据。电源管理模块采用两节5号干电池。LED指示灯显示加入或退出网络的状态。
路由器节点的主要任务是将不同区域的数据从传感器节点路由到协调器节点,因此电路比较简单不再赘述。
4 软件设计
本系统采用的开发环境是IAR7,系统软件是基于TI公司的Z-Stack 2006协议栈开发。从系统结构中可以看出本系统软件设计包括三大部分:无线传感器网络基于Z-Stack的应用程序开发;网关基于Qt的应用程序开发;主控中心Web应用程序开发本文着重实现基于Z-Stack的应用程序开发。
4.1 ZigBee协议栈
ZigBee协议栈由一组子层构成,每一层向它的上层提供数据和管理服务,分别为物理层(PHY)、媒体访问控制层(MAC)、网络层(NWK)和应用层(ADL),应用层又分为:应用支持子层(APS)、ZigBee设备对象(ZDO)和由制造商制定的应用对象[2,4-5]。
实际开发中根据需要将协议栈的层次又做了细化。Z-Stack中的硬件抽象层HAL提供各种硬件模块的驱动,基于HAL之上是操作系统抽象层OSAL。OSAL实现了一个易用的操作系统平台,以实现多任务为核心的系统资源管理机制。Z-Stack 采用操作系统的思想来构建,采用事件轮循机制,当各个层初始化完成后,系统将会进入低功耗模式,当有事件发生时,系统立刻被唤醒,并转而进入中断处理事件,处理完成后再次进入低功耗模式,减少功耗。OSAL把优先级放在了最重要的地位。当在处理的任务中有两个以上事件待处理,处理完一件后,也要去查询优先级更高的任务。赋予优先级高的任务最大的权利,尽可能保证高优先级任务的每一个事件都能得到最及时的处理。
4.2 无线传感网软件平台搭建
操作系统是通过调度各项任务来使整个系统协调运作起来的。对不同类型设备的处理作为一个任务,把新建的任务添加到系统中,操作系统便会把新任务与协议栈融合到一起,使系统具备新的功能,即完成了无线传感器网络软件平台的搭建。
(1) 建立任务:任务初始化函数的建立
任务初始化函数要做两件事,首先是为任务获取系统分配的任务ID,最后是初始化运行任务所需的硬件资源及变量。
任务初始化函数的格式为:
XXX_Init(unsigned char task_id)
{
XXX_TaskID = task_id;
初始化任务运行所需的硬件资源及变量。
}
其中“XXX”表示任务的名称。“XXX_TaskID”是用户自己定义的变量,用于存储任务的ID号。
(2) 建立任务:任务事件处理函数的建立
对模块的各种外部变化操作系统以事件的方式来处理,不同的宏定义代表不同事件,比如:KEY_CHANGE为按键事件;ZDO_STATE_CHANGE为网络状态变化事件;AF_INCOMING_MSG_CMD表示接收到其他节点发送来的数据,该事件为无线处理的重要事件。
任务事件处理函数原型为:uint16 Sample_ProcessEvent( uint8 task_id, uint16 events );形参task_id 为任务 ID号,events为事件代号。
(3) 添加任务
所有的任务添加都是在应用层App/OSAL_SampleApp.c中通过osalTaskAdd()函数添加一个OSAL任务,函数原型为:
void osalTaskAdd(const pTaskInitFn pfninit,
const pTaskEventHandlerFn pfnEventProcessor,
const byte taskPriority)
参数1:pfnInit(指向任务初始化函数的指针);
参数2:pfnEventProcessor(指向任务事件处理函数的指针);
参数3:taskPriority(任务优先级)。
4.3 ZigBee网络通信设置与组网
4.3.1 网络通信设置
在Tools/f8wConfig.cfg配置文件中定义了工程相关的网络通信设置。其中比较重要的是ZigBee通信相关的信道通道的设置和PAN ID的设置。用户可以通过更改该文件中的相关宏定义来控制 ZigBee网络的通道和PAN ID,以此来解决多个ZigBee网络的冲突问题。信道是数据在物理层传输时使用的通道;PIN ID为ZigBee网络的标示符,用来区别不同的网络。
除此之外,在启动网络前还需要修改模块的物理地址。在ZigBee网络中,无论是协调器还是路由器或终端节点,每个模块都有自己唯一的64位物理地址。物理地址的修改有两种方式,一种是通过Zmain/Zmain.c中的zmain_ext_addr()函数设置;另一种是使用ChipconFlashProgrammer软件。默认地址0xFF FF FF FF FF FF FF FF为无效的,除此之外都是有效的,且保证在网络中的唯一性即可。
4.3.2 网络组建
(1) 协调器格式化网络
协调器将扫描DEFAULT_CHANLIST指定的通道,最后在其中之一上形成网络。如果ZDAPP_CONFIG_PAN_
ID被定义为0xFFFF,则协调器将根据自身的IEEE地址建立一个随机的PAN ID。如果ZDAPP_CONFIG_PAN_ID没有被定义为0xFFFF,则协调器建立网络的PAN ID将由ZDAPP_CONFIG_PAN_ID指定, 通常这个值介于0~0x3FFF。
(2) 路由器和终端设备加入网络
路由器和终端设备启动后,将扫描DEFAULT_CHANLIST指定的频道。如果ZDAPP_CONFIG_PAN_ID没有被定义为0xFFFF,则路由器或终端将强制加入ZDAPP_CONFIG_PAN_ID定义的网络。反之随机加入网络。
4.4 数据传输
本系统中涉及的数据传输方式有两种:无线收发和串口收发。其中节点向协调器发送采集信息、协调器向控制节点发送控制信息是通过无线收发实现的;协调器将采集信息传送给网关、网关向协调器发送控制命令是通过串口收发实现的。
4.4.1 无线数据收发
(1) 无线发送
系统中采用短地址方式发送数据,数据以帧格式传输。在发送前按照协议规定的帧形式构建数据帧,然后调用无线发送函数。函数原型为:uint8 SendData(uint8 *buf, uint16 addr, uint8 Leng);buf为发送数据指针;addr为目的地址;Leng发送数据长度。
(2) 无线接收
对于无线接收并没有像发送一样单独地处理函数,而是在任务处理函数中通过处理无线接收数据事件来完成处理的,具体函数如下:
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为无线接收事件宏定义,SampleApp_MessageMSGCB()函数为具体接收事件的处理函数。
4.4.2 串口数据收发
系统中所用的串口为无线芯片CC2430自带资源,通过自定义串口收发函数来使用该资源,从而实现网关与协调器节点数据传输。
串口发送函数原型为:
void UartTX_Send_String(char *Data,int len);
串口接收函数原型为:
char UartRX_Receive_Char (void);
伴随着物联网概念的普及,基于ZigBee的无线传感器网络技术得到越来越广泛的应用。本文将ZigBee网络技术应用于温室监控系统中,介绍了系统总体架构和无线传感器网络部分的软、硬件设计及实现过程,重点介绍了无线网络的构建与数据传输。与网关及上层应用程序整合后该系统能实时、准确地测量并显示温室内各点的数据信息,使管理者能够及时了解农作物的生长环境,从而及时、有效地采取措施,在保证作物健康成长的前提下提高产量、增加收益。如果更换采集节点的传感器,则该监控系统可以应用于不同的场合具有广阔的应用前景。
参考文献
[1] 李文仲,段朝玉.ZigBee无线网络技术入门与实战[M].北京:北京航空航天大学出版社,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无线通信协议实现技术的研究[J]. 计算机工程与应用,2007,43(6):143-145.
[4] 蔡文晶, 秦会斌. 基于ZigBee精简协议的无线数据采集系统[J].机电工程, 2011,28(2):224-226.
[5] Suggestions for the improvement of the IEEE 802.15.4 standard. [2010-08]. http://www.ieee.org.