版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能产品设计与应用zigbee协议栈案例导入01/PART
ONEZigBee协议栈什么是ZigBee协议栈呢?它和ZigBee协议有什么关系呢?协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式。通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据收发。ZigBee协议栈简介ZigBee协议栈Z-Stack就是符合Zigbee协议栈规范的一个硬件和软件平台,是Zigbee协议栈的一个具体实现。Z-Stack是TI公司提供的协议栈,它是个半开源的协议栈,有些核心代码是以库的形式提供的。ZigBee协议栈规范和Z-Stack的关系ZigBee协议栈ZigBee的协议分为两部分,IEEE802.15.4定义了PHY(物理层);MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层);APS(应用程序支持子层);APL(应用层)技术规范。;ZigBee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API(应用层),用户可以直接调用。ZigBee无线网络协议层的架构图ZigBee协议栈ZigBee无线网络协议层的架构图ZigBee协议栈协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用,协议较底下的层与应用是相互独立的。商业化的协议栈已写好了底层代码,符合协议标准,提供功能模块供调用。需要关心的是应用逻辑,数据从哪里到哪里,怎么存储,处理;系统里的设备之间的通信顺序什么的;当应用需要数据通信时,调用组网函数组建网络;当从一个设备发数据到另一个设备时,调用无线数据发送函数;当然,接收端就调用接收函数;当设备空闲时,调用睡眠函数;要干活的时候就调用唤醒函数。所以当做具体应用时,不需要关心协议栈是怎么写的,里面的每条代码是什么意思。如何使用ZigBee协议栈ZigBee协议栈怎么使用ZigBee协议栈?举个例子,用户实现一个简单的无线数据通信时的一般步骤:组网:调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。发送:发送节点调用协议栈的无线数据发送函数,实现无线数据发送。接收:接收节点调用协议栈的无线数据接收函数,实现无线数据接收。如何使用ZigBee协议栈ZigBee协议栈解压《ZStack-CC2530-2.3.0-1.4.0协议栈安装文件.rar》;解压得到.exe文件,双击进行安装,路径选择默认,也可以选择想要安装的位置。先来看看这个协议栈的目录:ZigBee协议栈的安装、编译与下载ZigBee协议栈components,顾名思义这个是库的文件夹,里面放了一些我们用到的ZDO,driver,hal,zcl等库的代码。Documents,放TI的开发文档的,里面很多协议栈API资料。Projects,这个文件夹放的是TI协议栈的例子程序,例子程序以project的形式存放。Tools,放上位机之类的程序,作为工具使用。ZigBee协议栈的安装、编译与下载ZigBee协议栈ZigBee协议栈App:应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容。HAL:硬件层目录,包含有与硬件相关的配置和驱动及操作函数。MAC:MAC
层目录,包含了
MAC层的参数配
置文件及其
MAC的
LIB库的函数接口文件。MT:实现通过串口可控制各层,并与各层进行直接交互。NWK:网络层目录,包含网络层配置参数文件网络层库的函数接口文件及APS层库的函数接口。OSAL:协议栈的操作系统。Profile:
Applicationframework应用框架层目录,包含AF层处理函数文件。应用框架层是应用程序和APS层的无线数据接口。Security:安全层目录,包含安全层处理函数,比如加密函数等。Services:地址处理函数目录,包括地址模式的定义及地址处理函数。Tools:工程配置目录,包括空间划分及
Z-Stack相关配置信息。ZDO:ZDO目录ZMac:MAC层目录,包括
MAC层参数配置及
MAC层
LIB库函数回调处理函数。ZMain:主函数目录,包括入口函数及硬件配置文件。Output:输出文件目录,由IARIDE自动生成。ZigBee协议栈打开工程在Projects\zstack\Samples\SampleApp\CC2530DB\xxxxx.eww(1)编译协议器的程序,在Workspace下拉框中选择“CoordinatorEB-Pro”,在工程名上点右键选择“RebuildAll”,没错误提示再下载到开发板当中。ZigBee协议栈的安装、编译与下载ZigBee协议栈(2)编译终端设备的程序选择“EndDeviceEB-Pro”编译下载即可。两个zigbee节点都下载好后,分别上电看效果。ZigBee协议栈的安装、编译与下载智能产品设计与应用主讲教师:肖俊芳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);//复制数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河南省焦作市中站区数学三下期中检测试题(含答案解析)
- 2025年河南省南阳市唐河县四年级数学第二学期期中监测试题(含答案)
- 精索静脉曲张的护理查房
- 高龄心梗支架术后护理查房
- 第三课社会生活离不开规则及答案
- 2025年绿色低碳公益创投项目设计与实施
- 2026年天津市高二历史一轮复习第4章抗日战争与解放战争测试卷
- 酒店法规试题及对应答案
- 2026下半年初中历史教资考前特训试卷及解析
- 武汉大学《大学英语》期末考试试卷(含答案)
- 船舶价格评估指南解读
- 基于STM32单片机的室内体育馆环境监控系统设计
- 2025一级消防工程师继续教育题库及答案
- 膝关节骨性关节炎阶梯治疗
- 光伏epc 合同样本
- 欧莱雅新员工培训
- 《园林工程材料演示》课件
- 建筑节能与可再生能源利用规范培训
- (高清版)JTGT 5440-2018 公路隧道加固技术规范
- 严重创伤病人时间节点管理表
- 第五章-定量遥感
评论
0/150
提交评论