1.实验目的
本实验介绍了使用TinyOS实现一个基于IEEE 802.15.4协议的物联网节点的点到点通信程序。通过实验,使读者初步掌握TinyOS编程的方法和步骤,并能够使用TinyOS开发简单实用的物联网应用程序。
2.实验设备
(1)硬件
● 2.4GHz节点(IOT-NODE24)2个。
● JTAG编程器1个。
● PC(含串口)1台。
(2)软件
● TinyOS2.x。
● AVRStudio4.18。
● 串口调试工具。
3.实验原理
本实验的硬件平台是2.4GHz无线传感器网络节点硬件(IOT-NODE24),其核心芯片是TI-Chipcon公司推出的CC2420。该芯片是首款符合2.4GHzIEEE 802.15.4标准的射频收发器,包括众多额外功能,是第一款适用于ZigBee产品的RF器件。它基于Chipcon公司的SmartRF 03技术,以0.18μmCMOS工艺制成,只需极少外部元器件,性能稳定,成本低。CC2420的选择性和敏感性指数超过了IEEE802.15.4标准的要求,可确保短距离通信的有效性和可靠性。利用此芯片开发的无线通信设备支持的数据传输速率高达250kbit/s,可以实现多点对多点的快速组网。其MAC层和物理层协议都符合IEEE 802.15.4规范,工作于免执照的2.4GHz频段。此芯片采用低电压(2.1~3.6V)供电,同时支持休眠模式,且从休眠模式被激活的时延短,因此可以分配更多的时间处于休眠状态,而处于休眠状态时芯片的能耗极低,从而可大大减少能耗,适于电池长期供电。
此外,CC2420芯片还具有硬件加密、安全可靠、组网灵活、抗毁性强等特点,为家庭自动控制、工业监控、传感网络、消费电子、智能玩具等提供了理想的解决方案。此外,芯片已经集成了CRC和数据完整性检查等功能,这就相对减少了程序员编程的工作量,而且硬件处理速度一般都快于软件处理速度,因此加快了通信的速度,减少了能量消耗。同时,芯片还采用了CSMA/CA技术来避免数据发送时的竞争和冲突,减少了不必要的能量消耗。
在软件平台方面,采用了研究领域使用较多的TinyOS系统,它对CC2420也有着较好的支持。本实验基于TinyOS实现一个无线传感器网络节点之间的点到点通信程序。每个节点的程序功能包括:从节点上的光传感器获得传感器数据,然后建立数据包并将其广播出去;同时,当节点收到数据包时,将数据包通过串口传到PC上。
为了使实验过程清晰,并且便于理解,实验内容分为4部分:程序框架的建立以及计数器的使用,IEEE802.15.4协议点对点通信,串口数据包的发送,光传感器数据的获取(各主要组件关系如图4-10所示)。下面对这4部分内容分别进行介绍。
图4-10 IEEE 802.15.4协议点对点通信实验主要组件关系
(1)程序框架的建立以及计数器的使用
正如上面所述的TinyOS的程序构成方式,一个最简单的TinyOS程序通常包括两个源程序,其分别对应于模块(module)和配置(configure)。对于本实验的程序,不妨命名为SensingToRadioAppC.nc和SensingToRadioC.nc。SensingToRadioAppC.nc为配置文件,主要描述了SensingToRadioC.nc中模块如何与系统模块进行连接;SensingToRadioC.nc为模块文件,包括对系统模块的调用和对系统事件的响应。
计数器是TinyOS最重要的基本组件之一,其基本的函数和事件如下:
其中,<precision_tag>表示计数器的计数精度,可选择<TMilli>,<T32khz>以及<TMicro>,它们分别表示计数器一秒钟计数1024,32768和1048576次。Timer接口提供了计数器的两种启动方式startPeriodic和startOneShot。使用startPeriodic启动计数器时,计数器到达溢出值之后,触发fired事件,并立即置零重新开始下一轮计数;而使用startOneShot启动计数器时,计数器只溢出一次。fired事件为计数器溢出时触发的事件,用户可以在fired事件的相应函数中编写自己要执行的代码。
基于上面的介绍,分别建立如下两个文件。
SensingToRadioAppC.nc:
SensingToRadioC.nc:
SensingToRadioAppC.nc文件包含了配置信息,主要是将程序的启动、LED、计数器与相应组件的接口进行连接。SensingToRadioC.nc文件包含了对接口函数的调用和对事件的响应,主要是在系统启动之后启动计数器,然后在计数器溢出时改变LED的状态,从而实现定时闪烁的功能。另外,上述两个文件均包含了定时器周期的定义头文件SensingTo Radio.h,其内容如下:
(2)IEEE 802.15.4协议点对点通信
实现IEEE 802.15.4协议点对点通信主要用到Ieee154Send,Receive以及CC2420PacketBody3个接口,分别负责数据的发送、接收和数据包解析。Ieee154Send接口提供符合IEEE 802.15.4协议的发送函数。其主要函数和事件如下:
其中,send发送一个数据包,3个参数分别为地址、数据包指针和数据包长度;getPayload提供从数据包里获得的负载指针,以便用户加入自己要发送的内容;sendDone事件当发送完毕之后被触发。
Receive接口提供如下数据包的接收函数。
receive函数提供接收到的数据包指针msg、负载指针payload和数据包长度len。
CC2420PacketBody接口提供从IEEE 802.15.4协议数据包中获得的包头以及metedata的函数:
下面介绍如何使用上述接口进行IEEE802.15.4协议点对点通信。首先,定义无线数据报的格式,以及无线信道的标识。按如下内容修改SensingToRadio.h:
然后,要在SensingToRadioAppC.nc中将无线发送的相关接口连接到相应的组件上,添加如下代码:
最后,在SensingToRadioC.nc中编写数据发送以及接收的响应代码。首先,要添加射频启动的控制,使用SplitControl方式启动:
由于数据的发送为一个相对独立的过程,并且可以与主程序异步并发的执行,将数据的发送作为一个task来执行。每当计数器溢出时,post数据发送的task:
RadioSend的实现如下:
(www.xing528.com)
发送过程分为3步:首先,指向获得待发送数据包的指针;然后,通过这个指针将待发送的数据写入数据包中;最后,调用发送函数进行数据发送。其中,radioBusy为一个布尔型控制变量,当其为TRUE时,表明正在执行发送的task。在发送之前将其置为TRUE,而在发送完毕将其改为FALSE:
节点接收到数据包之后,触发receive事件,在事件响应函数中,将收到的数据包的包头和负载保存到本地的缓冲区ieee154Header和ieee154Payload中备用:
ieee154Header和ieee154Payload的声明如下:
(3)串口数据包的发送
串口数据包的发送跟无线数据包的发送类似,由于没有接收,因此只用到接口AMSend:
各个参数与Ieee154Send接口类似,这里不再赘述。
要把收到的无线数据包传到串口,首先还是需要定义串口数据包格式,在SensingToRadio.h中添加:
然后,在SensingToRadioAppC.nc中添加串口数据发送的相应接口连接关系:
串口的启动方式跟无线数据收发类似,也是需要使用Splitcontrol,数据的发送略有不同:
上述串口发送的task在收到无线数据包的receive事件响应函数里进行post,即在闪灯的代码后面添加:
(4)光传感器数据的获取
本实验使用的IOT-NODE24节点上提供了光传感器组件PhotoC。该组件提供了Read接口,通过该接口可以直接获得光传感器的传感值。接口定义如下:
Read接口提供了一个方法和一个事件。通过调用read方法,可以发起一个读传感器数据的操作,当数据获取完毕之后,readDone事件被触发,在事件响应函数里可以对获得的传感器数据进行处理。另外,参数<val_t>表示读取数据的类型,可以为<uint8_t>、<uint16_t>等。
要从传感器获得数据,首先需要连接提供Read的组件,在SensingToRadioAppC.nc中添加:
修改计数器溢出事件响应函数,改为读传感器数据。
然后在readDone事件处理函数里保存获得的传感器数据,并post无线数据发送过程:
4.实验内容
阅读IEEE 802.15.4协议,学习协议的运行机制以及协议中各层的数据包格式。
初步掌握TinyOS程序设计方法,了解nesC的编程过程以及程序结构,能够编写简单的TinyOS程序
对IOT-NODE24节点编程、运行过程进行实际的操作,了解物联网前端感知节点的工作机理。
5.实验步骤
1)编写实验代码,启动Cygwin环境,在实验代码所在文件夹下使用“make micaz”进行编译。编译通过之后,在实验代码文件夹的“build\micaz”子文件夹下会生成main.ihex文件。
2)将节点与PC相连,并使用AvrStudio将步骤1)编译得到的ihex分别烧写到两个节点中去。
3)将其中一个节点与PC的串口相连。
4)启动串口调试助手,设置串口号为与节点连接的串口号,波特率为57600bit/s,校验位NONE,数据位8位,停止位1位。另外,为了分析接收到的数据,还需设置十六进制显示以及自动换行。
5)先打开未与PC连接的节点开关,此时节点红色灯闪烁,表明正在广播数据。再打开与PC连接的节点,绿色灯闪烁表明接收到数据。同时串口调试助手会显示收到的数据包。IEEE 802.15.4协议点对点通信实验串口数据包格式如表4-1所示。
表4-1 IEEE 802.15.4协议点对点通信实验串口数据包格式
(续)
6)用手遮住光传感器,观察数据包中IEEE802.15.4MAC层负载的光传感器数据(sensorData)位变化情况。
6.思考题
1)如果想降低传感器数据的采样频率为每5s一次,如何修改程序?
2)目前实验中两个节点都是同构的,即都进行数据的采集、发送和接收。如果想采用主从模式,即一个主节点采集传感器数据并通过广播数据包,一个从节点接收数据包并通过串口送到PC,如何修改程序?
3)如果增加节点的数目,与PC相连的节点收到的数据会有什么变化?
7.补充阅读
[1]Wireless Medium Access Control(MAC)and Physical Layer(PHY)Specifications for Low-Rate Wireless Personal Area Networks(LR-WPANs).IEEE 802.15.4.
[2]Philip Levis,David Gay TinyOS Programming.Cambridge:Cambridge University Press,2009.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。