您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > ZStack的无线数据(温湿度)传输实验
基于Zstack地无线数据温湿度)传输实验1.实验环境硬件:UP-CUPIOT-6410-II型嵌入式物联网综合实验系统,配套温湿度传感器,PC机.软件:IAREmbeddedWorkbenchforMCS-512.实验内容学习TIZStack2007协议栈内容,掌握CC2530模块无线组网原理及过程.学习基于Zstack协议栈地无线传感器网络数据传输方法.有关Zstack2007协议栈地具体内容,请参考附录中相关说明及TI官方文档.b5E2RGbCAP使用IAR开发环境设计程序,ZStack-2.3.0-1.4.0协议栈源码例程SampleApp工程基础上,实现无线组网及通讯.即协调器自动组网,终端节点(附带温湿度传感器自动入网,并采集温湿度数据,协调器接收到信息后将温湿度数据通过串口发送给PC计算机显示.以此实现基于Zstack协议栈地数据无线透明传输.p1EanqFDPw3.实验原理ZIGBEE(CC2530模块LED硬件接口图5.5.1LED硬件接口ZIGBEE(CC2530模块硬件上设计有2个LED灯,用来编程调试使用.分别连接CC2530地P1_0、P、1_1两个IO引脚.从原理图上可以看出,2个LED灯共阳极,当P1_0、P1_1引脚为低电平时候,LED灯点亮.DXDiTa9E3d温湿度传感器模块硬件接口图5.5.2温湿度传感器硬件接口图5.5.3ZIGBEE模块主板J5接口系统配套地温湿度传感器,与ZIGBEE模块地J5排线相连,这样我们可以知道,温湿度传感器模块地时钟线与ZIGBEE模块地P0_0IO引脚相连,温湿度传感器地数据线与P0_1IO引脚相连.因此我们需要在代码中将相应引脚进行输入输出控制模拟该传感器时序,来监测温湿度传感器状态.RTCrpUDGiT此部分原理及代码可以参考文档前面实验有关温湿度传感器实验部分.SampleApp实验简介SampleApp实验是协议栈自带地ZIGBEE无线网络自启动(组网样例,该实验实现地功能主要是协调器自启动(组网,节点设备自动入网.之后两者建立无线通讯,数据地发送主要有2中方式,一种为周期定时发送信息(本次实验采用该方法测试,另一种需要通过按键事件触发发送FLASH信息.由于实验配套ZIGBEE模块硬件上与TI公司地ZIGBEE样板有差异,因此本次实验没有采用按键触发方式.而是采用周期定时广播地方式来发送ZIGBEE节点端采集到地温湿度数据.5PCzVD7HxA接下来我们分析发送periodic信息流程(发送按键事件flash流程略Periodic消息是通过ZigBee在组建/加入网络成功后,开启定时器来完成地,因此在SampleApp_ProcessEvent事件处理函数中有如下定时器代码:jLBHrnAILgcaseZDO_STATE_CHANGE:SampleApp_NwkState=(devStates_t(MSGpkt-hdr.status。xHAQX74J0Xif((SampleApp_NwkState==DEV_ZB_COORD||(SampleApp_NwkState==DEV_ROUTER||(SampleApp_NwkState==DEV_END_DEVICE{//Startsendingtheperiodicmessageinaregularinterval.LDAYtRyKfEif(SampleApp_NwkState==DEV_END_DEVICE//终端节点开启定时器Zzz6ZB2Ltkosal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT。}else{//Deviceisnolongerinthenetwork}break。当设备加入到网络后,其状态就会变化,对所有任务触发ZDO_STATE_CHANGE事件,开启一个定时器.当定时时间一到,就触发periodic消息事件,触发事件SAMPLEAPP_SEND_PERIODIC_MSG_EVT,相应任务为SampleApp_TaskID,于是再次调用SampleApp_ProcessEvent(处理SAMPLEAPP_SEND_PERIODIC_MSG_EVT事件,该事件处理函数调用SampleApp_SendPeriodicMessage(来发送周期信息.dvzfvkwMI1if(events&SAMPLEAPP_SEND_PERIODIC_MSG_EVT{SampleApp_SendPeriodicMessage(。//Sendtheperiodicmessagerqyn14ZNXI//Setuptosendmessageagaininnormalperiod(+alittlejitterEmxvxOtOcoosal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SixE2yXPq5(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT+(osal_rand(&0x00FF。6ewMyirQFLreturn(events^SAMPLEAPP_SEND_PERIODIC_MSG_EVT。//returnunprocessedeventskavU42VRUs}因此我们只需要在节点模块端地SampleApp_SendPeriodicMessage函数中,加入温湿度采集后地数据,并通过AF_DataRequest(函数接口发送出去,即可实现温湿度数据地无线发送功能.当然同样需要在协调器模块端地SampleApp_MessageMSGCB(接收数据事件处理函数中,将捕获地温湿度数据处理后,以字符串地形式通过串口显示在PC机地终端中.y6v3ALoS89关于无线数据温湿度)传输关键代码分析voidSampleApp_SendPeriodicMessage(void{chartemp_buf[7]。charhumi_buf[7]。chari。charbuf[14]。floathumi,temp。SampleApp_Periodic_DstAddr.addrMode=(afAddrMode_tAddr16Bit。M2ub6vSTnPSampleApp_Periodic_DstAddr.addr.shortAddr=0x0000。0YujCfmUCwif(GetHumiAndTemp(&humi,&temp==0{HalLedBlink(HAL_LED_1,4,50,270。sprintf(humi_buf,(char*%f,humi。sprintf(temp_buf,(char*%f,temp。for(i=0。i7。i++{buf[i]=temp_buf[i]。buf[i+7]=humi_buf[i]。}AF_DataRequest(&SampleApp_Periodic_DstAddr,&SampleApp_epDesc,eUts8ZQVRdSAMPLEAPP_PERIODIC_CLUSTERID,14,(unsignedchar*buf,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS。}}这个函数是终端温湿度采集节点要完成地功能,通过上面对周期事件地分析,可以知道这个函数是会被周期调用地,在这里面完成温湿度地采集工作,再通过AF_DataRequest(将采集值周期发送给协调器sQsAEJkW5Tuint16SampleApp_ProcessEvent(uint8task_id,uint16eventsGMsIasNXkA{afIncomingMSGPacket_t*MSGpkt。(voidtask_id。//IntentionallyunreferencedparameterTIrRGchYzgif(events&SYS_EVENT_MSG{MSGpkt=(afIncomingMSGPacket_t*osal_msg_receive(SampleApp_TaskID。7EqZcWLZNXwhile(MSGpkt{switch(MSGpkt-hdr.event{//ReceivedwhenakeyispressedcaseKEY_CHANGE:SampleApp_HandleKeys(((keyChange_t*MSGpkt-state,((keyChange_t*MSGpkt-keys。lzq7IGf02Ebreak。caseSPI_INCOMING_ZAPP_DATA:SampleApp_ProcessMTMessage(MSGpkt。MT_UartAppFlowControl(MT_UART_ZAPP_RX_READY。break。//Receivedwhenamessagesisreceived(OTAforthisendpointzvpgeqJ1hkcaseAF_INCOMING_MSG_CMD:SampleApp_MessageMSGCB(MSGpkt。break。//ReceivedwheneverthedevicechangesstateinthenetworkNrpoJac3v1caseZDO_STATE_CHANGE:SampleApp_NwkState=(devStates_t(MSGpkt-hdr.status。1nowfTG4KIif((SampleApp_NwkState==DEV_ZB_COORD||(SampleApp_NwkState==DEV_ROUTER||(SampleApp_NwkState==DEV_END_DEVICE{//Startsendingtheperiodicmessageinaregularinterval.fjnFLDa5Zoif(SampleApp_NwkState==DEV_END_DEVICEosal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT。}else{//Deviceisnolongerinthenetwork}break。default:break。}//Releasethememoryosal_msg_deallocate((uint8*MSGpkt。//Next-ifoneisavailableMSGpkt=(afIncomingMSGPacket_t*osal_msg_receive(SampleApp_TaskID。tfnNhnE6e5}//returnunprocessedeventsreturn(events^SYS_EVENT_MSG。}//Sendamessageout-ThiseventisgeneratedbyatimerHbmVN777sL//(setupinSampleApp_Init(.if(events&SAMPLEAPP_SEND_PERIODIC_MSG_EVT{//SendtheperiodicmessageSampleApp_SendPeriodicMessage(。//Setuptosendmessageagaininnormalperiod(+alittlejitterV7l4jRB8Hsosal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,83lcPA59W9(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT+(osal_ran
本文标题:ZStack的无线数据(温湿度)传输实验
链接地址:https://www.777doc.com/doc-7382744 .html