物联网系列专业课程之ZStack无线协议栈培训教学课件(共51p)

上传人:29 文档编号:232645756 上传时间:2023-09-23 格式:PPT 页数:52 大小:541KB
返回 下载 相关 举报
物联网系列专业课程之ZStack无线协议栈培训教学课件(共51p)_第1页
第1页 / 共52页
物联网系列专业课程之ZStack无线协议栈培训教学课件(共51p)_第2页
第2页 / 共52页
物联网系列专业课程之ZStack无线协议栈培训教学课件(共51p)_第3页
第3页 / 共52页
点击查看更多>>
资源描述
2023/9/23/1ZStack无线协议栈中智讯(武汉)科技有限公司2023/9/23/2ZStack无线协议栈ZStack sapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验2023/9/23/3ZStack协议栈概述TI公司开发的ZStack是ZigBee协议栈,并且经过了ZigBee联盟的认可而为全球众多开发商所广泛采用;TI公司的ZStack协议栈装载在一个基于IAR开发环境的工程里;ZStack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式,如果同时有几个事件发生,判断优先级,逐次处理事件,这种软件构架可以极大地降级系统的功耗。定义Zigbee是IEEE802.15.4协议的代名词,根据这个协议规定的一种短距离、低功耗的无线通信技术2023/9/23/4ZStack协议栈ZStack实际上是帮助程序员方便开发ZigBee的一套系统整个ZStack采用分层的软件结构硬件抽象层(HAL)提供各种硬件模块的驱动,包括定时器Timer,通用I/O口GPIO,通用异步收发传输器UART,模数转换ADC的应用程序接口API,提供各种服务的扩展集操作系统抽象层OSAL实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用OSAL提供的相关API进行多任务编程,将自己的应用程序作为一个独立的任务来实现2023/9/23/5ZStack源码工程架构APP(Application Programming):应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。HAL(Hardware(H/W)Abstraction Layer):硬件层目录,包含有与硬件相关的配置和驱动及操作函数。MAC:MAC 层目录,包含了MAC 层的参数配置文件及其MAC 的LIB 库的函数接口文件。MT(Monitor Test):实现通过串口可控各层,与各层进行直接交互。NWK(ZigBee Network Layer):网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS 层库的函数接口。OSAL(Operating System(OS)Abstraction Layer):协议栈的操作系统。2023/9/23/6ZStack源码工程架构Profile:AF(Application work)层目录,包含AF 层处理函数文件。Security:安全层目录,安全层处理函数,比如加密函数等。Services:地址处理函数目录,包括着地址模式的定义及地址处理函数。Tools:工程配置目录,包括空间划分及ZStack 相关配置信息。ZDO(ZigBee Device Objects):ZDO 目录。ZMac:MAC 层目录,包括MAC 层参数配置及MAC 层LIB 库函数回调处理函数。ZMain:主函数目录,包括入口函数及硬件配置文件。Output:输出文件目录,这个EW8051 IDE 自动生成的。2023/9/23/7ZStack网络路由ZStack采用无线自组网按需平面距离矢量路由协议AODV,建立一个ad-hoc网络,支持节点的移动,链接失败和数据丢失,能够自组织和自修复;当一个Router接受到一个信息包之后,NMK层将会进行以下的工作:首先确认目的地,如果目的地就是这个Router的邻居,信息包将会直接传输给目的设备;否则,Router将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表条目,信息包将会被传递到该条目中所存储的下一个hop地址;如果找不到有效的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的路由信息;ZigBee End Device(终端设备)不会执行任何路由函数,它只是简单的将信息传送给前面的可以执行路由功能的父设备。因此,如果End Device想发送信息给另外一个End Device,在发送信息之间将会启动路由探测功能,找到相应的父路由节点。2023/9/23/8ZStack软件流程整个ZStack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段:否是否是开始关中断初始化存储器初始化IO初始化HAL层驱动初始化NVFlash初始化MAC层分配64位长地址读取NV初始化OSAL开中断设置Timer在LCD显示设备信息OSAL任务轮询主循环调用事件处理函数有事件发生比较优先级是否结束高低2023/9/23/9ZStack事件轮询机制事件标志位轮询多级任务调度机制2023/9/23/10主函数main()main函数存在于Zmain文件当中,先是从main函数开始运行的,main函数实现的功能是,初始化硬件、初始化网络(加入/创建网络)、初始化任务列表、进入任务处理循环int main()主函数实现硬件的初始化其中包括关总中断osal_int_disable(INTS_ALL)初始化板上硬件设置HAL_BOARD_INIT()初始化I/O口InitBoard(OB_COLD)初始化HAL层驱动HalDriverInit()初始化非易失性存储器sal_nv_init(NULL)初始化MAC层ZMacInit()分配64位地址zmain_ext_addr()初始化操作系统osal_init_system()等2023/9/23/11OSAL系统完成上述初始化后,开中断执行osal_start_system()函数开始运行OSAL系统任务调度函数按照优先级检测各个任务是否就绪,如果存在就绪的任务,则调用tasksArr 中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗osal_start_system()一旦执行,则不再返回main()函数开始任务调度判断下一个任务状态调用任务事件处理程序任务激活否是2023/9/23/12ZStack工程配置文件ZStack源码工程内提供了一些配置文件:2023/9/23/13ZStack工程配置文件f8w2530.xcl-cc2530处理器的链接脚本文件f8wConfig.cfg-ZStack通用配置文件-DZIGBEEPRO#启用ZigBeePro协议栈-DREFLECTOR#允许绑定-DDEFAULT_CHANLIST#选择默认频道,通过在f8wConfig.cfg里面解除注释对应行来选择频道-DZDAPP_CONFIG_PAN_ID#通过改变PAN_ID来识别同一个频道里的不同ZigBee网络。-DRFD_RCVC_ALWAYS_ON=FALSE#当该选项为FALSE时,允许终端节点睡眠,否则,不允许。.f8wCoord.cfg -协调器的基本配置文件f8wRouter.cfg -路由器的基本配置文件f8wEndev.cfg-终端的基本配置文件CPU32MHZ#cc2530的系统时钟频率设为32MHzZDO_COORDINATOR#含协调器功能RTR_NWK#含路由功能.2023/9/23/14ZStack工程配置宏ZStack工程options里面的常用自定义配置宏定义前加“x”表示为false2023/9/23/15ZStack工程配置宏HOLD_AUTO_START#如果使用HOLD_AUTO_START选项,那么就会禁止自动初始化网络。BUILD_ALL_DEVICES#将协调器和路由器一起编译到一个hex文件里,然后启动时自动检测跳线是否设置为协调器,如果是,这设备为协调器,否,则为路由器REFLECTOR#允许绑定NV_INIT#保存网络或者节点的配置参数到nv(非易失性flash)里面,在节点运行中这些参数很少变化或者几乎不会有变化。NV_INIT选项保存的所有参数可以在结构体zgItemTable中查看到。NV_RESTORE#节点在掉电或者复位之后通过NV不需要无线电通讯就可以恢复到之前的网络连接状态。NV_RESTORE保存的内容主要有网络层数据库NIB、设备关联表、绑定表、路由表等。ZTOOL_Px#允许串口Px收发ZTOOL信息(x=1,2)MT_TASK#开启MT(MonitorandTest)任务,MT是TI为开发者提供的PC与协议栈运行状况进行通信的接口,利用TI提供的工具Z-tool,通过串口的方式与运行协议栈的设备进行信息的交互,下达指令、反馈信息MT_SYS_FUNC#允许MT处理系统命令MT_SAPI_FUNC#允许MT处理SAPI命令MT_SAPI_CB_FUNC#允许MT处理SAPI返回信息2023/9/23/16ZStack无线协议栈ZStack sapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验2023/9/23/17ZStack例程ZStack官方提供了一些组网的示例工程:C:Texas InstrumentsZStack-CC2530-2.4.0-1.4.0ProjectszstackSamples按照程序框架,可以分为两大类:第一类是GenericApp和SampleApp,第二类是SimpleApp,从下面两张图可以看出来。2023/9/23/18ZStack例程GenericApp例程提供了一个几乎最简单的例子,来说明程序是怎么启动和发送信息的。SampleApp采用按键来控制工作组内节点的LED灯闪烁,当这个节点跟别的节点在同一个工作组内时,别的节点可以控制此模块的LED灯闪烁。SimpleApp跟GenericApp不同,它使用了ZStack提供的sapi接口,sapi就是system application Programming interface。这是TI把一般系统要用到的通用的代码整合到sapi.c里面,而留下一些接口出来,只要我们完成了这些接口的实现,那么我们就可以快速实现我们的应用,十分方便。2023/9/23/19sapi接口-zb_HandleOsalEvent函数zb_HandleOsalEvent函数作用当一个任务事件发生了之后,调用这个函数参数event:产生的时间返回无示例通过自己自定义一个事件来增加自己想要增加的功能voidzb_HandleOsalEvent(uint16event)if(event&MY_REPORT_EVT)myReportData();osal_start_timerEx(sapi_TaskID,MY_REPORT_EVT,REPORT_DELAY);2023/9/23/20sapi接口-zb_HandleKeys函数zb_HandleKeys函数作用处理设备产生的按键事件参数shift:转移标志;keys:按下的按键返回无示例如果按下按键1,闪烁LED1.voidzb_HandleKeys(uint8shift,uint8keys)if(shift)if(keys&HAL_KEY_SW_1)HalLedSet(HAL_LED_1,HAL_LED_MODE_BLINK);.2023/9/23/21sapi接口-zb_StartConfirm函数zb_StartConfirm函数作用当zstack启动完成后,执行这个函数参数status:启动完成后的状态返回无示例如果ZB成功启动,更改myAppState状态为APP_START,否则重新启动voidzb_StartConfirm(uint8status)if(status=ZB_SUCCESS)myAppState=APP_START;elseosal_start_timerEx(sapi_TaskID,MY_START_EVT,myStartRetryDelay);2023/9/23/22sapi接口-zb_SendDataConfirm函数zb_SendDataConfirm函数作用发送数据完成后调用这个函数参数handle:发送的数据的类型;status:发送操作后的状态返回无示例如果信息发送不成功,重新发送voidzb_SendDataConfirm(uint8handle,uint8status)if(status!=ZSuccess)zb_BindDevice(FALSE,SENSOR_REPORT_CMD_ID,(uint8*)NULL);myAppState=APP_START;/SensorhasjoinednetworkmyApp_StopReporting();osal_start_timerEx(sapi_TaskID,MY_FIND_COLLECTOR_EVT,1);2023/9/23/23sapi接口-zb_ReceiveDataIndication函数zb_ReceiveDataIndication函数作用当zigbee接受到节点发送的数据后,调用这个函数参数source:源地址;commandID:命令ID;len:收到数据的长度;pData:收到的数据返回无示例当接收到亮灯命令时,反转LED1voidzb_ReceiveDataIndication(uint16source,uint16command,uint16len,uint8*pData)if(command=TOGGLE_LIGHT_CMD_ID)HalLedSet(HAL_LED_1,HAL_LED_MODE_TOGGLE);2023/9/23/24ZStack发送无线数据包ZStack调用zb_SendDataRequest函数进行数据包的发送#函数声明:voidzb_SendDataRequest(uint16destination,uint16commandId,uint8len,uint8*pData,uint8handle,uint8txOptions,uint8radius)#调用示例:/将节点信息进行封装dat0=0 xff;dat1=(sAddr8)&0 xff;dat2=sAddr&0 xff;dat3=(pAddr8)&0 xff;dat4=pAddr&0 xff;dat5=MYDEVID;/将数据包发送给协调器zb_SendDataRequest(0,ID_CMD_REPORT,6,dat,0,AF_ACK_REQUEST,0);2023/9/23/25ZStack用户事件除了系统事件,用户也可以自定义事件,用户事件值只能设置为0 x00000 x00FF,大于0 xFF的是系统事件通过osal_start_timerEx(uint8 taskID,uint16 event_id,uint16 timeout_value);函数可以产生用户事件#defineMY_REPORT_TEMP_EVT0 x0002/5000ms后启动MY_REPORT_TEMP_EVT事件osal_start_timerEx(sapi_TaskID,MY_REPORT_TEMP_EVT,5000);2023/9/23/26ZStack用户事件#如果想要让节点在启动后自动产生这个事件,可以在zb_StartConfirm里添加osal_start_timerEx函数,如voidzb_StartConfirm(uint8status)if(status=ZB_SUCCESS)myAppState=APP_START;osal_start_timerEx(sapi_TaskID,MY_REPORT_TEMP_EVT,5000);#如果想要这个事件每隔一段时间自动产生一次,则需要在时间处理函数后加上osal_start_timerEx函数,如voidzb_HandleOsalEvent(uint16event).if(event&MY_REPORT_TEMP_EVT)/ReadandreporttemperaturevaluepData0=TEMP_REPORT;pData1=myApp_ReadTemperature();zb_SendDataRequest(0 xFFFE,SENSOR_REPORT_CMD_ID,2,pData,0,AF_ACK_REQUEST,0);osal_start_timerEx(sapi_TaskID,MY_REPORT_TEMP_EVT,myTempReportPeriod);2023/9/23/27ZStack无线协议栈ZStack sapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验2023/9/23/28多点自组网网络的组建过程如图所示,其中发送的数据格式为:FF源节点(16bit)父节点(16bit)节点编号ID(8bit)启动协调器节点(组网)启动路由节点和终端节点(入网)周期发送自己的短地址和父节点短地址串口查看数据,并分析网络拓扑static void myReportData(void)byte dat6;uint16 sAddr=NLME_GetShortAddr();uint16 pAddr=NLME_GetCoordShortAddr();HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);HalLedSet(HAL_LED_1,HAL_LED_MODE_BLINK);dat0=0 xff;dat1=(sAddr8)&0 xff;dat2=sAddr&0 xff;dat3=(pAddr8)&0 xff;dat4=pAddr&0 xff;dat5=MYDEVID;zb_SendDataRequest(0,ID_CMD_REPORT,6,dat,0,AF_ACK_REQUEST,0);2023/9/23/29多点自组网2023/9/23/30广播/组播协调器节点上电后进行组网操作,终端和路由节点上电和进行入网操作,网络组建成功后,协调器节点周期性的向网络中的节点广播或组播信息,终端或路由节点收到信息后在串口上打印出来。当应用层想发送一个数据包到网络中的所有设备时使用广播传输模式,目的地址被设置为下列值之一:NWK_BROADCAST_SHORTADDR_DEVALL(0 xFFFF)信息将被发送到网络中的所有设备(包括休眠的设备)NWK_BROADCAST_SHORTADDR_DEVRXON(0 xFFFD)信息将被发送到网络中有接收器并处于非休眠状态当应用层想发送一个数据包到一个设备组的时候使用组播模式,为实现组播模式,需设置地址模式为afAddrGroup。在网络中需预先定义组,并将目标设备加入已存在的组(具体参考ZStack API文档中的 aps_AddGroup())。广播可以看作是组播的特例,因为广播相当于所有节点都在一个组内。2023/9/23/31广播/组播当应用层想发送一个数据包到一个设备组的时候使用组播模式,为实现组播模式,需设置地址模式为afAddrGroup。在网络中需预先定义组,并将目标设备加入已存在的组(具体参考ZStack API文档中的 aps_AddGroup())。Group_DstAddr.addrMode=(afAddrMode_t)afAddrGroup;Group_DstAddr.endPoint=MY_ENDPOINT_ID;Group_DstAddr.addr.shortAddr=SIMPLEAPP_GROUP;/By default,all devices start out in Group 1 Group1.ID=0 x0001;osal_memcpy(Group1.name,Group 1,7 );aps_AddGroup(MY_ENDPOINT_ID,&Group1);组播实验结果:加入组的终端节点和路由节点都能收到协调器发送的“Hello World”。2023/9/23/32网络拓扑ZigBee有三种网络拓扑,即星形、树形和网状网络。星形网络中,所有节点只能与协调器进行通信,而他们相互之间的通信是禁止的;树形网络中,终端节点只能与它的父节点通信,路由节点可与它的父节点和子节点通信;网状网络中,全功能节点之间是可以相互通信的。通过设置宏定义修改HOME_CONTROLS(在nwk_globals.h中定义)的网络模式(NWK_MODE),来选择不同的网络拓扑。设定数组 CskipRtrs 和 CskipChldrn 的值进一步控制网络的形式。CskipChldrn 数组的值代表每一级可以加入的子节点的最大数目,CskipRtrs 数组的值代表每一级可以加入的路由节点的最大数目。2023/9/23/33网络拓扑星状网:NWK_MODE设置为NWK_MODE_STAR;CskipRtrsMAX_NODE_DEPTH+1=5,0,0,0,0,0,CskipChldrnMAX_NODE_DEPTH+1=10,0,0,0,0,0,代表只有协调器允许节点加入,且协调器最多允许10 个子节点加入,其中最多5个路由节点,剩余的为终端节点。树状网:NWK_MODE设置为NWK_MODE_TREE;CskipRtrsMAX_NODE_DEPTH+1=1,1,1,1,1,0,CskipChldrnMAX_NODE_DEPTH+1=2,2,2,2,2,0。Mesh网:NWK_MODE设置为NWK_MODE_MESH;CskipRtrsMAX_NODE_DEPTH+1=6,6,6,6,6,0,CskipChldrnMAX_NODE_DEPTH+1=20,20,20,20,20,0,协议栈默认。2023/9/23/34网络拓扑星状网树状网2023/9/23/35绑定通过绑定使两个节点在应用层上建立起来的一条逻辑链路。在同一个节点上可以建立多个绑定服务,分别对应不同种类的数据包。此外,绑定也允许有多个目标节点(一对多绑定)。在一个灯光网络中,有多个开关和灯光设备,每一个开关可以控制一个或以上的灯光设备。在这种情况下,需要在每个开关中建立绑定服务。这使得开关中的应用服务在不知道灯光设备确切的目标地址时,可以顺利地向灯光设备发送数据包。绑定服务只能在“互补”设备之间建立。那就是,只有分别在两个节点的简单描述结构体(simple descriptor structure)中,同时注册了相同的命令标识符(command_id)并且方向相反(一个属于输出指令“output”,另一个属于输入指令“input”),才能成功建立绑定。2023/9/23/36绑定应用例子工程有作为终端设备的简单开关配置和作为协调器或路由器设备的简单管理器配置。对于灯管理器设备,按下K4它将使该设备作为协调器启动,期间要是按下K5它将使该设备作为路由器启动。对于开关设备而言,无论是按下K4还是K5都将作为终端设备启动。(确保只能有一个管理器作为协调器,其他都作为路由器。)采用下面的控制方式来创建绑定:通过按某个管理器的K4使它进入允许绑定模式。在某个灯开关上按下K4(10 秒之内)发出绑定请求。这就将使该开关设备绑定到该(处于绑定模式下的)管理器设备上。当开关绑定成功时,(开关设备上的)D7亮。之后,开关设备上的K5被按下就将发送“切换”命令。它将使对应的管理器设备上的D7状态切换。2023/9/23/37ZStack无线协议栈ZStack sapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验2023/9/23/38ZStack通信协议ZigBee设备组网后,通过协调器汇集数据,协调器通过串口与上位机通信。ZStack协议栈定义了协调器与上位机的数据通信协议串口设置:波特率(38400bps),数据位(8bit),奇偶校验(无),停止位(1)节点一节点二节点三协调器上位机2023/9/23/39通信数据包格式标示帧头长度命令数据校验SOPLENCMDDATAFCS长度(B)112N1#数据帧说明:SOP:固定为0 xFELEN:DATA的长度CMD:2900/上位机发送数据到协调器 6900/协调器接收到正确指令后的响应帧6980/协调器发送数据到上位机2023/9/23/40通信数据包格式标示帧头长度命令数据校验SOPLENCMDDATAFCS长度(B)112N1#数据帧说明:DATA:通信的数据 1)响应帧数据:若数据为响应帧,DATA为1个字节,00表示ture,01表示false2)用户的数据:上位机发数据到协调器,DATA格式如下:02+NA+APP_CMD(2字节)+APP_DATA协调器发数据到上位机,DATA格式如下:NA+APP_CMD(2字节)+APP_DATA(其中NA为节点2字节的网络地址)APP_CMD:00 00/协调器与上位机之间数据的通信命令APP_DATA:传感器数据格式为类json格式数据,比如:A0=?FCS:从LEN(包含)到DATA的字节异或和校验值2023/9/23/41通信数据包格式标示帧头长度命令数据校验SOPLENCMDDATAFCS长度(B)112N1#特殊数据帧说明:1)协调器根据给定的MAC地址,查询网络地址上位机向协调器发送查询指令,DATA数据格式:02+NA(协调器网络地址00 00)+APP_CMD(01 01)+APP_DATA(要查询节点的MAC地址,8个字节)协调器返回数据,DATA数据格式:NA(协调器网络地址00 00)+APP_CMD(01 01)+APP_DATA(要查询节点的MAC地址,8个字节)+NA1(返回查询到的节点网络地址,2个字节)2)协调器根据给定的网络地址,查询MAC地址上位机向协调器发送查询指令,DATA数据格式:02+NA(协调器网络地址00 00)+APP_CMD(01 02)+APP_DATA(要查询节点的网络地址,2个字节)协调器返回数据,DATA数据格式:NA(协调器网络地址00 00)+APP_CMD(01 02)+APP_DATA(要查询节点的网络地址,2个字节)+NA1(返回查询到的节点MAC地址,8个字节)2023/9/23/42示例说明:上位机往协调器下行发送数据上位机向协调器发送查询数据的指令FE 0B 29 00 02 A0 63 00 00 7B 41 30 3D 3F 7D 96FE#SOP0B#LEN(027D)29 00#CMD02#上位机发送数据到协调器,固定值:02A0 63#网络地址00 00#正常数据命令7B 41 30 3D 3F 7D#数据包:A0=?96#校验和(0B7D)2023/9/23/43示例说明:上位机往协调器下行发送数据上位机收到协调器的响应帧FE 01 69 00 00 68FE#SOP01#LEN(00)69 00#CMD00#响应帧状态:00表示ture,01表示false68#校验和(0100)2023/9/23/44示例说明:上位机往协调器下行发送数据上位机收到协调器返回来的数据FE 0D 69 80 A0 63 00 00 7B 41 30 3D 32 34 2E 38 7D 7DFE#SOP0D#LEN(A07D)69 80#CMDA0 63#网络地址00 00#正常数据命令7B 41 30 3D 32 34 2E 38 7D#数据包:A0=24.87D#校验和(0D7D)2023/9/23/45示例说明:上位机往协调器发送查询节点网络地址上位机向协调器发送查询网络地址的指令FE 0D 29 00 02 00 00 01 01 00 12 4B 00 02 CB A9 C7 D8FE#SOP0D#LEN(02C7)29 00#CMD02#上位机发送数据到协调器,固定值:0200 00#协调器网络地址00 0001 01#查询网络地址命令00 12 4B 00 02 CB A9 C7#数据包:要查询节点的MAC地址D8#校验和(0DC7)2023/9/23/46示例说明:上位机往协调器发送查询节点网络地址上位机收到协调器发送过来网络地址的数据FE 0E 69 80 00 00 01 01 00 12 4B 00 02 CB A9 C7 15 AA A6FE#SOP0E#LEN(00AA)69 80#CMD00 00#协调器网络地址00 0001 01#查询网络地址命令00 12 4B 00 02 CB A9 C7 15 AA#数据包:节点MAC地址+要查询的节点网络地址A6#校验和(0EAA)2023/9/23/47示例说明:上位机往协调器发送查询节点MAC地址上位机往协调器发送查询节点MAC地址FE 07 29 00 02 00 00 01 02 15 AA 90FE#SOP07#LEN(02AA)29 00#CMD02#上位机发送数据到协调器,固定值:0200 00#协调器网络地址00 0001 02#查询MAC地址命令15 AA#数据包:要查询节点的网络地址90#校验和(07AA)2023/9/23/48示例说明:上位机往协调器发送查询节点网络地址上位机收到协调器发送过来MAC地址的数据FE 0E 69 80 00 00 01 02 15 AA 00 12 4B 00 02 CB A9 C7 A5FE#SOP0E#LEN(00C7)69 80#CMD00 00#协调器网络地址00 0001 02#查询MAC地址命令15 AA 00 12 4B 00 02 CB A9 C7#数据包:节点网络地址+要查询的节点MAC地址2023/9/23/49ZStack无线协议栈ZStack sapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验2023/9/23/50ZigBee设备通信实验给实训板卡节点一和节点二刷出厂镜像,节点三刷协调器程序镜像节电三通过串口连接电脑,上电组网,打开串口程序,通过上位机发送指令获取节点的网络地址根据ZStack通信协议从串口终端收发数据,掌握协议编码:通过上位机查询温湿度值,命令为:A0=?,A1=?通过上位机控制RGB LED开关,命令为:开灯,OD1=3,D1=?;关灯,CD1=3,D1=?2023/9/23/51激励学生学习的名言格言激励学生学习的名言格言220、每一个成功者都有一个开始。勇于开始,才能找到成功的路。221、世界会向那些有目标和远见的人让路(冯两努香港著名推销商)222、绊脚石乃是进身之阶。223、销售世界上第一号的产品不是汽车,而是自己。在你成功地把自己推销给别人之前,你必须百分之百的把自己推销给自己。224、即使爬到最高的山上,一次也只能脚踏实地地迈一步。225、积极思考造成积极人生,消极思考造成消极人生。226、人之所以有一张嘴,而有两只耳朵,原因是听的要比说的多一倍。227、别想一下造出大海,必须先由小河川开始。228、有事者,事竟成;破釜沉舟,百二秦关终归楚;苦心人,天不负;卧薪尝胆,三千越甲可吞吴。229、以诚感人者,人亦诚而应。230、积极的人在每一次忧患中都看到一个机会,而消极的人则在每个机会都看到某种忧患。231、出门走好路,出口说好话,出手做好事。232、旁观者的姓名永远爬不到比赛的计分板上。233、怠惰是贫穷的制造厂。234、莫找借口失败,只找理由成功。(不为失败找理由,要为成功找方法)235、如果我们想要更多的玫瑰花,就必须种植更多的玫瑰树。236、伟人之所以伟大,是因为他与别人共处逆境时,别人失去了信心,他却下决心实现自己的目标。237、世上没有绝望的处境,只有对处境绝望的人。238、回避现实的人,未来将更不理想。239、当你感到悲哀痛苦时,最好是去学些什么东西。学习会使你永远立于不败之地。240、伟人所达到并保持着的高处,并不是一飞就到的,而是他们在同伴们都睡着的时候,一步步艰辛地向上爬241、世界上那些最容易的事情中,拖延时间最不费力。242、坚韧是成功的一大要素,只要在门上敲得够久、够大声,终会把人唤醒的。243、人之所以能,是相信能。244、没有口水与汗水,就没有成功的泪水。245、一个有信念者所开发出的力量,大于99个只有兴趣者。246、环境不会改变,解决之道在于改变自己。247、两粒种子,一片森林。248、每一发奋努力的背后,必有加倍的赏赐。249、如果你希望成功,以恒心为良友,以经验为参谋,以小心为兄弟,以希望为哨兵。250、大多数人想要改造这个世界,但却罕有人想改造自己。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!