传感网应用开发(高级)课件44-基于Z-Stack的点对多点通信_第1页
传感网应用开发(高级)课件44-基于Z-Stack的点对多点通信_第2页
传感网应用开发(高级)课件44-基于Z-Stack的点对多点通信_第3页
传感网应用开发(高级)课件44-基于Z-Stack的点对多点通信_第4页
传感网应用开发(高级)课件44-基于Z-Stack的点对多点通信_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、“1+X”传感网应用开发 ZigBee协议栈组网开发“1+X”传感网应用开发 基于Z-Stack的点对多点通信基于Z-Stack的点对多点通信01单播通信组网02组播通信组网03广播通信组网目录CONTENTS01单播通信组网02组播通信组网03广播通信组网目录CONT【任务要求】任务一:采用2个ZigBee模块,分别作为协调器和终端。终端采用单播的方式向协调器发送数据。(单播)任务二:采用3个ZigBee模块,分别作为协调器、路由器1和路由器2,其协调器和路由器1的组号设置为0 x0001,路由器2的组号设置为0 x0003,测试组播通信。(组播)任务三:采用3个ZigBee模块,分别作为协

2、调器、路由器和终端,协调器向外周期性地发送数据,路由器和终端接收数据,测试广播通信。(广播)【任务要求】任务一:采用2个ZigBee模块,分别作为协调器【知识链接】在ZigBee无线传感网络中,数据通信主要有单播、组播和广播三种类型,用户可以根据通信的需要灵活采用某种通信方式。单播表示网络中两个节点之间进行数据发送与接收的过程。组播,又称多播,表示网络中一个节点发送的数据包时,只有与该节点属于同一组的节点,才能收到该数据包。广播表示一个节点发送的数据包,网络中所有节点都可以收到。【知识链接】在ZigBee无线传感网络中,数据通信主要有单播【知识链接】复习一下之前学习的 Zigbee协议栈进行数

3、据发送的函数: AF_DataRequest( afAddrType_t *dstAddr, /目的地址指针 endPointDesc_t *srcEP, /发送节点的端点描述符指针 uint16 cID, /ClusID 簇ID号 uint16 len, /发送数据的长度 uint8 *buf, /指向存放发送数据的缓冲区指针 uint8 *transID,/传输序列号 uint8 options, /发送选项 uint8 radius /最大传输半径(发送的跳数))【知识链接】复习一下之前学习的 Zigbee协议栈进行数据发【知识链接】参数1:afAddrType_t *dstAddr,

4、/目的地址指针 该参数包含了目的节点的网络地址、端点号及数据传送的模式,如单播、广播或多播等。 afAddrType_t 是个结构体如下: typedef struct union uint16 shortAddr; /用于标识该节点网络地址的变量 addr; afAddrMode_t addrMode; /用于指定数据传送模式,单播、多 播还是广播 byte endPoint; /端点号 afAddrType_t; / 其定义在AF.h中【知识链接】参数1:afAddrType_t *dstAd【知识链接】afAddrMode_t addrMode就是用于指定数据传送模式,是个枚举类型,可以

5、设置为以下几个值:typedef enum afAddrNotPresent = AddrNotPresent, /表示通过绑定关系指定目的地址 afAddr16Bit = Addr16Bit, /单播发送 afAddrGroup = AddrGroup, /组播 afAddrBroadcast = AddrBroadcast /广播 afAddrMode_t;enum AddrNotPresent = 0, AddrGroup = 1, Addr16Bit = 2, Addr64Bit = 3, AddrBroadcast = 15;3种不同的通信模式,我们要设置哪些参数呢?【知识链接】af

6、AddrMode_t addrMode就【知识链接】其实单播有两种方式:一种是绑定传输my_DstAddr.addrMode=(afAddrMode_t) AddrNotPresent一种是直接指定目标地址的单播传输,比如协调器就是0 x0000。绑定后面再学吧!【知识链接】其实单播有两种方式:绑定后面再学吧!【知识链接】单播配置步骤:一、自定义点对点通信地址结构体变量(单播)afAddrType_t SampleApp_PTP_DstAddr; /单播二、对自定义的单播结构体变量进行填充SampleApp_PTP_DstAddr.addrMode = (afAddrMode_t)Addr16

7、Bit; /单播通信模式SampleApp_PTP_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; /端口号SampleApp_PTP_DstAddr.addr.shortAddr = 0 x0000; /发送目标地址三、簇的定义和修改簇代通信协议中表示某种(类)命令SampleApp.h文件中:#define SAMPLEAPP_MAX_CLUSTERS 3 /由2修改为3#define SAMPLEAPP_PTP _CLUSTERID 3 /定义点对点数据传输命令【知识链接】单播配置步骤:【知识链接】单播配置步骤:SampleApp.c文件中:const cI

8、d_t SampleApp_ClusterListSAMPLEAPP_MAX_CLUSTERS = SAMPLEAPP_PERIODIC_CLUSTERID, SAMPLEAPP_FLASH_CLUSTERID, SAMPLEAPP_PTP _CLUSTERID /添加点对点簇命令;【知识链接】单播配置步骤:【知识链接】单播配置步骤:四、编写PTP数据发送数据SampleApp.c文件中:void SampleApp_SendPTPMessage(void) uint8 data6 = NEWLab; if ( AF_DataRequest( &SampleApp_PTP_DstAddr, &

9、SampleApp_epDesc, SAMPLEAPP_PTP_CLUSTERID, 6, data, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) = afStatus_SUCCESS ) else / Error occurred in request to send. 【知识链接】单播配置步骤:【知识链接】单播配置步骤:五、使终端周期性地向协调器发送数据SampleApp.c文件中:if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) / Send the periodic mes

10、sage /SampleApp_SendPeriodicMessage(); 注释掉 SampleApp_SendPTPMessage(); /调用PTP发送函数 / Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0 x00FF) ); / return unpro

11、cessed events return (events SAMPLEAPP_SEND_PERIODIC_MSG_EVT); 【知识链接】单播配置步骤:【知识链接】单播配置步骤:六、配置接收(消息处理)函数SampleApp.c文件中:void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) uint16 flashTime; switch ( pkt-clusterId ) case SAMPLEAPP_PERIODIC_CLUSTERID: break; case SAMPLEAPP_FLASH_CLUSTERID: flashTi

12、me = BUILD_UINT16(pkt-cmd.Data1, pkt-cmd.Data2 ); HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) ); break; case SAMPLEAPP_PTP_CLUSTERID: if(osal_memcmp(pkt-cmd.Data0,NEWLab,6) /判断接收数据是否为NEWLab HAL_TOGGLE_LED2(); /每收到正确数据1次,LED2取反1次 break; 【知识链接】单播配置步骤:【知识链接】单播配置步骤:七、禁止协调器发数据给自己SampleApp.c文件中:case ZD

13、O_STATE_CHANGE: SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); if ( /(SampleApp_NwkState = DEV_ZB_COORD) /禁止协调器发数据给自己 | (SampleApp_NwkState = DEV_ROUTER) | (SampleApp_NwkState = DEV_END_DEVICE) ) / Start sending the periodic message in a regular interval. osal_start_timerEx( SampleApp_TaskID

14、, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); 【知识链接】单播配置步骤:【任务要求】任务一:采用2个ZigBee模块,分别作为协调器和终端。终端采用单播的方式向协调器发送数据。(单播)【任务要求】任务一:采用2个ZigBee模块,分别作为协调器【任务实施】第一步,打开Z-Stack的SampleApp.eww工程。在路径C:Texas InstrumentsZStack-CC2530-2.5.1aProjectszstackSamplesSampleAppCC2530DB目录下找到Sample

15、App.eww工程,双击SampleApp.eww文件,打开工程。第二步,协调器通过串口向PC机发送数据。1. 通过串口线,把协调器模块与PC机连接起来。2. 编写协调器的程序。采用MT层配置串口,简化操作流程,因此协调器程序主要包括串口初始化、任务注册和串口数据发送三个部分。具体程序代码见本教材资源。3. 向协调器烧录程序。每复位一次协调器,都会向PC机发送一次数据,则在串口调试软件上显示一行“NEWLab”字符,如图所示。注意:在IAR的Workspace栏要记得选择“CoordinatorEB”(协调器),再编辑,烧录。【任务实施】第一步,打开Z-Stack的SampleApp.【小结】

16、单播配置步骤:一、自定义点对点通信地址结构体变量(单播)二、对自定义的单播结构体变量进行填充三、簇的定义和修改四、编写PTP数据发送数据五、使终端周期性地向协调器发送数据六、配置接收(消息处理)函数七、禁止协调器发数据给自己【小结】单播配置步骤:【知识链接】组播:当应用程序需要将数据包发送给网络上的一组设备时,使用该模式。配置思路:地址模式设置为afAddrGroup 并且addr.shortAddr 设置为组ID。节点要加入特定的组【知识链接】组播:当应用程序需要将数据包发送给网络上的一组设【知识链接】组播配置步骤:一、首先声明一个组对象SampleApp.c文件中:aps_Group_t

17、SampleApp_Group;aps_Group_t结构体的定义:typedef struct uint16 ID; / Unique to this table uint8 nameAPS_GROUP_NAME_LEN; / #define APS_GROUP_NAME_LEN 16 aps_Group_t;每个组有个特定的ID跟组名,组名存放在name数组中,name数组的第一个元素是组名的长度,第二个元素开始存放组名字符串。【知识链接】组播配置步骤:【知识链接】组播配置步骤:二、对SampleApp_Group赋值SampleApp_Group.ID = 0 x0001; /初始化组I

18、Dosal_memcpy( SampleApp_G, “Group 1”, 7 ); /将组名的长度写入name数组的第一个元素位置处三、在本任务里将端点加入到组中aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );四、设定通信的目标地址及模式SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.add

19、r.shortAddr = SampleApp_Group.ID ; 【知识链接】组播配置步骤:【知识链接】组播配置步骤:五、编写组播发送数据函数void SampleApp_SendGroupMessage(void) uint8 data6; if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc, SAMPLEAPP_FLASH_CLUSTERID, 6, data, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) = afStatus_SUCCESS

20、 ) ; else ; 【知识链接】组播配置步骤:【知识链接】组播配置步骤:六、使设备周期性地向同组节点发送数据if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) / Send the periodic message /SampleApp_SendPeriodicMessage(); 注释掉 SampleApp_SendGroupMessage; /调用组播发送函数 / Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( Sampl

21、eApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0 x00FF) ); / return unprocessed events return (events SAMPLEAPP_SEND_PERIODIC_MSG_EVT); 【知识链接】组播配置步骤:【知识链接】组播配置步骤:七、配置接收(消息处理)函数void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) uint16 flashT

22、ime; switch ( pkt-clusterId ) case SAMPLEAPP_PERIODIC_CLUSTERID: break; case SAMPLEAPP_FLASH_CLUSTERID: if(osal_memcmp(pkt-cmd.Data0,NEWLab,6) /判断接收数据是否为NEWLab HAL_TOGGLE_LED2(); /每收到正确数据1次,LED2取反1次 break; 【知识链接】组播配置步骤:【小结】组播配置步骤:一、首先声明一个组对象二、对SampleApp_Group赋值三、在本任务里将端点加入到组中四、设定通信的目标地址及模式五、编写组播发送数据

23、函数六、使设备周期性地向同组节点发送数据七、配置接收(消息处理)函数【小结】组播配置步骤:【任务要求】任务一:采用2个ZigBee模块,分别作为协调器和终端。终端采用单播的方式向协调器发送数据。(单播)任务二:采用3个ZigBee模块,分别作为协调器、路由器1和路由器2,其协调器和路由器1的组号设置为0 x0001,路由器2的组号设置为0 x0003,测试组播通信。(组播)任务三:采用3个ZigBee模块,分别作为协调器、路由器和终端,协调器向外周期性地发送数据,路由器和终端接收数据,测试广播通信。(广播)【任务要求】任务一:采用2个ZigBee模块,分别作为协调器【任务实施】第一步,打开Z-

24、Stack的SampleApp.eww工程。在路径C:Texas InstrumentsZStack-CC2530-2.5.1aProjectszstackSamplesSampleAppCC2530DB目录下找到SampleApp.eww工程,双击SampleApp.eww文件,打开工程。第二步,协调器通过串口向PC机发送数据。1. 通过串口线,把协调器模块与PC机连接起来。2. 编写协调器的程序。采用MT层配置串口,简化操作流程,因此协调器程序主要包括串口初始化、任务注册和串口数据发送三个部分。具体程序代码见本教材资源。3. 向协调器烧录程序。每复位一次协调器,都会向PC机发送一次数据,则

25、在串口调试软件上显示一行“NEWLab”字符,如图所示。注意:在IAR的Workspace栏要记得选择“CoordinatorEB”(协调器),再编辑,烧录。【任务实施】第一步,打开Z-Stack的SampleApp.【拓展】广播:【拓展】广播:【任务要求】任务一:采用2个ZigBee模块,分别作为协调器和终端。终端采用单播的方式向协调器发送数据。(单播)任务二:采用3个ZigBee模块,分别作为协调器、路由器1和路由器2,其协调器和路由器1的组号设置为0 x0001,路由器2的组号设置为0 x0003,测试组播通信。(组播)任务三:采用3个ZigBee模块,分别作为协调器、路由器和终端,协调器向外周期性地发送数据,路由器和终端接收数据,测试广播通信。(广播)【任务要求】任务一:采用2个ZigBee模块,分别作为协调器【任务实施】第一步,打开Z-Stack的SampleApp.eww工程。在路径C:Texas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论