孙鲁+籍芳+陈凯+杨志豪
摘 要:无线传感器网络作为物联网技术中非常重要的应用领域,目前受到越来越多的关注。采用TI公司的CC2538芯片和开源物联网操作系统Contiki,配合相应的传感器芯片,设计并实现了可以采集温度、湿度和照度的无线传感器网络,该无线传感器网络的部署为实验室的检测环境提供了更加方便精确的监控手段。
关键词:无线传感器网络;CC2538;Contiki;温湿度采集
中图分类号:TP393 文献标识码:A 文章编号:2095-1302(2015)03-00-03
0 引 言
近年来,随着物联网技术的逐渐成熟,物联网技术在环境监控、智慧城市、智能家居等领域的应用越来越广泛[1,2]。物联网技术应用中一个非常重要领域就是无线传感器网络(WSN) [3,4]。WSN通过部署一定数量由电池供电的传感器节点,组成无线通信网络,可以方便地采集周围环境的各种变化情况,例如温度、湿度、照度等信息,也可以采集人体的各项生理指标,例如心跳、血压等信息。WSN技术可以应用于环境监测、老人健康护理、停车场管理、交通管理、智能家居等很多领域。
本文中采用TI公司的CC2538芯片和开源物联网操作系统Contiki[5],设计了用于实验室测试环境的无线传感器网络。该网络通过在空间中布置传感器节点,采集各点的监控信息,并通过汇聚节点将数据上传至计算机,实现了监控数据的实时显示和数据库存储。
1 系统硬件设计
1.1 传感器节点
WSN中各传感器节点采用电池供电,为了增加电池寿命,在主芯片的选择上必须把耗电量作为一个重要的指标。传感器节点的硬件结构示意图如图1所示。传感器节点采用两节7号干电池作为电源,主芯片选用TI公司的CC2538芯片,该芯片为ARM Cortex-M3内核,带有I2C接口,可以满足与传感器通信和无线组网的要求。我们选用的CC2538芯片的片上FLASH为512 KB,RAM为32 KB,其内部集成了工作频率为2.4 GHz并符合IEEE802.15.4标准的RF收发器。在最省电的外部中断模式下,该芯片的供电电流仅为0.4 μA,满足低功耗的设计要求。
图1 传感器节点硬件结构
传感器节点中的温湿度传感器选用Sensirion公司的SHT21温湿度传感器芯片,该芯片在PCB板上占用的面积非常小,仅为3×3 mm2。缺省设置下温度测量分辨率为0.01?C,相对湿度测量分辨率为0.04% RH。该芯片在休眠状态下供电电流仅为0.15 μA,在测量状态下供电电流为300 μA。该芯片通过I2C总线与CC2538主芯片通信,通过设置寄存器,可以分别读取温度测试值和相对湿度测试值,SHT21芯片提供了通过CRC校验来进行传输完整检查的功能。通过I2C总线读到的温度原始值ST利用下面的公式换算为摄氏度值T:
(1)
读到的相对湿度原始值SRH则通过下列的公式换算为相对湿度RH:
(2)
传感器节点中的照度传感器选用MAXIM公司的MAX44009照度传感器芯片,该芯片为目前工业界最低功耗的环境光传感器芯片,在正常操作状态下供电电流仅为0.65μA。在缺省状态下,该芯片每800 ms测量一次环境照度值,该状态下芯片处于最省电的工作模式,我们在设计中使用了该工作模式。该芯片在PCB板上占用的面积比温湿度传感器SHT21芯片更小,仅为2×2 mm2。除此之外,该芯片具有十分宽广的照度测量范围(0.045 Lux至188 000 Lux)。该芯片通过I2C总线与CC2538主芯片进行通信,通过设置寄存器可以读取所测量照度的指数部分(exponent)和尾数部分(mantissa),然后通过下列公式换算为照度值(Lux):
Lux=2(exponent)×mantissa×0.045 (3)
1.2 汇聚节点
汇聚节点的作用是接收各传感器节点发出的测量数据,并通过串口发送给计算机。汇聚节点的硬件结构示意如图2所示。主芯片CC2538通过FTDI公司的FT232R芯片实现UART接口与USB接口之间的转换。
图2 汇聚节点硬件结构示意图
2 系统软件设计:
2.1 节点软件设计
本文中的WSN采用开源物联网操作系统Contiki作为各节点的操作系统,该操作系统作为轻量级的嵌入式操作系统,具有占用硬件资源小的优点,在典型的配置下,Contiki仅仅占用大约2 KB的RAM以及40 KB的FLASH。除此之外,Contiki提供了非常方便的无线通信协议。所有节点的软件设计在Ubuntu下完成,编译链接工具为arm-none-eabi-gcc。
一般情况下,WSN网络各节点的RF收发器都是功耗最高的部分,如何在保证通信畅通的前提下降低RF收发器的功耗就成了WSN操作系统的关键问题之一。Contiki操作系统中,通过利用称为ContikiMAC的RDC(radio duty cycling)机制来减少各节点RF收发器的工作时间[6]。在无线信号正常传输的前提下,该机制做到了让各节点RF收发器在大约99%的时间内处于关闭状态,从而大大降低各节点的功耗。
对于各传感器节点,我们在软件中首先设计了温湿度传感器和照度传感器的I2C读写功能,并利用了Contiki的RIME协议将各传感器收集到数据发送出去。CC2538与SHT21温湿度传感器之间进行I2C通讯的代码如下:
i2c_master_set_slave_address(SHT21_SLAVE_ADDRESS, I2C_SEND);
i2c_master_data_put(regist);
i2c_master_command(I2C_MASTER_CMD_BURST_SEND_START);
if(regist == SHT21_TEMP_REGISTER) {
for(temp=0; temp<12; temp++) {
clock_delay_usec(8500);
}
} else if(regist == SHT21_HUMI_REGISTER) {
for(temp=0; temp<12; temp++) {
clock_delay_usec(2900);
}
}
i2c_master_set_slave_address(SHT21_
SLAVE_ADDRESS, I2C_RECEIVE);
i2c_master_command(I2C_MASTER_CMD_BURST_
RECEIVE_START);
*data = i2c_master_data_get() << 8;
i2c_master_command(I2C_MASTER_
CMD_BURST_RECEIVE_CONT);
*data |= i2c_master_data_get();
i2c_master_command(I2C_MASTER_CMD_BURST_
RECEIVE_FINISH);
CC2538和MAX44009照度传感器之间进行I2C通信的代码如下:
i2c_master_set_slave_address
(MAX44009_ADDRESS, I2C_SEND);
i2c_master_data_put(MAX44009_LUX_HIGH_ADDR);
i2c_master_command(I2C_MASTER_CMD_BURST_SEND_
START);
i2c_master_set_slave_address(MAX44009_ADDRESS, I2C_
RECEIVE);
i2c_master_command(I2C_MASTER_CMD_BURST_
RECEIVE_START);
highbyte = i2c_master_data_get() ;
i2c_master_set_slave_addres
(MAX44009_ADDRESS, I2C_SEND);
i2c_master_data_put(MAX44009_LUX_LOW_ADDR);
i2c_master_command(I2C_MASTER_
CMD_BURST_SEND_CONT);
i2c_master_set_slave_address(MAX44009_
ADDRESS, I2C_RECEIVE);
i2c_master_command(I2C_MASTER_CMD_BURST_
RECEIVE_CONT);
lowbyte = i2c_master_data_get() ;
i2c_master_command(I2C_MASTER_
CMD_BURST_SEND_FINISH);
i2c_master_command(I2C_MASTER_CMD_BURST_
RECEIVE_FINISH);
RIME协议是Contiki自带的无线局域网通信协议[7],通过分层化的协议结构,可以实现广播、单播、可靠单播等传输方式,并可以实现多跳传输。在考虑到使用环境后,我们通过现场试验对比了几种传输方式的可靠性,最后决定采用单跳的RIME可靠单播方式来发送传感器数据。各传感器节点每十分钟采集一次数据并发送出去,由汇聚节点接收到后发送给上位计算机,整个无线采集系统的示意图如图3所示。
图3 无线采集系统结构示意图
2.2 上位机软件设计
上位机软件采用C#语言进行设计,在功能上主要包括了显示各传感器节点回传数据和数据库保存。上位机通过USB转串口的方式实现与汇聚节点的串口通讯,为了提高串口数据读取的可靠性,在程序设计中没有使用串口控件,而是使用了下面的接收函数来接收串口数据:
private void DoReceive()
{
Byte[] buffer = new Byte[1024];
while (receiving)
{
if (comport.BytesToRead > 0)
{
Int32 length = comport.Read(buffer, 0, buffer.Length);
Array.Resize(ref buffer, length);
Display d = new Display(DisplayText);
this.Invoke(d, new Object[] { buffer });
Array.Resize(ref buffer, 1024);
}
Thread.Sleep(16);
}
}
数据库部分采用SQL Server 2008作为数据源,记录所采集的温湿度、照度数据,数据表的第一列为各传感器节点中CC2538芯片RF MAC的IEEE地址,以区分各传感器,最后一列为数据存储时间,以备以后查询。
3 结 语
本文中设计了基于CC2538和Contiki的无线传感器网络,该无线传感器网络可以采集空间各点的温湿度、照度数据,并通过上位机进行显示和数据存储。经过现场试验发现,该系统数据传输可靠性高,测试过程中没有发现丢包现象。由于各芯片选用上突出了低功耗的要求,使得WSN中各传感器节点的电池寿命大大增加。本文中所设计的WSN提供了更加方便精确地进行测试环境监控的手段,可以用于大型分布式光度计光学暗室的三维空间中温湿度、照度的测量。
参考文献
[1] 钱志鸿,王义君.面向物联网的无线传感器网络综述[J]. 电子与信息学报,2013,35(1):215-227.
[2] Atzori L., Iera A., Morabito G..From “Smart Objects” to “Social Objects”: The Next Evolutionary Step of the Internet of Things[J] IEEE Communications Magazine, 2014(1):22-24.
[3] Andrea Castagnetti, Alain Pegatoquet, Trong Nhan Le.A Joint Duty-Cycle and Transmission Power Management for Energy Harvesting WSN [J] IEEE TRANSACTIONS ON INDUSTRIAL INFORMATICS,2014,10(2):38-39.
[4] Tevfik Yücek,Hüseyin Arslan.A Survey of Spectrum Sensing Algorithms for Cognitive Radio Applications[J].IEEE COMMUNICATIONS SURVEYS & TUTORIALS, 2009,11(1):18-21.
[5] Adam Dunkels, Bj?rn Gr?nvall, Thiemo Voigt. Contiki-a lightweight and flexible operating system for tiny networked sensors[C].Proceedings of the First IEEE Workshop on Embedded Networked Sensors (Emnets-I), Tampa, Florida, USA, 2004.
[6] Adam Dunkels. The ContikiMAC Radio Duty Cycling Protocol. [R] Technical Report T2011:13, Swedish Institute of Computer Science,2011.
[7] Adam Dunkels. Rime - a lightweight layered communication stack for sensor networks. [C] Proceedings of the European Conference on Wireless Sensor Networks (EWSN), Poster/Demo session, Delft, The Netherlands,2007.