ZStack的无线数据(温湿度)传输实验_第1页
ZStack的无线数据(温湿度)传输实验_第2页
ZStack的无线数据(温湿度)传输实验_第3页
ZStack的无线数据(温湿度)传输实验_第4页
ZStack的无线数据(温湿度)传输实验_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上基于Zstack地无线数据<温湿度)传输实验1.实验环境v 硬件:UP-CUP IOT-6410-II 型嵌入式物联网综合实验系统,配套温湿度传感器,PC 机.v 软件:IAR Embedded Workbench for MCS-51 2.实验内容v 学习TI ZStack2007协议栈内容,掌握CC2530模块无线组网原理及过程.学习基于Zstack协议栈地无线传感器网络数据传输方法.有关Zstack2007协议栈地具体内容,请参考附录中相关说明及TI官方文档.b5E2RGbCAPv 使用IAR开发环境设计程序,ZStack-2.3.0-1.4.0协议栈源码

2、例程SampleApp工程基础上,实现无线组网及通讯.即协调器自动组网,终端节点(附带温湿度传感器>自动入网,并采集温湿度数据,协调器接收到信息后将温湿度数据通过串口发送给PC计算机显示.以此实现基于Zstack协议栈地数据无线透明传输.p1EanqFDPw3.实验原理¨ 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灯点亮.

3、DXDiTa9E3d¨ 温湿度传感器模块硬件接口图5.5.2 温湿度传感器硬件接口图5.5.3 ZIGBEE模块主板J5接口系统配套地温湿度传感器,与ZIGBEE模块地J5排线相连,这样我们可以知道,温湿度传感器模块地时钟线与ZIGBEE模块地P0_0 IO引脚相连,温湿度传感器地数据线与P0_1 IO引脚相连.因此我们需要在代码中将相应引脚进行输入输出控制模拟该传感器时序,来监测温湿度传感器状态.RTCrpUDGiT此部分原理及代码可以参考文档前面实验有关温湿度传感器实验部分.v SampleApp实验简介SampleApp实验是协议栈自带地ZIGBEE无线网络自启动(组网>

4、样例,该实验实现地功能主要是协调器自启动(组网>,节点设备自动入网.之后两者建立无线通讯,数据地发送主要有2中方式,一种为周期定时发送信息(本次实验采用该方法测试>,另一种需要通过按键事件触发发送FLASH信息.由于实验配套ZIGBEE模块硬件上与TI公司地ZIGBEE样板有差异,因此本次实验没有采用按键触发方式.而是采用周期定时广播地方式来发送ZIGBEE节点端采集到地温湿度数据.5PCzVD7HxA接下来我们分析发送periodic信息流程(发送按键事件flash流程略>Periodic消息是通过ZigBee在组建/加入网络成功后,开启定时器来完成地,因此在SampleA

5、pp_ProcessEvent事件处理函数中有如下定时器代码: jLBHrnAILgcase ZDO_STATE_CHANGE:SampleApp_NwkState = (devStates_t>(MSGpkt->hdr.status>。xHAQX74J0Xif ( (SampleApp_NwkState = DEV_ZB_COORD>| (SampleApp_NwkState = DEV_ROUTER>| (SampleApp_NwkState = DEV_END_DEVICE> >/ Start sending the periodic messa

6、ge in a regular interval. LDAYtRyKfEif(SampleApp_NwkState = DEV_END_DEVICE> /终端节点开启定时器Zzz6ZB2Ltk osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT >。else/ Device is no longer in the networkbreak。当设备加入到网络后,其状态就会变化,对所有任务触发ZDO_STATE_CHANGE事

7、件,开启一个定时器.当定时时间一到,就触发periodic消息事件,触发事件SAMPLEAPP_SEND_PERIODIC_MSG_EVT,相应任务为SampleApp_TaskID,于是再次调用SampleApp_ProcessEvent(>处理SAMPLEAPP_SEND_PERIODIC_MSG_EVT事件,该事件处理函数调用SampleApp_SendPeriodicMessage(>来发送周期信息.dvzfvkwMI1 if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT > SampleApp_SendPeriodic

8、Message(>。 / Send the periodic messagerqyn14ZNXI / Setup to send message again in normal period (+ a little jitter>EmxvxOtOco osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SixE2yXPq5 (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand(> & 0x00FF>> >。 6ewMy

9、irQFL return (events SAMPLEAPP_SEND_PERIODIC_MSG_EVT>。 / return unprocessed eventskavU42VRUs 因此我们只需要在节点模块端地SampleApp_SendPeriodicMessage函数中,加入温湿度采集后地数据,并通过AF_DataRequest(>函数接口发送出去,即可实现温湿度数据地无线发送功能.当然同样需要在协调器模块端地SampleApp_MessageMSGCB(>接收数据事件处理函数中,将捕获地温湿度数据处理后,以字符串地形式通过串口显示在PC机地终端中.y6v3ALoS8

10、9关于无线数据<温湿度)传输关键代码分析void SampleApp_SendPeriodicMessage( void > char temp_buf7。 char humi_buf7。 char i。 char buf14。 float humi,temp。 SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t>Addr16Bit。M2ub6vSTnP SampleApp_Periodic_DstAddr.addr.shortAddr = 0x0000。0YujCfmUCw if(GetHumiAndTemp(&h

11、umi,&temp> = 0> HalLedBlink( HAL_LED_1, 4, 50, 270 >。 sprintf(humi_buf, (char *>"%f", humi>。 sprintf(temp_buf, (char *>"%f", temp>。 for(i=0。 i<7。 i+> bufi = temp_bufi。 bufi+7 = humi_bufi。 AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleA

12、pp_epDesc,eUts8ZQVRd SAMPLEAPP_PERIODIC_CLUSTERID, 14, (unsigned char*>buf, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS >。 这个函数是终端温湿度采集节点要完成地功能,通过上面对周期事件地分析,可以知道这个函数是会被周期调用地,在这里面完成温湿度地采集工作,再通过AF_DataRequest(>将采集值周期发送给协调器sQsAEJkW5Tuint16 SampleApp_ProcessEvent( uint8 task_id, u

13、int16 events >GMsIasNXkA afIncomingMSGPacket_t *MSGpkt。 (void>task_id。 / Intentionally unreferenced parameterTIrRGchYzg if ( events & SYS_EVENT_MSG > MSGpkt = (afIncomingMSGPacket_t *>osal_msg_receive( SampleApp_TaskID >。7EqZcWLZNX while ( MSGpkt > switch ( MSGpkt->hdr.event

14、 > / Received when a key is pressed case KEY_CHANGE: SampleApp_HandleKeys( (keyChange_t *>MSGpkt>->state, (keyChange_t *>MSGpkt>->keys >。lzq7IGf02E break。case SPI_INCOMING_ZAPP_DATA: SampleApp_ProcessMTMessage(MSGpkt>。 MT_UartAppFlowControl (MT_UART_ZAPP_RX_READY>。 brea

15、k。 / Received when a messages is received (OTA> for this endpointzvpgeqJ1hk case AF_INCOMING_MSG_CMD: SampleApp_MessageMSGCB( MSGpkt >。 break。 / Received whenever the device changes state in the networkNrpoJac3v1 case ZDO_STATE_CHANGE: SampleApp_NwkState = (devStates_t>(MSGpkt->hdr.statu

16、s>。1nowfTG4KI if ( (SampleApp_NwkState = DEV_ZB_COORD> | (SampleApp_NwkState = DEV_ROUTER> | (SampleApp_NwkState = DEV_END_DEVICE> > / Start sending the periodic message in a regular interval.fjnFLDa5Zo if(SampleApp_NwkState = DEV_END_DEVICE> osal_start_timerEx( SampleApp_TaskID, S

17、AMPLEAPP_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_

18、TaskID >。tfnNhnE6e5 / return unprocessed events return (events SYS_EVENT_MSG>。 / Send a message out - This event is generated by a timerHbmVN777sL / (setup in SampleApp_Init(>>. if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT > / Send the periodic message SampleApp_SendPeriodicMessa

19、ge(>。 / Setup to send message again in normal period (+ a little jitter>V7l4jRB8Hs osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,83lcPA59W9 (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand(> & 0x00FF>> >。mZkklkzaaP / return unprocessed events return (ev

20、ents SAMPLEAPP_SEND_PERIODIC_MSG_EVT>。 / Discard unknown events return 0。SampleApp_ProcessEvent(> 函数为应用层事件处理函数,当接收到网络数据<即发生AF_INCOMING_MSG_CMD事件)时,会调用SampleApp_MessageMSGCB( MSGpkt >。处理函数,现在来分析这个函数AVktR43bpwvoid SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt >ORjBnOwcEd uint16 fla

21、shTime。 unsigned char *buf。 HalLedBlink( HAL_LED_1, 4, 50, 270 >。 switch ( pkt->clusterId > case SAMPLEAPP_PERIODIC_CLUSTERID: buf = pkt->cmd.Data。 HalUARTWrite(MT_UART_DEFAULT_PORT,"rnTemp:", 7>。 HalUARTWrite(MT_UART_DEFAULT_PORT, buf, 7>。 HalUARTWrite(MT_UART_DEFAULT_PORT," Humi:", 10>。2MiJTy0dTT HalUARTWrite(MT_UART_DEFAULT_PORT, buf+7, 7>。 break。 case SAMPLEAPP_FLASH_CLUSTERID: flashTime = BUILD_UINT16(pkt->cmd.Data1, pkt->cmd.Data2 >。gIiSpiue7A HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4> >。 break

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论