首页 理论教育 物联网实验教程协议通信实验

物联网实验教程协议通信实验

时间:2023-10-21 理论教育 版权反馈
【摘要】:该芯片是首款符合2.4GHzIEEE 802.15.4标准的射频收发器,包括众多额外功能,是第一款适用于ZigBee产品的RF器件。CC2420的选择性和敏感性指数超过了IEEE802.15.4标准的要求,可确保短距离通信的有效性和可靠性。其MAC层和物理层协议都符合IEEE 802.15.4规范,工作于免执照的2.4GHz频段。Ieee154Send接口提供符合IEEE 802.15.4协议的发送函数。

物联网实验教程协议通信实验

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部分内容分别进行介绍。

978-7-111-34147-5-Chapter04-48.jpg

图4-10 IEEE 802.15.4协议点对点通信实验主要组件关系

(1)程序框架的建立以及计数器的使用

正如上面所述的TinyOS的程序构成方式,一个最简单的TinyOS程序通常包括两个源程序,其分别对应于模块(module)和配置(configure)。对于本实验的程序,不妨命名为SensingToRadioAppC.nc和SensingToRadioC.nc。SensingToRadioAppC.nc为配置文件,主要描述了SensingToRadioC.nc中模块如何与系统模块进行连接;SensingToRadioC.nc为模块文件,包括对系统模块的调用和对系统事件的响应。

计数器是TinyOS最重要的基本组件之一,其基本的函数和事件如下:

978-7-111-34147-5-Chapter04-49.jpg

其中,<precision_tag>表示计数器的计数精度,可选择<TMilli>,<T32khz>以及<TMicro>,它们分别表示计数器一秒钟计数1024,32768和1048576次。Timer接口提供了计数器的两种启动方式startPeriodic和startOneShot。使用startPeriodic启动计数器时,计数器到达溢出值之后,触发fired事件,并立即置零重新开始下一轮计数;而使用startOneShot启动计数器时,计数器只溢出一次。fired事件为计数器溢出时触发的事件,用户可以在fired事件的相应函数中编写自己要执行的代码。

基于上面的介绍,分别建立如下两个文件。

SensingToRadioAppC.nc:

978-7-111-34147-5-Chapter04-50.jpg

978-7-111-34147-5-Chapter04-51.jpg

SensingToRadioC.nc:

978-7-111-34147-5-Chapter04-52.jpg

SensingToRadioAppC.nc文件包含了配置信息,主要是将程序的启动、LED、计数器与相应组件的接口进行连接。SensingToRadioC.nc文件包含了对接口函数的调用和对事件的响应,主要是在系统启动之后启动计数器,然后在计数器溢出时改变LED的状态,从而实现定时闪烁的功能。另外,上述两个文件均包含了定时器周期的定义头文件SensingTo Radio.h,其内容如下:

978-7-111-34147-5-Chapter04-53.jpg

(2)IEEE 802.15.4协议点对点通信

实现IEEE 802.15.4协议点对点通信主要用到Ieee154Send,Receive以及CC2420PacketBody3个接口,分别负责数据的发送、接收和数据包解析。Ieee154Send接口提供符合IEEE 802.15.4协议的发送函数。其主要函数和事件如下:

978-7-111-34147-5-Chapter04-54.jpg

其中,send发送一个数据包,3个参数分别为地址、数据包指针和数据包长度;getPayload提供从数据包里获得的负载指针,以便用户加入自己要发送的内容;sendDone事件当发送完毕之后被触发。

Receive接口提供如下数据包的接收函数。

978-7-111-34147-5-Chapter04-55.jpg

receive函数提供接收到的数据包指针msg、负载指针payload和数据包长度len。

CC2420PacketBody接口提供从IEEE 802.15.4协议数据包中获得的包头以及metedata的函数:

978-7-111-34147-5-Chapter04-56.jpg

下面介绍如何使用上述接口进行IEEE802.15.4协议点对点通信。首先,定义无线数据报的格式,以及无线信道的标识。按如下内容修改SensingToRadio.h:

978-7-111-34147-5-Chapter04-57.jpg

978-7-111-34147-5-Chapter04-58.jpg

然后,要在SensingToRadioAppC.nc中将无线发送的相关接口连接到相应的组件上,添加如下代码:

978-7-111-34147-5-Chapter04-59.jpg

最后,在SensingToRadioC.nc中编写数据发送以及接收的响应代码。首先,要添加射频启动的控制,使用SplitControl方式启动:

978-7-111-34147-5-Chapter04-60.jpg

978-7-111-34147-5-Chapter04-61.jpg

由于数据的发送为一个相对独立的过程,并且可以与主程序异步并发的执行,将数据的发送作为一个task来执行。每当计数器溢出时,post数据发送的task:

978-7-111-34147-5-Chapter04-62.jpg

RadioSend的实现如下:

978-7-111-34147-5-Chapter04-63.jpg(www.xing528.com)

发送过程分为3步:首先,指向获得待发送数据包的指针;然后,通过这个指针将待发送的数据写入数据包中;最后,调用发送函数进行数据发送。其中,radioBusy为一个布尔型控制变量,当其为TRUE时,表明正在执行发送的task。在发送之前将其置为TRUE,而在发送完毕将其改为FALSE:

978-7-111-34147-5-Chapter04-64.jpg

节点接收到数据包之后,触发receive事件,在事件响应函数中,将收到的数据包的包头和负载保存到本地的缓冲区ieee154Header和ieee154Payload中备用:

978-7-111-34147-5-Chapter04-65.jpg

ieee154Header和ieee154Payload的声明如下:

978-7-111-34147-5-Chapter04-66.jpg

(3)串口数据包的发送

串口数据包的发送跟无线数据包的发送类似,由于没有接收,因此只用到接口AMSend:

978-7-111-34147-5-Chapter04-67.jpg

各个参数与Ieee154Send接口类似,这里不再赘述。

要把收到的无线数据包传到串口,首先还是需要定义串口数据包格式,在SensingToRadio.h中添加:

978-7-111-34147-5-Chapter04-68.jpg

然后,在SensingToRadioAppC.nc中添加串口数据发送的相应接口连接关系:

978-7-111-34147-5-Chapter04-69.jpg

串口的启动方式跟无线数据收发类似,也是需要使用Splitcontrol,数据的发送略有不同:

978-7-111-34147-5-Chapter04-70.jpg

978-7-111-34147-5-Chapter04-71.jpg

上述串口发送的task在收到无线数据包的receive事件响应函数里进行post,即在闪灯的代码后面添加:

978-7-111-34147-5-Chapter04-72.jpg

(4)光传感器数据的获取

本实验使用的IOT-NODE24节点上提供了光传感器组件PhotoC。该组件提供了Read接口,通过该接口可以直接获得光传感器的传感值。接口定义如下:

978-7-111-34147-5-Chapter04-73.jpg

Read接口提供了一个方法和一个事件。通过调用read方法,可以发起一个读传感器数据的操作,当数据获取完毕之后,readDone事件被触发,在事件响应函数里可以对获得的传感器数据进行处理。另外,参数<val_t>表示读取数据的类型,可以为<uint8_t>、<uint16_t>等。

要从传感器获得数据,首先需要连接提供Read的组件,在SensingToRadioAppC.nc中添加:

978-7-111-34147-5-Chapter04-74.jpg

修改计数器溢出事件响应函数,改为读传感器数据。

978-7-111-34147-5-Chapter04-75.jpg

然后在readDone事件处理函数里保存获得的传感器数据,并post无线数据发送过程:

978-7-111-34147-5-Chapter04-76.jpg

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协议点对点通信实验串口数据包格式

978-7-111-34147-5-Chapter04-77.jpg

(续)

978-7-111-34147-5-Chapter04-78.jpg

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.

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

我要反馈