赵 建 光
(河北建筑工程学院,河北 张家口 075000)
随着后PC时代的到来,物联网技术成为全球关注的技术,它融合嵌入式技术、计算机技术、通信技术、微电子技术,成为研究的热点.物联网的应用领域十分广泛,涵盖人们生活的衣食住行,从衣服、食品、烟酒的电子标签溯源,到智能建筑、智能家居及车载网,到处都有物联网的影子.短距离无线通信技术与传感器技术的结合,孕育了WSN技术,WSN技术逐渐成为物联网的核心技术.本文采用TI的最新SOC CC2530与SHT11设计实现了无线传感网的一个节点,重点论述了节点的控制程序设计.
CC2530是TI公司用于进距离无线通信的片上系统(SoC),支持2.4-GHz IEEE 802.15.4、ZigBee和RF4CE应用,内置了8051单片机、8KB RAM、可编程闪存.本论文使用其Zigbee功能设计了无线了信息传输.CC2530引脚图如图1所示.
图1 CC2530引脚图
设计中采用了具有二线串行接口的单片全校准数字式新型相对湿度和温度传感器SHT11,该传感器通过无线网络对监测区域内温度和湿度进行数据采集工作,具有数字式输出、免调试、免标定、极高的安全性、可靠性和长期稳定性等特点.SHT11的传感器系统测量相对湿度的范围是0-100%,分辨力达0.03%RH,最高精度为±2%RH.测量温度的范围是-40-+123.8 ℃,分辨力为0.1 ℃.SHT11的供电电压为2.4-5.5 V,电流消耗小,测量时为550 A,平均为24 A,休眠时为3 A,是低功耗产品的最佳选择之一.
SHT11共6引脚,其中有5、6引脚为NC,1-4引脚描述如表1所示.
表1 SHT11引脚描述
SHT11需要2.4至5.5 V之间的电压供应,一个100 μF电容去耦连接电源引脚VDD与底线GND.SCK为时钟控制线,用于同步CPU和SHT11之间的通信.数据三态引脚DATA用于数据传输.数据变化的下降沿后的串行时钟SCK的上升沿有效.在传输过程中的数据线必须保持稳定,而SCK为高电平.为了避免信号冲突,微控制器应驱动DATA在低电平.外部需要连接上拉电阻(如10 kΩ电平)拉高信号.
由前面的硬件设计可知,SHT11的SCK引脚、DATA引脚分别和CC2431的P1_1和P0_1相连,CC2431通过P1_1引脚向SHT11 SCK引脚输入时钟序列,通过通过P0_1引脚向SHT11 DATA引脚输入指令并获取传感值.SHT11传感器有特定的指令格式,在接收到特定指令后,执行不同的读取操作,读取传感值在高电平时触发.
读取传感器数值的过程如下:
首先,启动通信过程,输入开始通信的有效脉冲信号,发送读取指令至SHT11中,传感器接收到指令后,根据指令类型读取传感值.SHT11芯片的指令格式如表2所示.第二,输入指令代码后,CPU等待传感数据,直到SHT11传感器完成温湿度测定.SHT11读取12位的温湿度数据需要55毫秒,测定完成后,SHT11置数据线路为低电平后,向CPU传输数据.CPU读取已测定的12位数据后,需进行校验,采用CRC循环冗余码校验,如校验正确则传输ACK确认信息,否则不传输ACK.第三,如果读取传感数据失败,重启CPU与SHT11的连接,重复以上通信过程,直至传感数据传输成功.
TinyOS通过HumidityC组件,提供对SHT11温湿度传感器的控制接口.应用程序HumidityC组件的下层组件为HumidityProtocolC组件,此组件能够获取温湿度测定函数Humidity.getData()和Temperature.getData()的支持.传感器节点.
表2 SHT11芯片指令代码
应用程序通过Humidity.getData()和Temperature.getData()函数,向SHT11发送读取温度和湿度值的请求,SHT11将测定的温湿度数值通过温湿度返回函数Humidity.dataReady(uint16_t data)和Temperature.dataReady(uint16_t data)返回.
HumidityC组件提供的获取温湿度值的函数有:Humidity.getData()、Event Humidity.dataReady(uint16_t data)、Temperature.getData()和Event Temperature.dataReady(uint16_t data).
本节点传感器温湿度采集程序,每隔125毫秒通过HumidityC组件,从SHT11传感器获取温度测定值并传输直电脑.测量温湿度的程序由如下三个文件构成:Oscilloscope.nc、OscilloscopeM.nc、OscopeMsg.h.测量的温湿度值,最终在PC机上通过Oscilloscope java应用程序显示温湿度变化曲线.下面重点介绍Oscillosocpe.nc中的程序.
在文件Oscillosocpe.nc中,对程序中使用的一些组件进行了声明,包括:Main组件,是应用程序的入口;时钟组件TimerC,包含Timer.fired()函数,每隔100毫秒调用;LED控制组件LedsC;温度和湿度值获取组件HumidityC;串行通信组件UARTComm.在OscilloscopeM.nc中,先要包含OscopeMsg文件,并将程序中使用的各组件接口在uses中声明,然后在Implementation部分对要使用变量及函数进行声明.
本节点程序中用到的主要组件与函数有:CommControl串口通信组件、Timer定时器组件、SplitControl传感器控制组件、StdControl.init()组件变量名字空间初始化函数、SHT11_Temp.getData()SHT11温度请求函数、SHT11_temp.dataReady(uint16_t data)SHT11返回温度数据函数、SHT11_Huminity.getData()SHT11湿度请求函数、SHT11_Huminity.dataReady(uint16_t data)返回湿度数据函数、calc_SHT11(p_humidity,p_temperature)计算温湿度传感值的函数等.
读取的温湿度值保存在变量中,利用计算函数calc_SHT11(p_humidity,p_temperature),把测定值转换成摄氏温度及相对湿度,计算后的值保存在相应变量中,通过dataTask()函数获取计算后的传感值.
计算温湿度值的部分程序如下:
void calc_SHT11(uint16_t p_humidity,uint16_t p_temperature)
{
…
float rh_lin;//线性湿度
float t_C;//摄氏温度
if(rh_true<0.1)rh_true=0.1;//可能的物理范围
atomic mytemp=(uint16_t)t_C;//返回摄氏温度
atomic myhumi=(uint16_t)rh_true;//返回相对湿度
}
在Cygwin中定位文件目录并利用make命令进行编译,然后通过ISP下载工具PonyProg程序把编译好的Main.hex文件下载到节点中.
本文设计实现了基于CC2530的无线传感器节点,采用温湿度传感器SHT11为信号采集端,采用Zigbee无线通信收发.经仿真测试,该节点具有性能稳定,功耗低等特点.
参 考 文 献
[1]董云鹏.无线传感器网络节点的设计与实现[D].北京交通大学,2008,3~5
[2]王培东,李强.无线传感器节点节能方法研究[J].网络与通信,2011,30(5),66~69
[3]SN Pakzad,GL Fenves,S Kim,DE Culler,Design and implementation of scalable wireless sensor network for structural monitoring.J.Infrastruct.Systs.14,89~101(March 2008)
[4]何鸿,刘枫.基于TinyOS 2.x无限传感器节点的节能策略研究[J].电脑知识与技术,2009,5(33),9382~9384