基于ZigBee技术的传感器无线信息采集
节点部分代码:
void SampleApp_SendPeriodicMessage( void )
{char buf[]=\AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,SAMPLEAPP_PERIODIC_CLUSTERID,8,(unsigned char*)buf,
&SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );}//函数可能会被周期利用,通过 AF_DataRequest()向协调器周期发送字符串\。
协调器部分代码:
uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
{afIncomingMSGPacket_t *MSGpkt;(void)task_id; // 已经使用该变量,无需警告 if ( events & SYS_EVENT_MSG )
{MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); while ( MSGpkt ) {switch ( MSGpkt->hdr.event ) {// 键被按下时接受数据。 Case KEY_CHANGE:
SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );break; //节点收到信息时开始接收数据
case AF_INCOMING_MSG_CMD: SampleApp_MessageMSGCB( MSGpkt ); break;
case SPI_INCOMING_ZAPP_DATA: SampleApp_ProcessMTMessage(MSGpkt); MT_UartAppFlowControl (MT_UART_ZAPP_RX_READY); break;
//不管何时设备状态改变依旧接收信息 case ZDO_STATE_CHANGE:
SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status); if ( (SampleApp_NwkState == DEV_ZB_COORD)|| (SampleApp_NwkState == DEV_ROUTER)
|| (SampleApp_NwkState == DEV_END_DEVICE) ) { //周期发送 periodic消息
HalLedSet(HAL_LED_1, HAL_LED_MODE_ON); osal_start_timerEx( SampleApp_TaskID,
SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );} else
{// 设备不在网络中 }break;default; break;
25
基于ZigBee技术的传感器无线信息采集
节点在成功组网后完成“~HELLO!~”字符串的发送,并由协调器将节点信息传送至上位机。
串口无线控制节点实验在于使用上位机串口向ZigBee协调器发送相关指令,并通过无线传播的方式将指令传送到指定的终端节点,从而控制终端节点实现所发送的指令功能,例如控制节点设备的LED的开关状态。 串口控制LED部分代码:
uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
(void)task_id; // 已经使用该变量,无需警告
{afIncomingMSGPacket_t *MSGpkt; if ( events & SYS_EVENT_MSG )
{MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); while
( MSGpkt )
{switch ( MSGpkt->hdr.event ) {// 键被按下时接受数据
case KEY_CHANGE:
SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t
*)MSGpkt)->keys );break;
//节点收到信息后开始接收信息。
case AF_INCOMING_MSG_CMD: SampleApp_MessageMSGCB( MSGpkt ); break;; //不管何时设备状态改变依旧接收信息。 case ZDO_STATE_CHANGE:
SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status); if ( (SampleApp_NwkState ==
DEV_ZB_COORD)|| (SampleApp_NwkState == DEV_ROUTER)
|| (SampleApp_NwkState == DEV_END_DEVICE) )
{// 开始周期性传送periodic消息。
HalLedSet(HAL_LED_1, HAL_LED_MODE_ON);
osal_start_timerEx( SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );}
else {// 设备离开网络。 } break;default: break;}
osal_msg_deallocate( (uint8 *)MSGpkt ); // 释放内存
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); if one is
26
基于ZigBee技术的传感器无线信息采集
return (events ^ SYS_EVENT_MSG); // 返回没有处理的事件} //发送消息 - 事件由定时器生成 // (由 SampleApp_Init()建立).
if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) { SampleApp_SendPeriodicMessage(); // 发送periodic消息 // 发送周期信息 (+ a little jitter)
osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) ); return (events ^
SAMPLEAPP_SEND_PERIODIC_MSG_EVT); // 返回没有处理的事件。 }
return 0; // 丢弃未知事件。}
PC机通过串口发送指令到ZigBee协调器应用层(即spi_incoming_zapp_data时),应用层调用 sampleapp_processmtmessage(msgpkt)串行处理功能,,当接收网络数据(即该af_incoming_msg_cmd事件发生时),应用层调用 sampleapp_messagemsgcb(msgpkt)功能。在协调器程序所定义SampleApp_ProcessMTMessage(MSGpkt)中,我们设定当串口接收到“on”字符串时,反方向发送“set led on”,同时向终端节点传送0x01指令,同理,在串口收到“off”时反方向发送“set led off”,同时向终端节点传送0x00指令。
实验现象为当PC机通过串口工具发送“on”命令时,节点模块LED被点亮,发送“off”时,LED灯被熄灭。
27
基于ZigBee技术的传感器无线信息采集
第5章 硬件部分设计
5.1 CC2530
CC2530片上系统设计是一个实用的解决方案,基于IEEE 802.15.4标准和RF4CE协议、ZigBee联盟标准,主要特点是成本低,它可以在ZigBee协议的基础上形成一个大型的节点网络,集成的射频收发器是CC2530模块的必不可少的性能,CPU使用增强8051型,可以在系统闪存实现编程。目前,CC2530芯片具有四个不同的闪存版本:CC2530F32/64/128/256,型号最后数字代表具有多少KB 的闪存空间。CC2530具有多种操作模式,使其能够胜任超低功耗要求系统的工作。同样运行模式能在低能量消耗率之间的快速切换。
CC2530F256 融合了全球领先的半导体公司德州仪器(TI)的黄金单元ZigBee协议栈Z-Stack,提供了一个完善而又强大的ZigBee网络解决方案[29]。硬件图如图5.1。
图5.1 CC2530硬件图
ZigBee(CC2530)模块设计有两个LED灯,用来编程调试使用,分别连接
28
基于ZigBee技术的传感器无线信息采集
CC2530的P1_0、P1_1两个IO引脚,2个LED灯供阳极,即低电平时LED灯会被点亮。
5.2 传感器
传感器是一种检测装置,能感受到被测量的信息,就好像人类的眼睛、耳朵和鼻子能够感受到色彩、声音和气味一样。它是按照一定的规律将外界信息转化为电信号或其他形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求[30]。
市面上的传感器类型不胜枚举,按照原理或者功能不同又可以分成若干类。下面介绍几种常见的传感器。
(1)温湿度传感器(如图5.2):温湿度传感器是指能将温度量和湿度量转换成容易被测量处理的电信号的设备或装置。市场上的温湿度传感器一般是测量温度量和相对湿度量。
(2)压力传感器:压力传感器是工业实践中最为常用的一种传感器。一般普通压力传感器的输出为模拟信号,模拟信号是指信息参数在给定范围内表现为连续的信号。或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意数值的信号。
(3)红外对射传感器(如图5.3):其侦测原理乃是利用经LED红外光发射二极体发射的脉冲红外线,再经光学镜面做聚焦处理使光线传至很远距离,由受光器接受。当红外脉冲射束被遮断时就会发出警报。
(4)三轴加速传感器(如图5.4):大多采用压阻式、压电式和电容式工作原理,产生的加速度正比于电阻、电压和电容的变化,通过相应的放大和滤波电路进行采集。
(5)霍尔开关传感器(如图5.5):利用霍尔元件控制电路的通断,实现开关效应。
29