理论教育 精简ZigBee网络节点设计及应用实践

精简ZigBee网络节点设计及应用实践

时间:2023-10-27 理论教育 版权反馈
【摘要】:标准协议栈和精简协议栈的功能对比见表5-3,可以看出,精简协议栈实现了ZigBee的主要功能。表5-3 标准协议栈与精简协议栈比较表5-4 精简协议栈的代码结构3.ZigBee协议编程对于实际应用来说,最重要的是协议栈的APL函数。消息发送后,协议栈会向父节点路由此消息。

精简ZigBee网络节点设计及应用实践

1.ZigBee协议栈简介

ZigBee技术核心是运行于微控制器内部的一套软件,也称之为软件ZigBee协议栈,负责该协议规范制定的是ZigBee联盟。ZigBee联盟于2004年12月通过了ZigBee1.0(也称ZigBee2004)标准,之后于2005年9月公布并提供下载。

2006年12月,ZigBee联盟又推出ZigBee1.1(也称ZigBee2006)。ZigBee1.1较原有Zig-Bee1.0作了比较大的改进,例如新增ZCL(ZigBee Cluster Library,ZigBee簇群库)、集团装置(Group Device)、多播(Multicast)功效及更丰富的网络拓扑,并且可以直接通过空中激活(Over The Air,OTA)进行组态配置和软件更新,此外还移除了KVP(Key Value Pair,键值对)的信息格式。

2007年10月,ZigBee联盟推出ZigBee2007,制订出ZigBee Pro Feature Set(简称Zig-BeePRO)的新标准,对ZigBee协议栈进行了重大升级,加强了对家庭自动化(Home Au-tomation,HA)、楼宇自动化(Building Automation,BA)和高级计量架构(Advanced Meter Infrastructure,AMI)3种应用类型的支持;同时在自动跳频以及支持更大的网络、更高级的路由算法等方面的改进和提高,将ZigBee协议栈的可用性可靠性提高到一个全新的阶段。

掌握ZigBee技术的关键是掌握ZigBee协议栈,从ZigBee1.0到ZigBee1.1,再到目前的ZigBee 2007/PRO,协议栈的结构、功能调用、参数设置、软件代码等都有了重大的变化,掌握的难度也在不断增加。只有自己动手实验和实践,才能在这复杂的协议栈技术手册和浩瀚的代码中抓住其中的精髓,才能驾驭协议栈和实现自己的应用设计。

2.ZigBee精简协议栈简介

美国密西西比州立大学的Robert Reese教授出于教学、科研目的开发出一套精简版Zig-Bee协议栈。标准协议栈和精简协议栈的功能对比见表5-3,可以看出,精简协议栈实现了ZigBee的主要功能。国内一些研究机构在此精简协议上进行扩充,实现了一些其原本不具备的功能。精简协议栈的代码结构见表5-4。

表5-3 标准协议栈与精简协议栈比较

978-7-111-44976-8-Chapter05-12.jpg

表5-4 精简协议栈的代码结构

978-7-111-44976-8-Chapter05-13.jpg

3.ZigBee协议编程

对于实际应用来说,最重要的是协议栈的APL函数。协议栈的每一层都有自己的有限状态机(FSM)以追踪要进行的操作。顶层的状态机函数为apsFSM(),这个函数需要最早被调用以使协议栈运行,这与标准栈中的APLTask()函数等价。所有的应用层函数都以apl或者aps开头,这些函数被分为两类:一类是对栈内数据的存取函数,另一类是数据传输过程触发一系列事件的服务函数(调用)。这里需要说明的是服务调用不能重叠,这可以通过调用apsBusy()函数进行判断。

4.节点程序设计

如果节点作为协调器,那么需要定义LRWPAN_COORDINATOR;而如果节点作为路由器,则需要定义LRWPAN_ROUTER;如果两者都没有定义,将作为RFD节点。协调器节点形成网络,然后进入一个无限循环并调用apsFSM()运行协议栈。调用aplFormNetwork()服务后调用函数aplGetStatus(),如果返回了LRWPAN_SUCCESS则表示服务调用成功。代码如下:

978-7-111-44976-8-Chapter05-14.jpg

978-7-111-44976-8-Chapter05-15.jpg

消息从源节点的源端点发送到目标节点的目标端点。消息分直接消息(指定了目标地址)和非直接消息(仅定义了源节点、源端点和簇,没有指定目标地址)。端点号从1到255由应用程序设置(端点0由栈保留使用)。消息发送后,协议栈会向父节点路由此消息。如果收到APS的ack确认,协议栈就会将消息发送给目标端点。

接收消息

协议栈使用以下APL访问函数接收数据包。(www.daowen.com)

aplGetRxDstEp():返回目的端点

aplGetRxCluster():返回簇号

aplGetRxSrcEp():返回源端点

aplGetRxSADDR():返回源端点的短地址

aplGetRxMsgLen():返回消息长度

aplGetRxMsgData():返回消息数据的指针

aplGetRxRSSI():返回收到消息的信号强度

而后用户回调函数usrRxPacketCallback()将被调用。这个函数将使用用户数据结构保存数据,设置已收到数据的标志位。此函数结束后消息数据的指针将会被释放,所以在函数结束之前要将数据保存以防止下一个包将数据覆盖掉。

5.编写用户应用程序

编写用户应用程序时,要确定端点的连接方式。一种简单的方式是RFD节点周期性地向协调器节点返回数据。这样做比较简单,因为协调器的地址总是0。

RFD节点间使用直接方式通信比较困难。因为RFD节点的短地址是由其接入网络的顺序和深度决定的,事先并不知道。当然可以在协调器节点上增加程序告知RFD节点它们的地址,但这使复杂程度增加了。比较好的方式是使用非直接消息方式进行RFD节点间通信。RFD节点都将消息发送给协调器节点,协调器节点根据绑定表向正确的节点发送数据。

6.函数总结

鉴于APL层函数接口对程序设计的重要性,将这些函数做一个总结。表5-5是APL服务,这些函数需要调用apsBusy()确定其是否完成,并且使用aplGetStatus()函数返回状态。表5-6是有限状态机的调用。

表5-5 APL服务调用

978-7-111-44976-8-Chapter05-16.jpg

表5-6 有限状态机的调用

978-7-111-44976-8-Chapter05-17.jpg

无线传感器网络具有广阔的应用前景,由ZigBee协议可以方便有效地组建无线传感器网络。在整个应用中,主要硬件设备可由一个51单片机加上2.4GHz的收发模块组成,采用CC2530是为了更加方便使用,而ZigBee的真正核心是安装在单片机中的协议栈代码。精简版协议栈不论从开发难度到使用成本都具有一定的优势。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈