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 endpoints
      StarryApp_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和绑定它们最终发送的数据帧格式都是一模一样的,都包含了以下五个信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java 计算网段范围 分析网段包含关系

目录 一、网段范围 二、思路说明 三、代码 1、将一个ip转为数字 2、转换子网掩码(255.255.255.0 转为 24) 3、根据 ip 与 掩码 计算最大值和最小值 4、测试 5、完整代码 四、难点讲解 1、转换子网掩码, 例:255.255.25…

数据总线学习

为啥要数据总线 使用服务化方式发布,业务端和中间件完全解耦合。一处生产,处处消费设计理念。提供用户可定制的托管化通用消费方案(如同步mysql到缓存,同步mysql到es,消费mysql到大数据等托管服务) 特性 …

RabbitMQ系列(18)--RabbitMQ基于插件实现延迟队列

1、前往RabbitMQ官网下载往RabbitMQ添加延迟消息的插件 RabbitMQ官网下载插件的网址:https://www.rabbitmq.com/community-plugins.html 2、下载rabbitmq_delayer_message_exchange插件(注:RabbitMQ是什么版本的,下载的插件就得是…

【UE5 Cesium】12-Cesium for Unreal 去除左下角的icon

问题 在视口左下角的icon如何去除? 解决方法 打开“CesiumCreditSystemBP” 将“Credit Widget Class”一项中的“ScreenCredit”替换为“ScreenCreditWidget” 编译之后icon就不显示了。

2023年5月PETS5(WSK)考试经验分享

由于本人明年打算出国联培的缘故,CSC国家留学基金委需要申请人的语言成绩达到一定的要求 英语(PETS5):笔试总分55分(含)以上,其中听力部分18分(含)以上,口试…

2023最新AI创作系统/ChatGPT商业运营版网站程序源码+支持GPT4+支持ai绘画(MJ)+实时语音识别输入+免费更新版本

2023最新AI创作系统/ChatGPT商业运营版网站程序源码支持ai绘画支持GPT4.0实时语音识别输入文章资讯发布功能用户会员套餐免费更新版本 一、AI创作系统二、系统介绍三、系统程序下载四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 1、提问:程序已经支持G…

“生鲜蔬”APP的设计与实现

1.引言 在这个科技与网络齐头并进的时代,外卖服务正在飞速发展,人们对外卖APP系统功能需求越来越多,开发APP的人员对自己的要求也要越来越高,要从所做APP外卖系统所实现的功能和用户的需求来对系统进行设计,还需要与当…

2023年船舶、海洋与海事工程国际会议(NAOME 2023) | Ei Scopus双检索

会议简介 Brief Introduction 2023年船舶、海洋与海事工程国际会议(NAOME 2023) 会议时间:2023年10月20日-22日 召开地点:中国镇江 大会官网:NAOME 2023-2023 International Conference on Naval Architecture and Ocean & Marine Engine…

腾讯云对象存储联合DataBend云数仓打通数据湖和数据仓库

随着数字化进程不断深入,数据呈大规模、多样性的爆发式增长。为满足更多样、更复杂的业务数据处理分析的诉求,湖仓一体应运而生。在Gartner发布的《Hype Cycle for Data Management 2021》中,湖仓一体(Lake house)首次…

ModaHub魔搭社区:基于阿里云 ACK 搭建开源向量数据库 Milvus

目录 一、准备资源 二、集群创建: 本集群基于Terway网络构建 二、连接刚刚创建的ACK集群 三、部署Milvus数据库 四、优化Milvus配置 简介: 生成式 AI(Generative AI)引爆了向量数据库(Vector Database&#xff0…

【链表OJ】删除链表中重复的结点

⭐️ 往期链表相关OJ 💫链接1:链表分割 💫链接2:链表中倒数第k个结点(快慢指针问题) 💫链接3:leetcode 876.链表的中间结点(快慢指针问题) 💫链接4:leetcode 206.反转链表 &#x1…

【数据结构与算法】内排序算法比较(C\C++)

实践要求 1. 问题描述 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间,试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 2. 基本要求 对以下10种常用的内部排序算法进行比较…

【mysql实践】如何查看阿里云RDS的MySQL库中的binlog日志

背景: 工作中我们为了查看MySQL中数据修改的历史记录时,会通过查看binlog日志。但由于binlog日志是二进制文件,需要解析之后,才能用文本查看工具打开。这次笔者使用flink进行实时统计时就多次遇到了这个问题。经常看笔者最近博客…

redhat6安装mysql8.0.33

1、下载mysql 官网地址:https://downloads.mysql.com/archives/community/ 下载步骤: 过滤操作系统版本 下载后,上传到服务器Downloads目录 2、安装mysql8 解压压缩包 tar -xvf mysql-8.0.31-1.el9.x86_64.rpm-bundle.tar [rootrhel64 …

山海鲸Cesium:帮你用更简单的方式升级视效

CesiumJS作为绝大多数人都在用的开源地球可视化引擎,视觉效果并不拔尖,这让很多giser都想着有一天升级一下视效,从众多平庸的项目中脱颖而出。然而,对于一些使用Cesium的项目来说,要想达到Cesium for unreal的视觉效果…

Jetson Orin Nano Developer Kit

Jetson Orin Nano Developer Kit包括Jetson Orin Nano 8GB模块,该模块具有NVIDIA安培GPU(具有1024个CUDA内核和32个第三代张量内核)和6核ARM CPU,能够运行多个并发AI应用程序管道并提供高推断性能。 开发套件载体板支持所有Jetson Orin Nano和Orin NX模块…

多层感知机与深度学习算法概述

多层感知机与深度学习算法概述 读研之前那会儿我们曾纠结于机器学习、深度学习、神经网络这些概念的异同。现在看来深度学习这一算法竟然容易让人和他的爸爸机器学习搞混…可见深度学习技术的影响力之大。深度学习,作为机器学习家族中目前最有价值的一种算法&#…

Java安全——安全提供者

Java安全 安全提供者 在Java中,安全提供者(Security Provider)是一种实现了特定安全服务的软件模块。它提供了一系列的加密、解密、签名、验证和随机数生成等安全功能。安全提供者基础设施在Java中的作用是为开发人员提供一种扩展和替换标准…

Java性能权威指南-总结26

Java性能权威指南-总结26 数据库性能的最佳实践异常日志 数据库性能的最佳实践 异常 Java的异常处理一直有代价高昂的坏名声。其代价确实比处理正常的控制流高一些,不过在大多数情况下,这种代价并不值得浪费精力去绕过。另一方面,因为异常处…

【面试】美团面试真题和答案

文章目录 前言1.线程池有几种实现方式?2.线程池的参数含义?3.锁升级的过程?4.i 如何保证线程安全?5.HashMap和ConcurrentHashMap有什么区别?6.Autowired和Resource区别?7.说说常用的设计模式8.Redis为什么这…