资源描述
项目四ZigBee无线传感器网络栈数据通信项目四 ZigBee无线传感器网络栈数据通信 知识目标:1.掌握zigbee无线传感器网络的信道、网络号、设备类型、地址分配等知识。2.了解zigbee无线传感器网络数据包的结构和传输流程。3.掌握zigbee无线传感器网络收发数据的实现方法。项目四 ZigBee无线传感器数据通信知识目标:项目四ZigBee无线传感器数据通信技能目标:1.掌握zigbee无线传感器网络的组成及组网实现的方法。项目四 ZigBee无线传感器网络数据通信技能目标:项目四ZigBee无线传感器网络数据通信组网:调用Z-Stack协议栈提供的网络组建函数及网络加入函数,从而实现网络的建立和节点的加入。发送:当需要进行数据发送时,调用协议栈提供的无线数据发送函数,实现数据的发送。接收:当有数据包到达时,通过调用协议栈提供的无线数据接收函数,实现数据的接收。4.1 ZigBee无线数据传输组网:调用Z-Stack协议栈提供的网络组建函数及网络加入4.1.1 开发基础1设备类型在zigbee无线传感网络中存在三种逻辑设备类型:协调器(Coordinator)、路由器(Router)和终端设备(End-Device)。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础1设备类型协调器协调器是一个Zigbee网络的第一个开始的设备,或称为zigbee网络的启动或网络的建立设备。协调器节点选择一个信道和网络标志符,然后开始建立一个网络。协调器设备在网络中还可以有其他作用,比如建立安全机制、网络中的绑定的建立等等。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础1设备类型路由节点允许节点加入网络;负责数据的转发功能;一个路由节点可以与若干个路由节点或终端节点通信。Zigbee星型网络不支持Zigbee路由。一般来说,路由器需要一直处于工作状态,功耗较高,所以需要稳定连续的电源供电(区别于干电池供电)。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础1设备类型终端节点只需要负责加入已建立的指定网络即可,终端节点不具有网络维护功能。它的存储容量要求最少,所以它可以根据自己功能需要休眠或唤醒,因此为电池供电设备,其可以实现Zigbee低功耗设计。一般来说,该设备需要的内存较少(特别是内部RAM)。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础1设备类型协调节点启动时,根据定义的搜索信道(DDEFAULT_CHANLIST)和PANID(DZDAPP_CONFIG_PAN_ID)建立网络;如果PANID定义为0 xFFFF,则随机产生PANID。路由节点和终端节点启动后,搜索指定的PANID(DZDAPP_CONFIG_PAN_ID)网络,并加入网络。如果PANID定义为0 xFFFF,则可加入其他网络。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础1设备类型对每个节点有两个任务,具体如下。执行指定的网络功能函数。配置确定的参数到指定的值。网络功能的设置确定了该节点的类型,参数配置和指定的值确定了堆栈的模式。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础2堆栈模式需要被配置为指定值的堆栈参数,连同这些值被称为堆栈模式(Stack Profile)。这些堆栈模式参数被Zigbee联盟定义指定。在同一个网络中的设备必须符合同一个堆栈模式(同一个网络中所有设备的堆栈模式配置参数必须一致)。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础3信道Chanel在zigbee标准协议中,2.4GHz的射频频段被分为16个独立的信道。每一个设备都有一个-DEFAULT_CHANLIST的默认信道集(0 x0B0 x1A)4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础3信道Chanel4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础3信道Chanel f8w2530.cxl:该文件包含了CC2530单片机的链接控制指令,包括堆栈的大小、内存分配等,一般情况下不需要修改。f8wConfig.cfg:该文件包含了信道选择、网络ID号等有关的链接命令。每一个设备都有一个DEFFAULT_CHANLIST的默认信道集。要选择哪个信道,把前面的“/”注释删除,其余的保留即可。例如我们的信道默认为-DDEFAULT_CHANLIST=0 x00000800 /11-0 x0B,只需删除前面“/”注释符即可。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础4PANIDPANID指网络编号,用于区分不同的Zigbee网络。设备的PANID值由DZDAPP_CONFIG_PAN_ID来设置,如果DZDAPP_CONFIG_PAN_ID设置为0 xFFFF,则协调器将产生一个随机的PAN_ID。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础4PANID设备的PANID值由DZDAPP_CONFIG_PAN_ID来设置,如果DZDAPP_CONFIG_PAN_ID设置为0 xFFFF,则协调器将产生一个随机的PAN_ID。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础4PANID设备的PANID值由DZDAPP_CONFIG_PAN_ID来设置,如果DZDAPP_CONFIG_PAN_ID设置为0 xFFFF,则协调器将产生一个随机的PAN_ID。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.1 开发基础5描述符Zigbee网络中的所有设备都有一些描述符,用来描述设备类型和应用方式。描述符包含节点描述符、电源描述符和默认用户描述符等,通过改变这些描述符可以定义自己的设备。描述符的定义和创建配置项在文件ZDOConfig.h 和ZDOConfig.c中完成,描述符信息可以被网络中的其他设备读取。4.1 ZigBee无线数据传输4.1.1开发基础4.1ZigBee无线数据传输4.1.2 工作流程调用协议栈提供的组网函数、加入网络函数,实现网络的建立与节点的加入。发送设备调用协议栈提供的无线数据发送函数,实现数据的发送。接收设备调用协议栈提供的无线数据接收函数,实现数据的接收。4.1 ZigBee无线数据传输4.1.2工作流程4.1ZigBee无线数据传输4.1.3数据发送在Zigbee协议栈中进行数据发送可以调用AF_DataRequest函数实现,该函数会调用协议栈里面与硬件相关的函数最终将数据通过无线发送出去。只需要掌握AF_DataRequest函数的使用方法即可。afStatus_t AF_DataRequest(afAddrType_t*dstAddr,endPointDesc_t*srcEP,uint16 cID,uint16 len,uint8*buf,uint8*transID,uint8 options,uint8 radius)4.1 ZigBee无线数据传输4.1.3数据发送4.1ZigBee无线数据传输4.1.4 数据接收当协调器收到数据后,操作系统会将数据封装成一个消息,然后放入消息队列中,每个消息都有自己的消息ID,标识接收到新数据的消息的ID是AF_INCOMING_MSG_CMD,其中AF_INCOMING_MSG_CMD 的值是0 x1A,这是在Zigbee协议栈中定义好的,用户不可更改。Zigbee协议栈中AF_INCOMING_MSG_CMD 宏的定义(在ZComDef.h文件中)4.1 ZigBee无线数据传输4.1.4数据接收4.1ZigBee无线数据传输4.1.4 数据接收接收方接收成功,协议栈将触发数据包接收事件:AF_INCOMING_MSG_CMD-处理函数 SampleApp_ProcessEvent()。4.1 ZigBee无线数据传输4.1.4数据接收4.1ZigBee无线数据传输4.1.4 数据接收对方传递上来的是什么类型的数据?数据的事件类型(簇ID)由pkt-clusterId 决定。传递上来的数据内容是什么?数据内容由pkt-cmd.Data决定。4.1 ZigBee无线数据传输4.1.4数据接收4.1ZigBee无线数据传输4.2.1 Zigbee数据包的结构4.2 ZigBee数据包4.2.1Zigbee数据包的结构4.2ZigBee数4.2.2 Zigbee数据传输流程在这里可以看出在网络层管理实体一旦选择了一个PAN标识符,就会立刻选择一个0 x0000的16位网络地址,并且设置MAC层的macShortAddress PIB 属性,使其等于所选择的网络地址。网络层数据包中,体现了在网络层中的数据以及格式,网络层数据包如图4.9所示。网络层中也体现了源地址和目的地址与APS层基本相同。它们最大的不同是数据中加入了网络层包,附加了网络层数据。4.2 ZigBee数据包4.2.2Zigbee数据传输流程4.2ZigBee数4.2.3 数据包格式4.2 ZigBee数据包PFY帧PFY净荷PHR净荷SHR净荷MAC帧MHRR净荷MFRR净荷MAC净荷MHRR净荷NWK净荷AHRMIC净荷APS净荷辅助帧HDRNWK帧APS帧4.2.3数据包格式4.2ZigBee数据包PFY帧P4.3.1 串口概述1通用异步收发器UART异步串行通信接口是嵌入式系统最常用的接口,可用来与上位机或其他外部设备进行数据通信。UART是异步串行通信的总称,它允许在串行链路上进行全双工的通信,输入/输出电平为TTL电平。一般来说,全双工UART定义了一个串行发送引脚(TxD)和一个串行接收引脚(RxD),可以在同一时刻发送和接收数据。4.3 利用串口收发数据4.3.1串口概述4.3利用串口收发数据4.3.1 串口概述2同步串行口SPI和I2C串行外设端口(Serial Peripheral Interface,SPI)是一种同步串行外设端口,它与各种外围设备以串行方式进行通信、交换信息。SPI支持全双工同步传输,可选择以8或16位传输帧格式进行传输,支持多种模式。I2C总线是一个多主机的总线。这就是说I2C总线可以连接多于一个能控制它的器件。4.3 利用串口收发数据4.3.1串口概述4.3利用串口收发数据4.3.2 收发数据的实现方法初始化串口,包括设置波特率、中断等。向发送缓冲区发送数据或者从接收缓冲区读取数据。4.3 利用串口收发数据4.3.2收发数据的实现方法4.3利用串口收发数据4.3.2 收发数据的实现方法HalUARTOpen()函数原型:uint8 HalUARTOpen(uint8 port,halUARTCfg_t*config);功能描述:打开串口,对串口进行初始化。4.3 利用串口收发数据4.3.2收发数据的实现方法4.3利用串口收发数据4.3.2 收发数据的实现方法HalUARTRead()函数原型:uint8 HalUARTRead(uint8 port,uint8*buf,uint16 len);功能描述:从串口读取数据,并将其存放在buf数组中。4.3 利用串口收发数据4.3.2收发数据的实现方法4.3利用串口收发数据4.3.2 收发数据的实现方法HalUARTWrite()函数原型:uint8 HalUARTWrite(uint8 port,uint8*buf,uint len);功能描述:写信息到串口。4.3 利用串口收发数据4.3.2收发数据的实现方法4.3利用串口收发数据4.3.3 协议栈中的串口操作Zigbee协议栈中的串口操作主要分为3个步骤。1串口初始。2登记任务。3串口发送。4.3 利用串口收发数据4.3.3协议栈中的串口操作4.3利用串口收发数据4.3.3 协议栈中的串口操作Zigbee协议栈中的串口操作主要分为3个步骤。1串口初始。我们打开APP目录下的OSAL_SampleApp.c文件,找到SampleApp_Init()任务函数进行MT层串口初始化。添加MT_UartInit();语句。4.3 利用串口收发数据4.3.3协议栈中的串口操作4.3利用串口收发数据4.3.3 协议栈中的串口操作Zigbee协议栈中的串口操作主要分为3个步骤。2登记任务。就是把串口事件通过task_id登记在SampleApp_Init()里。MT_UartRegisterTaskID(task_id);/登记任务号4.3 利用串口收发数据4.3.3协议栈中的串口操作4.3利用串口收发数据4.3.3 协议栈中的串口操作3串口发送。我们在刚刚添加初始化代码的后面加入一条上面提示Hello World的语句。HalUARTWrite(0,Hello Worldn,12);(串口0,字符,字符个数)。再在预编译加入以下一些内容。ZIGBEEPROZTOOL_P1MT_TASKMT_SYS_FUNCMT_ZDO_FUNC4.3 利用串口收发数据4.3.3协议栈中的串口操作4.3利用串口收发数据4.3.3 协议栈中的串口操作提示:需要在SampleApp.c这个文件里加入#include MT_UART.h头文件语句。如果不想要的可以在预编译地方把MT相关内容注释,不再显示乱码。ZIGBEEPROZTOOL_P1xMT_TASKxMT_SYS_FUNCxMT_ZDO_FUNC4.3 利用串口收发数据4.3.3协议栈中的串口操作4.3利用串口收发数据非易失性存储器(Non Volatile,NV):即使系统断电后,存储在存储器中的数据也不会丢失。在Zigbee协议栈中NV存储器主要用于保存网络的配置参数(如网络地址等)。非易失性存储器是指能够永久保存信息的存储器,设备在意外复位或者断电的情况下不会丢失信息。协议栈在OSAL文件夹下有OSAL_Nv.h和OSAL_Nv.c文件。4.4非易失性存储器非易失性存储器(NonVolatile,NV):即使系统断4.4.1 NV操作函数osal_nv_item_init()函数原型:uint osal_nv_item_init(uint16 id,uint16 len,void*buf)功能描述:NV条目初始化函数。4.4非易失性存储器4.4.1NV操作函数4.4非易失性存储器4.4.1 NV操作函数osal_nv_write()函数原型:uint8 osal_nv_write(uint16 id,uint16 ndx,uint16 len,void*buf)。功能描述:NV写入函数。uint16 id表示NV条目ID号;uint16 ndx距离条目开始地址的偏移量;uint16 len表示要写入的数据长度;void*buf表示指向存放写入数据缓冲区的指针。4.4非易失性存储器4.4.1NV操作函数4.4非易失性存储器4.4.1 NV操作函数osal_nv_read()函数原型:uint8 osal_nv_read(uint16 id,uint16 len,void*buf)。功能描述:NV读取函数。uint16 id表示NV条目ID号;uint16 ndx距离条目开始地址的偏移量;uint16 len表示要读取的数据长度;void*buf表示存放读取数据缓冲区的指针。4.4非易失性存储器4.4.1NV操作函数4.4非易失性存储器4.4.2 NV基本操作1网络层非易失性存储器Z-Stack将一些网络相关的重要信息都存储到非易失性存储器,保证在Zigbee设备意外复位或者断电后重新启动时,设备能够自动恢复到原来网络中。为了启用这个功能,需要包含NV_RESTORE编译选项。注意,在一个最终的Zigbee网络中,这个选项必须始终启用。关闭这个选项的功能主要是为了开发调试。4.4非易失性存储器4.4.2NV基本操作4.4非易失性存储器4.4.2 NV基本操作2应用层非易失性存储器NV除了用于保存网络信息,也可以用来保存应用程序的特定信息,用户描述符就是一个很好的例子。NV中用户描述符ID项是ZDO_NV_UserDesc(在ZComDef.h定义)。在ZDApp_Init()函数中,调用函数Osal_nv_item_init()来初始化用户描述符所需要的NV空间。如果之前还没有建立这个NV空间,这个初始化函数将为用户描述符保留空间,并且将它设置为默认值ZDO_DefaultUserDescriptor。4.4非易失性存储器4.4.2NV基本操作4.4非易失性存储器4.4.2 NV基本操作2应用层非易失性存储器注意:如果用户应用程序要创建自己的NV项,那么必须从应用层范围0 x02010 x0FFF 中选择ID。4.4非易失性存储器4.4.2NV基本操作4.4非易失性存储器4.4.3 NV基础实验NV存储器主要的操作有初始化NV存储器、读NV存储器、写NV存储器。这些都在OSAL文件夹下中的OSAL_Nv.h和OSAL.h文件中定义和实现。4.4非易失性存储器4.4.3NV基础实验4.4非易失性存储器4.4.4 NV基础实验效果在ZigBee协议栈中,其他需要保存的一些常量数据都是使用上述方法将其存储到NV存储器中,这样就可以实现一些关键数据的保存,特别是网络参数的保存。4.4非易失性存储器4.4.4NV基础实验效果4.4非易失性存储器4.5.1 帧格式介绍4.5 组网验证4.5.1帧格式介绍4.5组网验证4.5.1 帧格式介绍4.5 组网验证4.5.1帧格式介绍4.5组网验证4.5.2 组网测试当终端传感器节点入网以后,协调器会给终端传感器节点分配16位的短地址。当协调器收到终端传感器节点发送的数据信息后,通过串口向PC机发送。其中,串口传输设置为:115200b/s,1位停止位,无校验位。4.5 组网验证4.5.2组网测试4.5组网验证1Zigbee无线传感器网络是大量的传感器节点以自组织或者多跳的方式构成的无线网络。无线传感器网络是大量的传感器节点以自组织或者多跳的方式构成的无线网络。2Zigbee无线传感器网络是构成物联网感知层和网络层的一部分,是物联网的重要组成部分。无线传感器网络是构成物联网感知层和网络层的一部分,是物联网的重要组成部分。3传感器负责在传感器网络中感知和采集数据,它处于传感器负责在传感器网络中感知和采集数据,它处于zigbee无线传感器网络的感知层,是识别物无线传感器网络的感知层,是识别物体、采集信息的设备。体、采集信息的设备。4Zigbee无线传感器网络由传感器节点、汇聚节点和任务管理节点等几部分组成。无线传感器网络由传感器节点、汇聚节点和任务管理节点等几部分组成。5Zigbee无线传感器网络的协议栈主要分为物理层、数据链路层(无线传感器网络的协议栈主要分为物理层、数据链路层(MAC)、网络层、传输层和应)、网络层、传输层和应用层用层5层。层。小结1Zigbee无线传感器网络是大量的传感器节点以自组织或者Thanks物联网应用的精彩未来有待你的参与物联网应用的精彩未来有待你的参与Thanks物联网应用的精彩未来有待你的参与
展开阅读全文