




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能产品设计与应用Zstack协议组网程序设计项目案例导入01/PART
ONEZstack协议组网程序设计项目1组网终端设备联网,发送D1给协调器协调器收到D1后,LED1闪烁,同时发送D1给终端终端收到D1,LED1闪烁任务:协议栈无线收发控制LED通信Zstack协议组网程序设计项目1数据收发系统事件0X8000周期性事件接收属于本应用任务SampleApp的消息按键事件0xC0接收数据事件0x1A网络状态发生改变0xD1按键处理函数SampleApp_HandleKeys信息处理函数SampleApp_MessageMSGCB协调器终端节点显示内容触发周期性事件周期性事件处理函数SampleApp_SendPeriodicMessage用户应用任务的事件处理函数SampleApp_ProcessEventZstack协议组网程序设计项目1数据收发接收数据事件0x1A信息处理函数SampleApp_MessageMSGCB//接收数据,参数为接收到的数据voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){…}typedefstruct{byteTransSeqNumber;uint16DataLength;//存放收到数据的长度byte*Data;//存放收到的数据}afMSGCommandFormat_t;Zstack协议组网程序设计项目1数据收发接收数据事件0x1A信息处理函数SampleApp_MessageMSGCB//接收数据,参数为接收到的数据voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){uint16flashTime;bytebuf[3];switch(pkt->clusterId)//判断簇ID{caseSAMPLEAPP_PERIODIC_CLUSTERID://=1,收到广播数据osal_memset(buf,0,3);//为一字符串集体赋同一数值,buf,全部清0
osal_memcpy(buf,pkt->cmd.Data,2);//复制数据到缓冲区中
……..caseSAMPLEAPP_FLASH_CLUSTERID://=2,收到组播数据flashTime=BUILD_UINT16(pkt->cmd.Data[1],pkt->cmd.Data[2]);HalLedBlink(HAL_LED_4,4,50,(flashTime/4));break;}}typedefstruct{byteTransSeqNumber;uint16DataLength;
//存放收到数据的长度
byte*Data;//存放收到的数据}afMSGCommandFormat_t;Zstack协议组网程序设计项目2任务要求:协调器和终端节点液晶显示不同字符串组网液晶显示:在协调器液晶屏幕的第3行,显示“I’mA!”;在终端节点液晶屏幕的第3行,显示“I’mB!”终端发送数据给协调器:终端设备联网,发送D1给协调器接收数据:协调器收到D1后,LED1闪烁,同时发送D1给终端终端收到D1,LED1闪烁任务:协调器、终端节点分别显示字符串………I’mA!………I’mB!协调器终端节点Zstack协议组网程序设计项目21.协调器和终端分别显示信息ZDO_STATE_CHANGE网络状态发生变化0xD1如果是协调器,显示“I’mA!”如果是终端:1.显示“I‘mB!”2.设置周期性事件(每3s触发一次,发送数据)osal_start_timerEx(…)SAMPLEAPP_SEND_PERIODIC_MSG_EVTif(SampleApp_NwkState==DEV_ZB_COORD)//如果是协调器{
HalLcdWriteString(“I’mA!”,3);//协调器的第3行显示I’mA!}
if((SampleApp_NwkState==DEV_ROUTER)||(SampleApp_NwkState==DEV_END_DEVICE))//如果是路由终端或终端节点{HalLcdWriteString(“I‘mB!”,3);//终端的第3行显示I’mB!}Zstack协议组网程序设计项目22.终端设备联网,发送D1给协调器SAMPLEAPP_SEND_PERIODIC_MSG_EVT0x0001周期性发送数据事件SampleApp_SendPeriodicMessage();//终端节点周期性发送"D1"给写协调器如果是终端:1.显示“I‘mB!”2.设置周期性事件(每3s触发一次,发送数据)osal_start_timerEx(…)SAMPLEAPP_SEND_PERIODIC_MSG_EVTosal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,//0x0001SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT);//3000if(events&SAMPLEAPP_SEND_PERIODIC_MSG_EVT)//0X0001,每3s执行一次{SampleApp_SendPeriodicMessage();//终端节点周期性发送"D1"给写协调器osal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT+(osal_rand()&0x00FF)));//设置下一次周期事件}Zstack协议组网程序设计项目22.终端设备联网,发送D1给协调器byteSendData[3]="D1";//调AF_DataRequest将数据无线广播出去if(AF_DataRequest(…2,//发送数据长度
SendData,//发送数据缓冲区…)发送数据Zstack协议组网程序设计项目22.终端设备联网,发送D1给协调器SampleApp_SendPeriodicMessage();
//处理周期性事件,终端节点周期性发送"D1"给协调器byteSendData[3]=“D1”;//要发送的数据//调用AF_DataRequest将数据无线广播出去if(AF_DataRequest(&SampleApp_Periodic_DstAddr,
//发送目的地址+端点地址和传送模式//在这个函数SampleApp_Init中,定义了广播,端口号,广播地址,&SampleApp_epDesc,//源(答复或确认)终端的描述(比如操作系统中任务ID等)源EPSAMPLEAPP_PERIODIC_CLUSTERID,//被Profile指定的有效的集群号
2,//发送数据长度SendData,//发送数据缓冲区&SampleApp_TransID,//任务ID号AF_DISCV_ROUTE,//有效位掩码的发送选项AF_DEFAULT_RADIUS)==afStatus_SUCCESS)
//传送跳数,通常设置为AF_DEFAULT_RADIUS{//发送数据成功,什么都不做}
else{HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);//0X01,0X01//发送数据失败,LED1点亮}}Zstack协议组网程序设计项目22.终端设备联网,发送D1给协调器SampleApp_Periodic_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;//广播SampleApp_Periodic_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;//指定端点号20SampleApp_Periodic_DstAddr.addr.shortAddr=0xFFFF;//指定目的网络地址为广播地址typedefstruct{union{uint16shortAddr;//网络地址ZLongAddr_textAddr;}addr;afAddrMode_taddrMode;byteendPoint;uint16panId;}afAddrType_t;typedefenum{afAddrNotPresent=AddrNotPresent,afAddr16Bit=Addr16Bit,//单播afAddr64Bit=Addr64Bit,afAddrGroup=AddrGroup,//组播afAddrBroadcast=AddrBroadcast//广播}afAddrMode_t;地址定义:afAddrType_tSampleApp_Periodic_DstAddr;协调器地址0x0000,如果只发给协调器,地址就是0x0000在任务初始化中给出了发送方式SampleApp_InitZstack协议组网程序设计项目2协调器收到D1后,LED1闪烁,同时发送D1给终端,终端收到D1,LED1闪烁3.终端和协调器收到数据AF_INCOMING_MSG_CMD//收到数据0x1ASampleApp_MessageMSGCB(MSGpkt);处理收到的数据如果是D1?LED1间隔500ms闪烁如果是协调器?发送D1数据给终端Events=0X8000系统事件caseAF_INCOMING_MSG_CMD://接收数据事件,调用函数AF_DataRequest()接收数据SampleApp_MessageMSGCB(MSGpkt);//调用回调函数对收到的数据进行处理break;Zstack协议组网程序设计项目2协调器收到D1后,LED1闪烁,同时发送D1给终端,终端收到D1,LED1闪烁3.终端和协调器收到数据AF_INCOMING_MSG_CMD//收到数据0x1ASampleApp_MessageMSGCB(MSGpkt);处理收到的数据如果是D1?LED1间隔500ms闪烁如果是协调器?发送D1数据给终端Events=0X8000系统事件
bytebuf[3];//定义一个存放收到数据的数组变量switch(pkt->clusterId)//判断簇ID{
caseSAMPLEAPP_PERIODIC_CLUSTERID://收到广播数据1osal_memset(buf,0,3);//为一字符串集体赋同一数值,buf,全部清0osal_memcpy(buf,pkt->cmd.Data,2);//复制数据到缓冲区中
if(buf[0]=='D'&&buf[1]=='1')//判断收到的数据是否为"D1"
{HalLedBlink(HAL_LED_1,0,50,500);//如果是则Led1间隔500ms闪烁#ifdefined(ZDO_COORDINATOR)//协调器收到"D1"后,返回"D1"给终端,让终端Led1也闪烁
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市规划建设指南
- 残疾人康复中心建设项目可行性研究报告
- 保险公司装修保修条款
- 天然气项目可行性研究报告
- 农副产品加工项目可行性研究报告
- 产品评测报告家电类别表格
- 三农村电商数据分析报告
- 养老护理中级复习试题
- 外科总论复习试题及答案(一)
- 主管护师内科护理练习试卷附答案
- 设计变更单表格
- 良性前列腺增生诊疗指南
- 中学生食品安全教育 主题班会课件(18张PPT) 上学期
- 《长方形和正方形》 完整版课件
- 《乘法交换律和结合律》教学课件数学四年级下册
- 趣味数学-高斯求和 完整版课件
- 花卉生产设施课件
- 高中体育与健康人教版高中必修全一册(新课标)第十章体操类运动-技巧模块计划
- 云南省主要矿产资源
- 临床试验疑难问题解答
- 光伏发电工程施工组织设计施工工程光伏发电工程光伏发电施工组织设计
评论
0/150
提交评论