无线传感器网络(Wireless Sensor Network,WSN)是由部署在监测区域内大量廉价微型传感器节点组成,通过无线通信方式形成多跳、自组织网络系统,其目的是协作地感知、采集和处理网络覆盖区域中感知对象的信息,并发送给观察者。
目前能够用于短距离无线传感网络的通信技术主要有5种:Wi-Fi技术、超宽带通信(Ultra Wideband,UWB)技术、近场通信(Near Field Communication,NFC)技术、蓝牙以及ZigBee技术。其中,ZigBee是基于IEEE802.15.4的一种新兴短距离无线通信技术,其特点是低功耗、低速率、低复杂度、低成本等。这些特点决定了ZigBee技术非常适合应用于无线传感网络中,因此ZigBee技术被认为是最有可能应用于工业监控、传感器网络、家庭监控、安全监控等领域的无线技术。在ZigBee协议的制定中,IEEE802.15.4无线标准定义了物理层(Physical Layer,PHY)和介质访问控制层(Medium Access Control Sub-Layer,MAC),而ZigBee协议栈的网络层和应用层是由ZigBee联盟制定的。
支持ZigBee协议的无线通信芯片主要有TI公司推出的CC2420、CC2430、CC2530以及Freescale半导体公司推出的MC13191、MC13192及MC13 193等芯片。CC2430是世界上首个单芯片ZigBee解决方案,除了保持CC2420所包括的优良射频性能之外,其内部还集成了一个增强型8051内核,这使得CC2430成为市面上最具有竞争力的ZigBee无线收发芯片。
文中设计了基于ZigBee协议栈的无线传感网络,该系统包括一个协调器和四个终端传感节点。以采集温度信息为例,实现了无线通信功能。协调器节点通过RS232串口,将收到的数据发送给PC机进行处理及显示。
1 无线传感网络的结构
1.1 网络体系结构
无线传感网路中的基本单元是传感器节点,根据其在网络中的所承担的任务不同,传感器节点可以分为3类:协调器、路由器和传感器节点。在网络中,协调器负责建立网络,允许路由器和传感器节点与其绑定,并接收路由器和传感器节点发送来的数据信息,以及传送给PC机进行处理、存储等;传感器节点负责感知被测对象的物理信息,并将其无线发射给协调器;但如果传感器节点距离协调器太远,则需要路由器在中间进行中继。传感网络的拓扑结构一般有3种:星型网络、树型网络和网状网络。
星型拓扑结构具有组网简单、低成本和低功耗等优点,但网络覆盖范围有限;树型网络可以扩大网络覆盖范围,传感器节点传感器所采集的数据可以通过路由器中继的方式到达协调器;网状网络具有高可靠性和覆盖范围大等优点,但功耗大、管理复杂。在实际应用,要根据实际需求来选择网络拓扑结构。
1.2 传感器节点的结构
无线传感网络中的节点按照其所具备的功能来分,可分为全功能设备(Full Funclion Device,FFD)和精简功能设备(Reduced Function Device,RFD)。网络协调器和路由器必须由FFD来承担,传感器节点一般由RFD来实现。但不管是FFD还是RFD,其硬件的基本结构基本上相同,一般包括传感器模块、微处理器模块、无线通信模块和能量供应模块4个基本部分,如图1所示。传感器模块用于感知被测对象的物理信息,并将其转换为电信号;微处理器模块负责处理及存储数据;无线通信模块负责发射与接收无线电信息;能量供应模块为整个系统提供能量。此外,传感器节点还可能包括一些辅助单位,如定位模块、自供电模块等。与传感器节点和路由器相比,协调器一般需要和PC机相连,所以其带有RS232接口或USB接口等。
图1 传感器节点的结构
2 系统软件设计
TI公司推出的ZigBee协议栈是基于优先级的轮转查询式操作系统,它是由称为层的模块组成,每一层为其上一层提供特定的服务。Zig Bee协议栈为各个层均分配的不同的任务编号,每一个任务中又包含若干个事件。对于开发者来说,一般只需关注应用层函数的设计即可。当然,若果硬件电路不同,则其硬件抽象层函数也是不同的。文中所采用的硬件电路为无线龙公司生产的CC2430无线通信模块,共包括4个传感器节点和一个协调器。每个传感器节点为一个CC2430基本模块和一个电池板;协调器模块为一个CC2430基本模块和一个扩展板,扩展板上带有RS232串口,可用于和PC机进行通信。
2.1 协调器启动及建立网络
无线传感网络的建立是由网络协调器来完成的。协调器节点启动之后,首先完成系统的初始化,然后进入操作系统。在系统的初始化中,包括初始化系统时钟、检测芯片电压、中断系统、flash存储器等,其中比较重要的是初始化端口描述符。两个物理无线收发模块的通信是通过两个设备中编号相同的端点来实现的,这要求协调器所初始化的端点属性要与在传感器节点中所初始化的端点属性相匹配。
进入操作系统以后,首先进入的是应用层任务函数,因为在应用中设置了进入事件。通过按键S1来设置其为协调器,并开始建立网络。将设备设置为协调器之后,通过zb_StartRequest()函数调用ZDO层初始化设备函数ZDOInitDevice()。在该函数中,通过ZDO层中的网络初始化函数ZDApp_NetworhInit()设置网络初始化事件,送给启动设备函数ZDO_StartDevice()处理。在该函数中,调用了网络层的网络形成请求函数NLME_NetworkFormationRequest()来形成网络。由于ZigBee协议栈是半开源的,因此看不到该函数的内部程序。当ZDO层收到网络形成确认信息之后,则设置网络启动事件,将设备的状态改为启动状态。协调器建立网络的过程如图2所示。
图2 协调器启动及建立网络
2.2 传感器节点启动及加入网络
对于传感器节点来说,启动后首先要完成的也是设备的初始化。在本实验中,传感器节点向协调器发送本身的温度信息,所以在传感器节点中所初始化的端口的属性应为输出,而协调器中所定义的端口的属性应为输入。当初始化之后,进入操作系统执行应用层任务中的进入事件。这里直接将设备设置为传感器节点。
传感器节点启动后,开始初始化网络。在ZDO层调用网络层的网络发现函数NLME_NetworkDiscoveryRequest(),尝试发现是否已经存在的网络可以加入。当发现协调器所建立的网络时,传感器节点的ZDO层会收到网络发现确认信息。这时,传感器节点通过调用网络层的网络加入请求函数NLME_JionRequest(),向协调器发送加入网络请求。如果协调器允许其他节点加入网络,则该传感器节点会接收到协调器发送来的加入确认信息。这里的网络发现函数NLME_NetworkDiscoveryRequest()和网络加入请求函数NLME_JionRequest(),与协调器中所调用的网络形成函数NLME NetworkFormationReouest()一样,均为ZigBee协议栈所封装起来的函数,只能由开发人员编程时调用,不能看到其内部程序。传感器节点加入网络的流程如图3所示。
图3 传感器节点启动及加入网络
2.3 传感器节点与协调器的绑定
为了让传感器节点与协调器能相互传送数据,两者之间必须建立绑定关系。绑定是两个(或多个)应用设备之间信息传输的控制机制,在ZigBee2006及以后的协议栈中,所有的设备都必须执行绑定机制。
协调器通过执行zb_AllowBind()函数,开启允许绑定功能。在该函数中,可以设置允许绑定的时间,即在某一段时间内,协调器接收其他设备发来的绑定请求,超过这段时间,则关闭该功能。传感器节点通过执行绑定设备函数zb_BindDevice(),向协调器发送绑定请求。协调器接收到传感器节点发送来的绑定请求,并进行解析,绑定请求信息中包含了传感器节点中的端点信息,然后协调器在自身所注册过的端点中寻找与之相匹配的端点。找到之后,则处理绑定请求信息,并向传感器节点发送绑定响应信息。传感器节点接收到绑定响应信息之后,通过调用应用支持子层的绑定请求函数APSME_BindRequest()来建立绑定表,并将向自己的应用层发送绑定确认信息。传感器节点与协调器建立绑定的流程如图4所示。
图4 传感器节点与协调器绑定
2.4 传感器节点向协调器传送数据
当传感器节点向自己的应用层发送绑定确认信息之后,就调用发送报告函数myApp_StartReporting()向协调器发送数据信息。CC2430内部有一温度传感器,可测量的温度范围是-20~80℃,虽然所采集的结果与实际温度不太相符合(比实际值偏高),但对于构建无线传感器网络,并无太大影响。所以在本实验中,传感器节点所发送的就是其自身内部的温度信息。由传感器所得来的温度信息为模拟信号,需要经过A/D转换为数字信号。CC2430内部集成了多路A/D转换,这里不再详述。
当协调器接收到温度信息之后,对其进行解析,得到温度信息。通过调用串口通信程序,将数据发送给PC机进行显示。串口通信程序的设计,这里也不再详述。
3 实验
当建立绑定关系之后,传感器节点就可以向协调器发送数据。将协调器程序下载到带有扩展板的CC2430模块中,然后将传感器节点程序分别下载到4个带有电池板的CC2430模块中。协调器由3节5号电池供电,并通过RS232串口与PC机相连。在PC机上打开串口调试工具,并设置好端口号、传输速率及校验位等。端口号的设置可通过PC机查看,而传输速率及校验位等与串口通信程序的设计有关,这里选择波特率为384 000,暂时没有设置校验位。每个传感器节点均有2节7号电池供电。
首先打开带有扩展板的CC2430电源,按S1键将其设置成为协调器。然后再次按下S1键,即协调器开启允许绑定功能。此时依次打开4个传感器节点,它们会相继加入网络。在实验中,通过LED的亮灭来观察网络启动及节点加入的过程。
网络加入完毕之后,在PC机的串口调试界面中,能看到协调器所接收到得温度信息,并且协调器为4个传感器节点分别分配了16位的网络地址,如图5所示。
图5 实验数据
4 结论
本实验实现了基于ZigBee协议栈的无线传感器网络的开发。如果在PC机上采用LabVIEW软件对串口数据进行处理,则可以实现数据的实时监测与报警,以及数据的存储与回调等功能。