lesson 12 Zigbee绑定通信

目录

Zigbee绑定通信

通信原理

实验过程

实现步骤

实验现象 

实验分析


Zigbee绑定通信

通信原理

1、Zigbee一共有五种通信方式:单播、广播、组播、MAC、广播

2、绑定是Zigbee的一种基本通信方式,具体绑定通信又分为三种模式,模式大同小异,在这里我只拿源绑定来说明

3、绑定通信:发送模块必须要知道接收模块(被绑定模块)的网络地址或者MAC地址、接收方的接收端点和接收簇。创建绑定的过程都由发送方来完成,是发送模块的一厢情愿,与接收方无关,

源绑定:

含义:在发送模块(源模块)里面创建了和它所绑定模块的绑定表。

注:单播、MAC、绑定最终发送的数据帧格式都是相同的。

在发送模块里,会调用一个函数,这个函数会创建一个结构体(绑定表)。绑定表里含有 发送模块的发送端点、接受模块的接受端点、接收模块的MAC和接收模块的接受簇。还必须保证发送模块的地址管理器中存有接收模块的MAC和网络短地址。

最后调用发送函数,以绑定的方式发送(绑定的时候发送指定函数中的配置信息有:接收模块的接收端点、接收簇,发送模块的发送端点,发送模块的网络地址。不指定接收模块的地址相关信息)。在发送时,首先查看绑定表,如果绑定表中的内容与发送函数中指定的信息相匹配,再去查看地址管理器的MAC与绑定表中的MAC是否一致,如果一致,就将地址管理器中的网络短地址作为目标地址,最后将数据包发送过去。

实验过程

实现步骤

我们使用上一节的MAC地址通信作为基础程序。(其中绑定内容只需要在发送模块终端中创建,接收模块协调器不用动)

1、首先我们创建一个接收模块MAC的地址相关信息结构体变量:destination,然后传入地址模式MAC和接收模块MAC地址。

然后调用函数:ZStatus_t APSME_BindRequest( byte SrcEndpInt, uint16 ClusterId,zAddrType_t *DstAddr, byte DstEndpInt);

其中函数的第一个参数是发送方端点,第二个参数是接收方簇,第三个参数是接收模块MAC的地址相关信息结构体地址,第四个变量是接收方的端点。

调用这个函数,不会发出任何无线数据包,它只是发送模块用来本地创建一个绑定表的结构体。

2、然后我们调用函数ZDP_NwkAddrReq(DestMac,ZDP_ADDR_REQTYPE_SINGLE,0,0);

这个函数在前面的MAC通信中提到过。作用是将携带目标模块的MAC地址的数据包广播出去到Zigbee网络中,网络中的其它模块接收到数据包后判断数据包里面携带的MAC地址是否与自己一致,如果一致,就将自己的网络短地址发送给发送模块。这样发送模块收到网络短地址后就会成功将接收模块的地址相关信息添加到本地的地址管理器。

接着调用定时器触发事件函数,30s后执行发送事件

3、最后我们创建目标模块地址结构体变量,并只要配置绑定方式AddrNotPresent即可,不需要传入地址,然后调用数据发送函数发送。到此绑定通信配置完成。

4、程序

创建绑定表

      uint8 DestMac[8]={0xFD,0xE7,0x59,0x2A,0x00,0x4B,0x12,0x00};//0x00124B002A59E7FD   //创建绑定表,与接收模块绑定zAddrType_t destination;destination.addrMode=Addr64Bit;memcpy(destination.addr.extAddr,DestMac,8);APSME_BindRequest( 10,0x0001,&destination,10);//创建绑定表,与我们的接收模块绑定ZDP_NwkAddrReq(DestMac,ZDP_ADDR_REQTYPE_SINGLE,0,0);//携带接收目标模块的MAC,广播出去;网络中其它节点收到判断是否与自己MAC一样osal_start_timerEx(StarryApp_TaskID,StarryApp_SEND_MSG_EVT,30);//等待30ms执行事件

发送数据

  if ( events & StarryApp_SEND_MSG_EVT ){char theMessageData[] = "Zigbee 绑定实验";StarryApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;//以绑定的方式发送//StarryApp_DstAddr.addr.shortAddr = 0x0000;//memcpy(StarryApp_DstAddr.addr.extAddr,DestMac,8);// Take the first endpoint, Can be changed to search through endpointsStarryApp_DstAddr.endPoint = StarryApp_ENDPOINT;//接收模块的端点AF_DataRequest( &StarryApp_DstAddr, &StarryApp_epDesc,StarryApp_CLUSTERID,(byte)osal_strlen( theMessageData ) + 1,(byte *)&theMessageData,&StarryApp_TransID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );}

实验现象 

按终端模块S1,进行MAC地址通信;按终端模块S2,进行绑定通信

实验分析

通过抓包,抓取绑定过程的数据包

我们只需要看第一个Data request前面的三个帧即可,后面两个帧是附带的

第一帧是终端发给父节点,通过父节点进行广播转发,表明终端想要获得目标MAC的网络短地址

第二帧是协调器转发子节点终端的数据帧

第三帧是终端发送给协调器的数据包,是按下K2后30ms后发送的,通过前面的时间可算出。还可以注意到后面的帧内非常明确指明了源网络短地址和目的网络短地址。这也表明了终端成功从本地地址管理器中获取到了目标网络短地址。

最后还要注意一点,单播、MAC和绑定它们最终发送的数据帧格式都是一模一样的,都包含了以下五个信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/5419.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tomcat概述,优化,多实例部署

目录 一、概述 二、三个容器 1、Web 容器: 2、Servlet 容器: 3、JSP 容器: 三、Tomcat 功能组件结构 四、优化 1、启动速度优化 2、配置参数优化 五、多实例部署 一、概述 Tomcat 是 Java 语言开发的,Tomcat 服务器是一…

如何建立自己的知识体系?202209

知识太多了,无法全部快速吸收进大脑,需要通过特定的方法、技能,在面对大量知识的情况下,快速梳理,构建自己的知识体系。 学习的目标,不仅仅是记忆知识,而是搜索知识、并过滤、洞察、理解、使用…

搭建Hadoop高可用框架分布式集群

搭建Hadoop高可用框架分布式集群 一.基础配置 1.创建虚拟机,修改虚拟机的主机名 2.修改网络配置 master:192.168.6.200 slave1:192.168.6.201 slave2:192.168.6.202 3.互ping测试 4.sudo授权 5.安装vim编辑器 6.配置网络映射 master配置映射 master向slave1传递映…

大数据Doris(五十二):Doris数据导出案例和注意事项

文章目录 Doris数据导出案例和注意事项 一、Doris数据导出到HDFS案例 1、创建Doris表并插入数据 2、创建Export ,数据导出到 HDFS 3、查看任务 4、查看导出结果 二、Doris数据导出到本地案例 1、配置 fe.conf 2、Doris 数据导出到本地 三、注意事项 Doris数据导出案例…

Layui时间范围选择器,添加【本周、本月、本季度、本年等常用时间快捷键】

文章目录 1. 界面实现2. JS具体实现2.1 第一种实现2.2 第二种实现 1. 界面实现 <input id"Date_select" type"text" class"form-control" placeholder"请选择时间范围" style"border-radius: 4px;" /><input id&qu…

TypeScript - 函数(中)

目录 1、编写良好泛型函数的准则 1.1 向下推送类型参数 1.2 使用较少的类型参数 1.3 类型参数应出现两次 2、可选参数 3、回调中的可选参数 4、函数重载 5、重载签名和实现签名 6、写好重载 1、编写良好泛型函数的准则 编写泛型函数很有趣&#xff0c;并且很容易被类…

递归函数:

含义&#xff1a;自己调自己 递归三要素&#xff1a;定义函数、终止条件和等价关系式 小案例&#xff1a;排序 let arr1 [8, 8, 9, 13, 45, 8, 0, 1, 9, 66];//定义函数function quickSort(arr) {//终止条件if (arr.length < 1) return arr;const baseIndex Math.floor(…

uniapp顶部导航栏被遮住显示问题

解决uniapp顶部导航栏被遮住显示问题 uniapp官方给了处理的方案&#xff0c;即css变量&#xff0c;–status-bar-height&#xff0c;小程序这个值是25px&#xff0c;app则根据实际情况去变化 如下&#xff1a; //头部导航栏 <view class"header"> </view…

软件破解专题01

玩脱壳&#xff1f; 破解的功能&#xff1a;可以把收费软件免费使用 推荐论坛&#xff1a;pyg论坛》www.chinapyg.com 逆向&#xff1a;团队合作&#xff0c;有条件可以参加ctf大赛&#xff0c;这个应该是进步最快的途径 一个很强的开源项目&#xff1a;de4dot 作者…

Redis(主从复制、哨兵模式、集群)概述及部署

Redis&#xff08;主从复制、哨兵模式、集群&#xff09;概述及部署 一、Redis主从复制1、Redis主从复制的概念2、Redis主从复制的作用3、Redis主从复制的流程4、Redis主从复制的搭建 二、Redis 哨兵模式1、哨兵模式的原理2、哨兵模式的作用3、哨兵模式的结构4、哨兵模式的搭建…

springboot校园点餐小程序

校园点餐系统 springboot校园点餐系统小程序 java校园点餐小程序 技术&#xff1a; 基于springbootvue小程序校园点餐系统的设计与实现 运行环境&#xff1a; JAVA版本&#xff1a;JDK1.8 IDE类型&#xff1a;IDEA、Eclipse都可运行 数据库类型&#xff1a;MySql&#xff08;…

SpringSecurity(三):自定义认证数据源(源码+落地实现)。

自定义认证数据源 前言认证流程分析易混梳理AuthenticationManager 与 ProviderManagerProviderManager 与 AuthenticationProvider难点&#xff1a;为什么ProviderManager会有一个parent&#xff1f; 数据源的获取配置AuthenticationManager默认的全局 AuthenticationManager自…