基于TinyOS的通用无线传感节点设计
2020-06-15徐振峰
丁 健,徐振峰
合肥学院先进制造工程学院,安徽合肥,230601
自2009年温家宝总理提出“感知中国”以来,物联网在国内受到了极大关注,并被列为国家五大新兴战略性产业之一[1]。虽然目前尚未有被普遍接受的物联网定义,但是关于物联网系统的架构已经有了比较统一的认识,即物联网系统包括三次架构:感知层、网络层和应用层,其中感知层是物联网的底层部分,也是物-物相连实现的先决条件[2]。在感知层中,无线传感器网络是一种非常重要的实现方式。无线传感器网络可以感知物理世界中多种物理量及事件,并实现它们的短距离无线传输。根据不同的分类依据,无线传感器网络可以分为不同类型。从操作系统的角度来看,无线传感器网络的应用开发主要采用的操作系统包括TinyOS、Mantis OS、SOS以及ZigBee协议栈等[3],其中应用最多的是TinyOS操作系统和ZigBee协议栈。在国内,基于ZigBee协议栈开发的各种无线传感器网络系统只能工作于2.4 GHz频段。相比之下,基于TinyOS操作系统开发的无线传感器网络系统不仅可以工作于2.4 GHz频段,还可以工作于433 MHz频段。由于较低的工作频段具有较好的穿透性和较远的传输距离,因此许多学者采用TinyOS操作系统,研究的无线传感器网络系统多工作于433 MHz频段。目前,基于TinyOS操作系统而开发的无线传感器网络广泛应用于智能家居[4]、农业环境监测[5-6]、智能交通[7]等许多领域。为了方便无线传感网的开发及其在物联网中的应用,本文开发了一种基于TinyOS操作系统的通用无线传感器网络节点。
1 TinyOS操作系统
TinyOS是加州大学伯克利分校开发的开放源代码操作系统,是专为嵌入式无线传感网络而设计的。TinyOS操作系统采用了组件式的编程方式,用户通过调用其中的各种组件来实现程序设计,主要组件包括主组件、应用组件、执行组件、感知组件、通信组件和硬件组件,TinyOS操作系统的体系架构如图1所示[3]。
图1 TinyOS操作系统的体系架构
图1的架构中,最上层为主组件,即Main组件。无线传感器节点上电之后,首先执行Main组件,该组件的功能是初始化硬件、启动任务调度器以及执行应用组件的初始化函数。每个TinyOS程序至少包含一个应用组件,即用户组件,其功能是通过接口调用下层组件提供的服务,以实现程序的功能要求,如数据采集、数据收发等。现有的TinyOS已经提供了通用组件和一些通信与数据采集等基础服务组件,从而把用户和底层硬件隔离开来。在此基础上,用户只需要编写自己的应用层组件即可,因此TinyOS程序设计的重点就是开发应用组件。
2 节点设计
2.1 节点架构
图1实际上给出了基于TinyOS操作系统的无线传感器网络节点的软件结构。因此,本节所要介绍的节点架构主要是节点的硬件架构。一个完整的无线传感器节点硬件应该包括微处理器、无线收发器、传感器和电源四大部分,其架构如图2所示。
图2 无线传感器节点的架构
无线传感器节点各个部分的功能描述如下:传感器模块负责把待测物理量转变为电信号,并经过放大和模数转换等把微弱的模拟电信号转变为数字信号。微处理器模块负责接收传感器模块发送的数字信号,然后进行信号处理与存储等,以及把相应的信号发送至无线收发模块。无线收发模块负责把从微处理器模块接收到的数据无线发送出去,以及接收其他无线节点发送过来的数据,并将其传送给微处理器模块。
2.2 硬件设计
为了便于连接不同的传感器模块,本文所设计的无线传感器节点并没有选择任何传感器模块,而是在微处理器的I/O端口中做出了预留,以便根据不同应用场合来选择合适的传感模块。在节点硬件设计中,选择了Chipcon公司生产的低功耗CC1000无线收发器件[8]。该器件的工作电压范围为2.3 V~3.6 V,工作频率在300 MHz~1 000 MHz之间。CC1000内部有36个8位的配置寄存器。它们用于设置CC1000的工作频段、输出功率等参数,例如,可以通过编程方式设置其工作在433 MHz频段,因此,CC1000是一款使用非常方便的无线收发器件。关于节点中的微处理器,选择了ATmega128单片机[9]。这是ATMEL公司8位系列单片机中配置最高的一款,其稳定性极高。ATmega128内部具有128 KB的Flash、4 KB的EEPROM和4 KB的SRAM存储器等。ATmega128具有53个可编程I/O引脚。这些资源足以满足一般功能应用。
无线收发芯片CC1000与ATmega128单片机的接口电路如图3所示。在该接口电路中,相关信号线可以分为三部分:DIO和DCLK为第一部分,其中DIO为系统正常工作时CC1000与微处理器之间的数据传输引脚,而DCLK为数据传输时提供同步时钟信号。PCLK、PDATA和PALE为第二部分,用于设置CC1000的不同模式等,其中,PDATA为编程信号传输引脚,在写命令下用于配置CC1000的工作模式,而在读命令下用于读取CC1000的状态至单片机;PCLK为PDATA引脚上的数据传输提供时钟信号;PALE为上述数据传输时的地址锁存信号端。RSSI和CHP_OUT为第三部分,其中RSSI用于把CC1000内部接收信号强度指示转换为模拟信号,并传输至单片机;CHP_OUT为频率锁定状态指示引脚,当PLL锁定时该信号呈现出逻辑高电平。
图3 CC1000与ATmega128的接口电路
有关CC1000无线收发部分的电路,参阅了器件datasheet说明书中所给出的具体电路,相关说明可参考器件datasheet,因此本文不再介绍。
在上述电路中,为了便于连接传感器元件,除了预留了大量普通I/O口之外,在ATmega128单片机上还预留了两个异步串行通信接口(USART0 和USART1)和两线接口TWI。另外,还有7路ADC和8个外部中断源接口。这些预留接口资源可以连接多个传感器元件及外部设备等,因此足以满足一般工程设计的需求。
2.3 软件设计
TinyOS操作系统支持Mica系列的硬件节点,其中Mica2节点采用了CC1000无线收发芯片,因此TinyOS操作系统在其硬件抽象层中提供了CC1000的组件模块。根据图1所给出的操作系统架构,在应用组件中,调用AMSend.send函数可以实现数据的无线发送,其实质是该函数调用了其下层组件DirectAMSenderC中的Send接口,而该接口正是AMQueueImplP模块提供的Send接口。在该模块中对数据包进一步处理,将该数据包存入发送队列。在该模块的配件AMQueueP中将AMSend接口配线到了ActiveMessageC组件上,ActiveMessageC组件属于中间件,将上层连接转接到底层模块上,其好处是对上层影藏了底层具体实现。在本节点电路中,ActiveMessageC组件被连接到CC1000ActiveMessageP组件中。在这个组件中,可以设置数据包头信息、设置目标PAN以及添加源地址信息,并申请串口资源,然后调用SubSend.send接口发送数据。数据发送后,由底向上逐层触发相关的完成(Done)事件,从而完成数据无线发送,并进行相应的后续任务的处理。由于TinyOS操作系统提供了CC1000相关的底层组件模块,其操作主要表现在应用层,因此无需关注底层组件,即可完成无线发送任务。
3 测试实验
传感器节点的测试分为三个部分:即数据传输可靠性测试、通信距离测试和功耗测试。首先,选择了两个传感器节点,其中一个节点通过预留I/O接口连接了SHT11温湿度传感器,周期性读取温湿度数据。设置其采集周期为5分钟,采集完毕后,立即将数据无线发送出去。另一个传感器通过TTL转USB串口与PC连接。在串口调试工具中查看接收到数据。连续测量48小时,获得577组数据,无一丢失。图4是串口调试工具部分测试结果的截图。
图4 测试结果
在图4虚线框中,每一行有四个字节,其中前两字节是温度测量数据,后两个字节是相对湿度测量数据。为了方便在程序中处理小数,上述温度和相对湿度的测量值均扩大了10倍,且以十六进制表示。为了检验测量结果的正确性,同时使用RC-4HA型号的温湿度自动记录仪测量了周围环境的温湿度。使用温度计测量和使用无线传感器测量的结果如表1所示。可见,所设计的无线温湿度传感器的测量结果是正确的,能够满足一般应用要求。
表1 温湿度测量值的对比
图4中的测量值是使用SHT11传感器的温湿度计算公式[10]对其直接测量值进行计算后的结果。SHT11传感器的温湿度计算公式如下:
Tc=d1+d2×Nt
(1)
RHlinear=c1+c2×Nrh+c3×Nrh2
(2)
RHtrue=(Tc-25)×(t1+t2×Nrh)+RHlinear
(3)
其中,Tc为温度;Nt为传感器的直接温度测量值;RHlinear为进行非线性补偿后的湿度值;Nrh为传感器的直接湿度测量值;RHtrue为补偿后的相对湿度;d1和d2为温度计算系数;c1、c2、c3、t1和t2是相对湿度的计算系数。相关系数取值见表 2。
传感器节点的无线通信距离与其功率有关。在CC1000的功率控制组件CC1000ControlP.nc中将其功率设置为最大值(10 dBm)。一个传感器周期性无线发送数据,另一个节点用于接收数据。在接收节点上,通过LED灯的闪烁以指示无线通信状态是否正常。在校园中空旷地带进行了测试。结果显示,无线通信距离为250 m左右时,节点仍能稳定地接收数据。但当通信距离达到300 m左右时,出现了明显的数据丢包现象。
表2 温湿度校正系数
对于无线传感器节点来说,通常采用电池供电方式,因此测试其功耗是必要的。由于工作电压的确定性,因此其功耗一般通过工作电流的大小来衡量。为了降低其功耗,在TinyOS程序设计过程中,调用了低功耗侦听的组件,即当节点不发送数据时,让其处于低功耗模式。因此,在本实验中测试了节点处于低功耗模式和非低功耗模式两种状态下的工作电流。多次测量结果显示,节点处于低功耗模式下的工作电流约为3 mA,而在非低功耗模式状态下的工作电流约为32 mA。
4 结 论
采用ATmega128单片机和CC1000无线收发芯片,设计了基于TinyOS操作系统的通用无线传感器节点。从数据传输可靠性测试、通信距离测试和功耗测试三个方面对节点的性能进行了验证,相关实验结果为传感器节点的应用提供了参考和依据,后期将在此基础上拓展该无线传感器节点的应用领域。