


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在SampleApp中利用SendPeriodicMessage实现终端节点定时向汇聚节点发送消息在SampleApp中,SendPeriodicMessage是所有节点的定时消息,即在(一个周期+随机时间)的时间间隔内,所有工作节点向外广播一个消息。在星型网络中,我们可以修改这个定时消息,实现终端节点向汇聚节点定时发送一个消息,这个消息当然可以包含有传感器的信息。下面以发送一个字符串“HelloZB”为例来说明这个过程。1.由于原来这个消息的发送目的地址是广播地址,所以要将其广播地址改为汇聚节点的地址。在一个网络形成之后,汇聚节点的地址为0x0000,这个地址是固定的,所以在初始化函数SampleApp_Init中找到这个目的地址并改成0x0000:/默认为0xFFFF,即广播地址,这里改成了0x000SampleApp_Periodic_DstAddr.addr.shortAddr=0x0000;/源程序为0xFFFF,即广播地址2.单单改了这个地址还不够,需要将地址模式也要修改,就在上述语句的上面有这么一条语句:/Broadcasttoeveryone-地址模式SampleApp_Periodic_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;很明显,地址模式为广播地址模式,我们将其修改为16位短地址模式,程序如下:SampleApp_Periodic_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;/原为AddrBroadcast;3.完成上述两步之后,就实现了所有节点都能向汇聚节点发送消息,当然也包括汇聚节点所以我们要将汇聚节点去掉。在函数SampleApp_ProcessEvent中,有如下一段程序:/如果是三种状态之一则按正常间隔启动定时器 if( (SampleApp_NwkState=DEV_ZB_COORD) /协调器,即汇聚节点 |(SampleApp_NwkState=DEV_ROUTER) /路由器 |(SampleApp_NwkState=DEV_END_DEVICE) /终端节点 /Startsendingtheperiodicmessageinaregularinterval./按正常间隔启动一个定时器osal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT);else/设备不在网络中的不做任何处理/Deviceisnolongerinthenetworkbreak;我们只需要终端节点向汇聚节点发消息,故把if条件中的协调器和路由器两个选项去掉,如下所示:/如果是终端节点,则按正常间隔启动定时器if(SampleApp_NwkState=DEV_END_DEVICE)/Startsendingtheperiodicmessageinaregularinterval./按正常间隔启动一个定时器osal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT);else/设备不在网络中的不做任何处理/Deviceisnolongerinthenetwork这样,就实现了终端节点定时消息的产生,因为它每次都调用osal_start_timerEx为系统任务中添加一次定时消息。4.定时消息中发送字符串。在函数SampleApp_SendPeriodicMessage中,首先定义一个buf,内容就为要发送的字符串,然后在AF_DataRequest发送消息函数的第4个参数改为buf的长度,第5个参数改为buff的地址(指针)即可实现数据发送。详细程序如下所示:voidSampleApp_SendPeriodicMessage(void)int8buf8=H,E,L,L,O,-,Z,B;if(AF_DataRequest(&SampleApp_Periodic_DstAddr,&SampleApp_epDesc,SAMPLEAPP_PERIODIC_CLUSTERID, 8,/发送的数据长度buf,/字符串的首地址 &SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS)=afStatus_SUCCESS)/发送成功P1_0=!P1_0;/发送成功后,灯P1_0取反。用于标示消息是否发送成功else/Erroroccurredinrequesttosend.5.汇聚节点接收周期消息并处理。前面已经将周期消息发送方定为了终端节点,接收方定为了汇聚节点,故当汇聚节点收到周期消息后会运行到SampleApp_ProcessEvent函数中的下面一段:/有消息进来,直接转入SampleApp_MessageMSGCB函数。case AF_INCOMING_MSG_CMD:SampleApp_MessageMSGCB(MSGpkt);/消息处理break;然后我们在SampleApp_MessageMSGCB函数中修改汇聚节点接收到周期消息后要做的处理:在下面的处理中,汇聚节点收到了消息,然后将收到的消息直接发送到串口中。具体如何实现串口发送,请参考其他资料。voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)uint16flashTime;devStates_tNwkState;switch(pkt-clusterId)/判断族IDcase SAMPLEAPP_PERIODIC_CLUSTERID: /如果是周期性消息/在这里加入所要处理的事件/接收数据,显示在显示屏,并发送到串口。/*下面这段代码是ninesuns加的*/NwkState=(devStates_t)(pkt-hdr.status);/if(NwkState=DEV_END_DEVICE)P1_1=!P1_1;/闪灯,标示汇聚节点收到了数据/从串口发出。HalUARTWrite(0,pkt-cmd.Data,8);/*加入的程序结束*/break;case SAMPLEAPP_FLASH_CLUSTERID:/如果是flash消息flashTime=BUILD_UINT16(pkt-cmd.Data1,pkt-cmd.Data2);/小灯闪烁四次HalLedBlink(HAL_LED_4,4,50,(flashTime/4);break;6.最简单也是最关键的,给汇聚节点下载程序时,一定要将工程选为:CoordinatorEB,给终端节点下载程序时,一定要将工程选为:EndDevicedEB。如果要实现自动建网的话,在opti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政治●海南卷丨2022年海南省普通高中学业水平选择性考试高考政治真题试卷及答案
- 2025年第二季渣打香港中小企领先营商指数
- 苹果枝条纳米生物炭在土壤中的迁移行为及对水氮运移的影响
- Brand KPIs for neobanking Freo in India-英文培训课件2025.4
- 汽车传感器与检测技术电子教案:光电式燃油流量传感器电子教案
- 培训学员综合管理制度
- 物理中考一轮复习教案 第五讲 平面镜-光的反射
- 介绍英语活动方案
- 仓储qc活动方案
- 河北省沧州市沧县2023-2024学年四年级下学期数学期末检测试卷(含答案)
- GB/T 13075-2016钢质焊接气瓶定期检验与评定
- GB/T 10295-2008绝热材料稳态热阻及有关特性的测定热流计法
- 公司保密知识培训经典课件
- 铸牢中华民族共同体意识学习PPT
- 酥梨的包装工艺学课程设计说明书
- 一例给药错误不良事件汇报
- 2022年巴音郭楞蒙古自治州库尔勒工会系统招聘考试题库及答案解析
- 三级安全安全教育记录表
- D502-15D502等电位联结安装图集
- 外研版(一起)英语二年级上册 Module 3 Unit 1 Unit 1 Do you like bananas(教案)
- 糖尿病中医护理查房教学内容
评论
0/150
提交评论