1 ZigBee技术及ZigBee2006协议栈简介
1.1 ZigBee技术概述
ZigBee技术是一种短距离、低速率的无线通信技术。由于其短距离、低速率及可以实时定位等特点,被广泛应用于医疗、智能家居、智能建筑、工业自动化、智能空间等领域。
1.2 ZigBee2006协议栈简析
ZigBee通信协议的基础是IEEE 802.15.4。这是IEEE无线个人区域网工作组的一项标准,被称作IEEE 802.15.4标准。该标准定义了物理层(PHY)和媒体访问控制层(MAC)的标准。ZigBee联盟则定义了ZigBee协议的网络层(NWK)、应用层(APL)和安全服务规范。TI/Chipcon公司在IEEE 802.15.4标准和ZigBee联盟所推出的ZigBee2006规范的基础上,发布了全功能的ZigBee2006协议栈,并通过了ZigBee联盟的认证。该协议栈全部用C语言编写,免费提供给用户,同时向后兼容。该协议栈在结构上分为应用层、网络层、安全层、MAC层和物理层,每一层的函数都严格按照IEEE 802.15.4标准和ZigBee2006规范所规定的原语格式编写。与此同时,在协议栈内部还嵌入了一个操作系统,用于对任务进行统一的调度。对于用户而言,只需要了解应用层函数并进行恰当的调用,就可以构建功能完善、性能稳定的ZigBee无线网络。
2 系统方案设计
ZigBee无线传感执行网络必须要有一个协调器作为整个网络的传输与控制中心,另外还要有若干路由器和终端节点。它有3种最基本的连接方式:星状连接、网状连接和串状连接,如图1所示。
星状连接方式比较简单,只能组建包含较少节点的无线网络,各个终端节点通过协调器实现网络连接。网状连接中任意节点之间都可以传递信息。串状连接中增加了若干路由器,用于对数据进行转发。
在ZigBee2006全功能协议栈中,网络连接方式的选择可通过在nwk_globals.c和nwk_globals.h中对 STACK_PROFILE_ID的设置来实现。STACK_PRO-FILE_ID有3种量,分别对应着星状连接、网状连接和树状连接网络。
系统在nwk_globals.h中加入如下语句,从而在家庭环境中构建星状结构的ZigBee无线传感执行网络:
#define STACK_PROFILE_ID GENERIC_STAR
系统的整体结构如图2所示。
系统中布置有一个协调器与PC机相连,同时布置有若干终端节点或路由器,使其连接温度、湿度和光敏电阻等传感器来监测房间环境。另外,房间中还布置有一些终端节点与执行器连接,用于控制窗帘的开关、台灯的亮灭等。协调器和终端节点在房间内组成了一个星状结构的ZigBee无线传感执行网络。
系统的整体工作过程是:首先由协调器节点成功创建ZigBee网络,然后等待终端节点加入。当终端节点及传感器上电后,会自动查找空间中存在的 ZigBee网络,找到后即加入网络,并把该节点的物理地址发送给协调器。协调器把节点的地址信息等通过串口发送给计算机进行保存。当计算机想要获取某一节点处的传感器值时,只需要向串口发送相应节点的物理地址及测量指令。协调器通过串口从计算机端收到物理地址后,会向与其相对应的传感器节点发送数据,传达传感器测量指令。传感器节点收到数据后,通过传感器测量数据,然后将测量结果发送给协调器,并在计算机端进行显示。
3 系统硬件设计
系统的协调器、路由器和终端节点的核心采用TI公司的CC2430芯片。该芯片是一款真正的系统芯片(SoC)解决方案,其在单个芯片上集成了 ZigBee射频前端、微控制器和存储器。它使用1个8位的8051内核MCU作为控制器,其性能是工业标准8051核的8倍,且程序代码与51系列单片机完全兼容。CC2430具有64/128 KB的可编程Flash和8 KB的RAM,其大容量的Flash完全能够满足ZigBee2006协议栈程序的要求;另外,还具有模/数转换器(ADC)、定时器、AES128协处理器和看门狗定时器等片内外设。
系统的工作原理是:在协调器端,CC2430通过RS232异步串行通信与PC机进行通信。协调器成功组建网络时,会向PC机发送组网成功指示。当有路由器或终端节点加入网络时,协调器通过RS232向PC机发送节点加入指示。在路由器和终端节点处,上电后CC2430寻找可用信道并加入网络,然后等待指令。路由器或终端节点一旦收到协调器发送来的测量指令,将会读取传感器的数据并传送。
本系统中温度和湿度测量使用Sensirion公司的SHT11数字温湿度传感器。该传感器具有相对湿度和温度一体测量、超快的响应时间等优良特性。对台灯和窗帘的控制是通过继电器TQ2-3V来实现的。
4 软件设计
4.1 系统采集温湿度的程序设计
系统温湿度的采集使用的SHT11数字式温湿度传感器采用两线制数字接口,编程十分方便。温湿度采集程序流程如图3所示。
4.2 光敏电阻阻值读取
光敏电阻阻值的读取用CC2430内部的ADC实现。通过设置CC2430的 ADCCON3寄存器可对A/D转换的一些参数进行设置。具体如下:使用14位的分辨率,采样通道设置为AINO,参考电压设置为内部1.25 V。通过实验可以测定,当P0.1的电压值等于1.25 V时,环境光照强度已经足够弱,可以控制空间中的其他执行器做出动作,如开灯、打开窗帘等。
4.3 ZigBee2006协议栈常用函数及工作过程
系统软件基于TI/Chipcon公司免费提供的Zig-Bee2006协议栈,程序中嵌入了实时操作系统,用于对网络组建、节点加入、数据收发等功能运行统一调度。进行程序设计时,首先在协议栈应用层程序中添加相应的任务,然后运行任务即可处理。ZigBee2006协议栈的main函数流程如图4所示。
OSAL层初始化时,通过osalAddTasks函数提供任务列表,向实时操作系统中添加用户所需要的任务。在该函数中,TI公司已经添加了一些任务,如硬件应用层初始化及处理函数、网络层初始化及处理函数、应用层初始化及处理函数等。在该函数中添加自己的任务,添加任务函数如下: osalTaskAdd(CSCE_Init,CSCE_ProcessEvent,OSAL_TASK_PRIORI-TYLOW);
osalTaskAdd 函数在OSAL层中的OSAL_Task.C文件中定义,其作用是添加一个任务到任务列表。其中,第1个参数CSCE_Init为用户任务的初始化函数的函数名,第2个参数CSCE_ProcessEvent为用户任务的处理函数的函数名,第3个参数 OSAL_TASK_PRlORITY_LOW为用户任务的优先级。
任务初始化函数CSCE_Init和任务处理函数CSCE_ProcessEvent都需要遵循ZigBee2006协议栈的格式。其中,CSCE_Init函数和CSCE_ProcessEvent函数需要在应用层头文件SampleApp.h中进行声明。
CSCE_Init函数有一个参数task_id,该参数为任务ID,具体值由OSAL进行分配。CSCE_ProcessEvent函数有2个参数:第 1个参数与CSCE_Init函数相同,为任务ID;第2个参数events为需要处理的事件,它是一个16位的二进制数,每一位代表一个事件。
利用OSAL层进行任务设计时,必须保留系统任务事件SYS_EVENT_MSG(0x8000),该事件为强制事件。进行任务处理时,首先要对系统任务事件是否发生进行判断,任务处理流程如图5所示。由于ZigBee2006协议栈为全功能协议栈,不需要对IEEE 802.15.4和ZigBee规范进行全面的了解,只需要在应用层进行一些设计和改动,即可实现数据的发送、接收以及网络组建功能。在终端节点的 CSCE_ProcessEvent函数的上电初始化处理部分,加入物理地址和短地址提取函数,然后调用发送函数将物理地址向协调器发送。协议栈中的物理地址获取函数为NLME_GetExtAddr(),其返回结果为一个指向节点的64位IEEE地址的指针。短地址的获取函数为 NLME_GetShortAddr(),其返回结果为一个16位的无符号整型数据。
数据发送函数在ZigBee2006规范的原语中已经规定了其参数的顺序及意义。具体到TI/Chipcon公司所提供的ZigBee2006协议栈中,该函数为AF_DataRequest,其具体形式如下:
在协调器端和路由器(或终端节点)的CSCE_Pro-cessEvent函数中接收到数据部分(即CSCE_MessageMS-GCB函数)中对数据进行处理,将所接收到的数据(即物理地址和短地址)通过串口发送到计算机端,进行显示。
ZigBee2006协议栈中设计了串口接收处理函数:
该函数在MT目录的SPIMgr.C中。实验中,在协调器端调用该函数,即可从PC机端接收数据并进行相应的处理。
4.4 传感器程序与ZigBee2006协议栈的融合
系统程序中,传感器端的物理地址及短地址的发送部分程序,添加在ZigBee2006协议栈中的CSCE_ProcessEv-ent函数的上电初始化部分,即ZDO_STATE_CHANGE消息下。协调器及传感器端的数据接收都添加在CSCE_ProcessEvent函数的数据接收部分,即 AF_INCOMING_MSG_CMD消息下。系统整体工作过程如图6所示。
4.5 PC机端程序
在系统中,节点上电加入网络后,协调器会通过RS232向PC机发送新加入节点的IEEE地址。PC机将从串口接收到的物理地址和短地址进行存储,并改变计算机中所存储的房间地图中的节点颜色进行指示。该程序使用Visual C++6.O编写。
对用户而言,当想要获取房间内传感器所测量区域的温湿度、光照等情况时,只需要点击PC机所显示的地图上相应的节点。程序会调用已存储在相应位置的传感器节点的物理地址,通过串口和ZigBee网络向该节点发送测量传感器数据的指令,并等待接收传感器传回的温湿度,并在PC机界面进行显示。
5 结 论
实验表明,节点的功耗较低,每个节点使用电池供电可以工作3~6个月,可见应用ZigBee构建家庭环境的传感执行网络是可行的。