06 基于Z-Stack的无线数据(温湿度)传输实验

2019-01-07 19:32

基于Zstack的无线数据(温湿度)传输实验

1.实验环境

? 硬件:UP-CUP IOT-6410-II 型嵌入式物联网综合实验系统,配套温湿度传感器,PC 机。 ? 软件:IAR Embedded Workbench for MCS-51

2.实验内容

? 学习TI ZStack2007协议栈内容,掌握CC2530模块无线组网原理及过程。学习基于Zstack协议栈

的无线传感器网络数据传输方法。有关Zstack2007协议栈的具体内容,请参考附录中相关说明及TI官方文档。

? 使用IAR开发环境设计程序,ZStack-2.3.0-1.4.0协议栈源码例程SampleApp工程基础上,实现无

线组网及通讯。即协调器自动组网,终端节点(附带温湿度传感器)自动入网,并采集温湿度数据,协调器接收到信息后将温湿度数据通过串口发送给PC计算机显示。以此实现基于Zstack协议栈的数据无线透明传输。

3.实验原理

??ZIGBEE(CC2530)模块LED硬件接口

图5.5.1 LED硬件接口

ZIGBEE(CC2530)模块硬件上设计有2个LED灯,用来编程调试使用。分别连接CC2530的P1_0、P、1_1两个IO引脚。从原理图上可以看出,2个LED灯共阳极,当P1_0、P1_1引脚为低电平时候,LED灯点亮。

TEL: 010-82114870 82114887 82114890 82114944 FAX:总机转828

1

http://www.up-tech.com

博创科技 UP-TECH

??温湿度传感器模块硬件接口

图5.5.2 温湿度传感器硬件接口

图5.5.3 ZIGBEE模块主板J5接口

系统配套的温湿度传感器,与ZIGBEE模块的J5排线相连,这样我们可以知道,温湿度传感器模块

的时钟线与ZIGBEE模块的P0_0 IO引脚相连,温湿度传感器的数据线与P0_1 IO引脚相连。因此我们需要在代码中将相应引脚进行输入输出控制模拟该传感器时序,来监测温湿度传感器状态。

此部分原理及代码可以参考文档前面实验有关温湿度传感器实验部分。

??SampleApp实验简介

SampleApp实验是协议栈自带的ZIGBEE无线网络自启动(组网)样例,该实验实现的功能主要是协调

器自启动(组网),节点设备自动入网。之后两者建立无线通讯,数据的发送主要有2中方式,一种为周

TEL: 010-82114870 82114887 82114890 82114944 FAX:总机转828

2

http://www.up-tech.com

博创科技 UP-TECH

期定时发送信息(本次实验采用该方法测试),另一种需要通过按键事件触发发送FLASH信息。由于实验配套ZIGBEE模块硬件上与TI公司的ZIGBEE样板有差异,因此本次实验没有采用按键触发方式。而是采用周期定时广播的方式来发送ZIGBEE节点端采集到的温湿度数据。

接下来我们分析发送periodic信息流程(发送按键事件flash流程略)

Periodic消息是通过ZigBee在组建/加入网络成功后,开启定时器来完成的,因此在SampleApp_ProcessEvent事件处理函数中有如下定时器代码:

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) ) { // Start sending the periodic message in a regular interval. if(SampleApp_NwkState == DEV_END_DEVICE) //终端节点开启定时器 osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); } else { // Device is no longer in the network } break; 当设备加入到网络后,其状态就会变化,对所有任务触发ZDO_STATE_CHANGE事件,开启一个定时器。当定时时间一到,就触发periodic消息事件,触发事件SAMPLEAPP_SEND_PERIODIC_MSG_EVT,相应任务为SampleApp_TaskID,于是再次调用SampleApp_ProcessEvent()处理

SAMPLEAPP_SEND_PERIODIC_MSG_EVT事件,该事件处理函数调用SampleApp_SendPeriodicMessage()来发送周期信息。

if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) { SampleApp_SendPeriodicMessage(); // Send the periodic message // Setup to send message again in normal period (+ 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 unprocessed events }

因此我们只需要在节点模块端的SampleApp_SendPeriodicMessage函数中,加入温湿度采集后的数

据,并通过AF_DataRequest()函数接口发送出去,即可实现温湿度数据的无线发送功能。当然同样需要

TEL: 010-82114870 82114887 82114890 82114944 FAX:总机转828

3

http://www.up-tech.com

博创科技 UP-TECH

在协调器模块端的SampleApp_MessageMSGCB()接收数据事件处理函数中,将捕获的温湿度数据处理后,以字符串的形式通过串口显示在PC机的终端中。

关于无线数据(温湿度)传输关键代码分析

void SampleApp_SendPeriodicMessage( void ) { char temp_buf[7]; char humi_buf[7]; char i; char buf[14]; float humi,temp; SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; SampleApp_Periodic_DstAddr.addr.shortAddr = 0x0000; if(GetHumiAndTemp(&humi,&temp) == 0) { HalLedBlink( HAL_LED_1, 4, 50, 270 ); sprintf(humi_buf, (char *)\ sprintf(temp_buf, (char *)\ for(i=0; i<7; i++) { buf[i] = temp_buf[i]; buf[i+7] = humi_buf[i]; } AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc, SAMPLEAPP_PERIODIC_CLUSTERID, 14, (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; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); while ( MSGpkt ) { TEL: 010-82114870 82114887 82114890 82114944 FAX:总机转828

4 http://www.up-tech.com

博创科技 UP-TECH

switch ( MSGpkt->hdr.event ) { // Received when a key is pressed case KEY_CHANGE: SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break; case SPI_INCOMING_ZAPP_DATA: SampleApp_ProcessMTMessage(MSGpkt); MT_UartAppFlowControl (MT_UART_ZAPP_RX_READY); break; // Received when a messages is received (OTA) for this endpoint case AF_INCOMING_MSG_CMD: SampleApp_MessageMSGCB( MSGpkt ); break; // Received whenever the device changes state in the network 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) ) { // Start sending the periodic message in a regular interval. if(SampleApp_NwkState == DEV_END_DEVICE) osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); } else { // Device is no longer in the network } break; default: break; } // Release the memory osal_msg_deallocate( (uint8 *)MSGpkt ); // Next - if one is available MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } // Send a message out - This event is generated by a timer // (setup in SampleApp_Init()). if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) { TEL: 010-82114870 82114887 82114890 82114944 FAX:总机转828

5

http://www.up-tech.com

博创科技 UP-TECH


06 基于Z-Stack的无线数据(温湿度)传输实验.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:水闸毕业设计 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: