基于ZigBee无线传感网络技术节点设计与实现
扫描二维码
随时随地手机看文章
引言
保护民族物质文化和非物质文化遗产的任务一直都为国家所重视,少数民族博物馆中的文物是国家最为宝贵的民族物质文化遗产,利用发展前景最为广阔的无线传感技术,将数字化保护概念落实到实际的少数民族遗产保护当中,搭建无线传感网络以完成数据的采集和传递,将博物馆中的实时环境信息转换为易读的数字信号传递给管理员。
受到“十一五”国家科技支撑计划的重点课题《民族特需品数字化关键技术研究与示范应用[课题编号2009BAH41B05]》项目的支持,研发一套适合民族家具博物馆的物联网无线传感网络产品。本文对整个无线传感网络体系中的网络节点硬件、软件提出具体设计思路和实现方法。
ZigBee网络路径
1.1路由基本算法
ZigBee网络区别于其他无线传感网络之处就在于其预先进行地址分配,各节点由分布式算法根据一系列网络参数来确定,节点只有通过协调器或者路由器节点才能加入网络,加入网络后随即获得一个唯一的地址。我们这里设Cm和Rm分别为节点所能分配的最大节点数和路由节点数,L为网络的最大深度,则网络深度为d的路由节点所能分配的地址块大小如式(1)所示:
深度为d的父亲节点分配的第k个路由节点和第n个终端节点的地址分别为:
在式(2)、(3)中,代表负责分配网络地址的父节点地址,ZigBee网络路由算法应用的就是这种分布式网络地址分配机制。
1.2基于AODV路由算法
AODV即无线自组网按需平面距离向量路由协议,此算法通过检查自己的路由表,如存在到达目的节点的表项则直接跳取到下一地址,否则节点以洪泛的方式向网络广播路由请求数据包,当该数据包到达目的节点时,目的节点以单播方式向路由发起节点回复路由数据包。当路由发起节点收到路由回复包后,一条新加入到路由表的通信链路便产生了。
该算法有很多优点能够大大提高网络通信效率,有效地避免传统网络路由算法中出现的环路问题。基于需求的距离向量链路中由于发送数据之前需要对现有的通信路径进行遍历过程,因此在网络较大的情况时也会导致网络数据传输延时增大,进而造成网络效率不高的问题。
1.3基于树型结构路由算法
在网络中,深度为d,源节点S若要想传输到任意节点D时,就可以简单地根据的公式S<D<S+Cskp(d-1)来判断该节点是否属于自己的子孙节点。
依据式(4)来进行跳到下一个地址的行为,否则将数据输出给父亲节点。该算法的优点是空间复杂度以及时间复杂度比较简单,适用在网络节点数目不是很多的情况,否则会导致分组传输时延高的缺点,从而造成网络效率低下的问题。
Cluster-Tree算法是在树型路由算法技术基础上,由协调器作为中心点生成簇树状网络拓扑结构,通过判断目的节点是否是具有转发功能设备的下属节点,以决定是否进行数据包的转发,最终达到分层遍历查找目的节点的结果叫这种算法可以大大减少信息冗余度和源节点的发送功率,对于数据高内聚非常有利,也在一定程度上弥补了树型结构的缺点。
ZigBee网络节点硬件设计
2.1节点总体硬件设计
节点按功能共可分为CC2430模块、电源模块和天线模块三大模块。其总体硬件设计如图1所示。
2.2CC2430模块
CC2430具有增强性能的8051MCU,8KBRAM等,其增强的8051MCU核的性能是工业标准8051核性能的8倍叫CC2430/CC2431还具备直接存储器定址(DMA)功能,它能够被用于减轻8051微控制器内核对数据搬移,因此提高了芯片整体的性能、可编程看门狗定时器、AES-128安全协处理器、多达8输入的8〜14位ADC、USART、睡眠模式定时、上电复位、掉电检测电路(BrownOutDetection)等,CC2430有两个晶振,分别是32MHz晶振和32.768kHz晶振。
2.3天线模块
CC2430发送数据时,信号从差分射频端口RF_P、RF_N经巴伦电路变为单端信号,由RXTX_SWITCH信号控制2个逻辑开关,选通功率放大电路(PA),放大后的信号从天线发射出去。接收信号时,在RXTX_SWITCH信号控制下,从天线接收的信号经低噪声放大电路(LNA)放大,巴伦电路转换,由RF_P、RF_N端口接收。天线模块电路图如图2所示。2.4电源模块
电源模块主要是由TPS79533低压稳压器输出3.3V电压,其输入电压范围是2.7〜5.5V,并具有较高的电源抑制比、超低噪声、较好的电压线性和负载瞬态效应以及较小的电压漂移。可以将5V的电源通过DC-DC变换器得到3.3V的工作电压,电源电路如图3所示。
图2天线模块电路
图3电源模块电路
ZigBee网络节点软件设计3.1ZigBee协议栈
ZigBee无线网络的实现,是建立在ZigBee协议栈[5,6]的基础上的,协议栈采用分层的结构,协议分层的目的是为了使各层相对独立,每一层都提供一些服务,服务由协议定义,它们向高层提供服务,并由低层提供服务。
在ZigBee协议栈中,物理层、MAC层位于最低层,且与硬件相关;网络层、安全层、应用框架层以及安全层建立在物理层和MAC层之上,并且完全与硬件无关。分层的结构脉络清晰、一目了然,给设计和调试带来极大的方便。
Z-Stack采用了操作系统的思想来构建,采用事件轮循机制[7],当各层初始化之后,系统进入低功耗模式,事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。如果同时有几个事件发生,先判断优先级,再逐次处理事件。
3.2协调器网络的建立
在ZigBee网络中,网络协调器具有建立一个网络、维护邻居设备表、对逻辑网络地址进行分配、允许设备MAC层/应用层的连接或断开网络的功能,网络协调器在进行一些初始化之后调用aplFormNetwork()来建立网络。协调器通过扫描一个空信道来建立一个新的网络,然后选择一个随机的
PANID并开始监听此信道冏。同时协调器还有一个目前连接设备的列表,以支持其他设备加入网络。网络建立程序如下:
voidmain(void){halInit();//硬件初始化aplInit();//协议栈初始化aplFormNetwork();//建立网络while(apsBusy()){apsFSM();}//等待网络相应while(1)
{apsFSM();//执行协议栈
}
}
3.3节点加入网络
当一个网络建立成功以后,便要考虑路由节点和RFD节点如何加入到网络中去。节点通过调用aplJoinNetword()函数加入到协调器建立的网络当中。通过扫描信道找到协调器并进一步申请加入网络,获取协调器的地址,同时将自己的地址发送给协调器。网络加入成功以后,网络节点则进入休眠状态,知道有命令或者数据发送时才被唤醒。网络加入的程序如下:
voidmain(void){
halInit();//硬件初始化
aplInit();//协议栈初始化
do{
aplJoinNetwork();//加入网络while(apsBusy()){apsFSM();}//等待网络格式化}while(aplGetStatus()=WXLPAN_STATUS_SUCCESS);while(1){apsFSM();}//执行协议栈
3.4数据发送与接收
在ZigBee协议栈中进行数据发送可以调用AF-DataRequest函数来实现,该函数会调用协议栈里面与硬件相关的函数最终将数据通过天线发送出去。以下是AF_DataRequest数据发送程序:
afStatus_tAF_DataRequest(afAddrType_t*dstAddr,
endPointDesc_t*srcEP,,
uintl6cID,
uint16len,
uint8*buf,
uint8*transID,
uint8options,
uint8radius)
上面的程序中:afAddrType_t*dstAddr为包含了目的节点的网络地址以及发送数据的格式;endPointDesc_t*srcEP为使用网络地址来区分不同的节点,用端口号来区分统一节点的不同端口;uint16cID为描述命令号,不同的命令号代表不同的控制命令,用来表示不同的控制操作;uint16len为表示发送数据的长度;uint8*buf为指向发送数据缓冲区的指针;uint8*transID为指向发送序号的指针,每次发送数据后就会自动加1,配合接收端计算丢包率;uint8options为默认取AF_DISCV_ROUTE;uint8radius为默认取AF_DEFAULT_RADIUSo
在发送数据之前,接收的设备必须处于工作状态,否则将会出现“丢包”上层使用NLME-SYNC.request原语初始化设备,打开其接收机,该原语将引起网络层使用MLME-POLL.request原语对其父设备进行轮询図。ZigBee协调器或路由器的网络层必须在最大程度上保证任何时间接收机总是处于接收状态。
当协调器接收到节点发送来的数据后,操作系统会将该数据封装成一个消息,然后放入消息队列中,每个消息都有自己的消息ID,表示接收到新数据的消息的ID是AF_INCOMING_MSG_CMD[10],其宏定义为:
#defineAF_INCOMING_MSG_CMD0x1A
在协调器中相应代码如下:
MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);
while(MSGpkt)
{
switch(MSGpkt->hdr.event)
{
caseAF_INCOMING_MSG_CMD;
GenericApp_MessageMSGCB(MSGpkt);
break;
}
}
首先使用osal_msg_receive函数从消息队列中接收一个消息,然后使用switch-case语句udixiaoxileixing进行判断(判断消息ID),如果消息ID是AF_INCOMING_MSG_CMD贝丫进行相应的数据处理,进而完成数据的接收。
4测试结果
测试釆用的软件是PacketSniffer,PacketSniffer是一款专门的协议分析软件,可以对各层协议上的信息包进行分析和解码;显示出错的包以及接入错误;指示触发包;在接收和注册过程中可连续显示包,可以利用PacketSniffer分析ZigBee建立网络,加入网络,发送数据,接收数据的过程[11]oIEEE8022.15.4/ZigBee协议下协调器的组网过程如图4所示。
图4协调器组网
从图4中显示的数据包数据中,第2行到第7行是建立一个网络的过程,在这里可以看出在网络层管理实体一旦选择了一个PAN标识符,就会立刻选择一个0x0000的16位网络地址,并且设置MAC层的macShortAddressPIB属性,使其等于所选择的网络地址。
第8行的源地址是路由器的物理地址0x1716151413120030,它的PANID没有确定为0xFFFFF,这时的路由器还没有加入网络,所以还没有网络地址,目的地址为协调器的网络地址0x0000,它的PANID为0x0022;它的命令是联合方式加入请求。该行表示的意思是向协调器发送联合方式加入请求,发送完成后将得到一个应答。
节点在等待应答并回应后,就开始加入建立好的无线网络,其加入网络的过程如图5所示。
图5节点加入网络
从图中可见,已成功组网的协调器在收到应答以后,节点开始加入网络。与此同时,协调器开始为路由器分配网络地址,路由器分配到的网络地址(SourceAddress)为0x0001。这样就完成了节点加入网络的过程,并分配了各自的网络地址,从而也完成了无线网络的组建和节点加入网络的过程。
5结语
本系统采用ZigBee技术设计无线网络节点,其设计思想简单,成本较低并且有着很好的扩展性,可以适应不同环境对系统的要求,与此同时,通过通用串口搭载不同的传感器又可以轻而易举地实现对各种信息的采集和传输工作,在短距离无线传感网络的应用上有着明显的优势,相信日后的发展前景会更好,给人们日常生活工作带来更大的便利。