zigbee笔记、十五、组播通信原理

news2024/11/8 9:16:44

一、zigbee四种通讯

        1、单播(略)

        2、广播(略)

        3、组播:在zigbee网络中,模块可以用分组来标记,发送的模块如果发送的组号和网络里面标记接收模块的组号相对应,那么这些模块就可以拿到这些无线数据包(组播通信与广播通信相似,单个发送设备可以同时向多个接收设备发送数据)。

        4、绑定(略)

二、组播相关概念

        1、分组中的组编号占用2个字节。例如:0x0001。

        2、组编号是和模块里已经定义了的端点相关联,即如果一个模块被标记为组1,那么这个模块里至少有1个定义了的可用端点和组0x0001相关联。

        3、发送模块按照组的方式发送数据时,需要指定的内容包含 目标模块的组标号端点,原则上只有当接收模块的这3个参数匹配上了,才能拿到和处理这样一个无线数据包。

        例如:发送模块A发送了一个无线数据包,无线数据包中指定了接收者要满足:组号为0x0001、端点号为10、簇为0x0001,因此通过判断只有模块B的10号端点最终成功接收到了数据包。

        4、组标记中,同一个模块定义的一个组编号可以关联多个可用的端点(一个组标记可以使使用多个端点),同一个端点也可以关联多个组编号(即一个模块可以同时是组1和组2的模块,同属于2个组)。

三、组播实验

        1、发送端数据发送设置

        (1)例如发送数据:组编号号为0x0001,端点号10,簇为0x0001,内容是“Hello world”


char theMessageData[] = "Hello World";  //定义发送内容
smartHomeApp_DstAddr.addrMode = (afAddrMode_t)AddrGroup; //指定发送模式,组播模式
/*
enum
{
  AddrNotPresent = 0,
  AddrGroup = 1,
  Addr16Bit = 2,
  Addr64Bit = 3,
  AddrBroadcast = 15
};
*/
smartHomeApp_DstAddr.addr.shortAddr = 0x000;  //组播模式下,该参数表示为组编号
smartHomeApp_DstAddr.endPoint = 10;   //指定接收模块端点号
//smartHomeApp_DstAddr结构体无论是在单播、广播还是组播中都是用来指定描述接收模块的一些信息
AF_DataRequest( &smartHomeApp_DstAddr, &smartHomeApp_epDesc,
                       smartHomeApp_CLUSTERID,   //指定接收模块的簇
                      (byte)osal_strlen( theMessageData ) + 1,  //表示发送字节个数
                     //   1, 
                       (byte *)&theMessageData,//发送的数组的首地址
                       &smartHomeApp_TransID,
                       AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );
        2、接收模块设置

        在应用层初始化函数中默认挂钩了端点号10,同样簇的编号也被默认定义了0x0001,我们也不需要动。

       (1) 组播通信中接收模块需要关联组

        标记组的话,首先要定义一个组的结构体变量aps_Group_t smartHomeApp_Group;组的结构体和相关函数可以在aps_groups.h中找到。因此我们需要在应用处理函数所在源文件中引入aps_groups.h头文件,如下图。

        (2)关联端点与组编号

        首先定义组结构体,给组结构体的第一个成员变量ID赋值为组编号0x0001(第二个参数name可以不用,name的作用就相当于一个注释,给组起个别名,最多不能超过16个字节)。

        然后我们调用函数ZStatus_t aps_AddGroup( uint8 endpoint, aps_Group_t *group );(也在组头文件中有声明),它的作用是将我们的端点与组关联起来。(第一个参数为关联的端点号,第二个参数是组结构体的地址)。

        在关联之前我们还需要调用函数extern uint8 aps_RemoveGroup( uint8 endpoint, uint16 groupID );,它的作用时去除当前端点所关联的组编号。来确保只有一个组与我们的10号端点关联。(第一个参数是我们要取消关联的端点,第二个参数是取消关联的组号)。

//...
aps_Group_t smartHomeApp_Group;//定义一个组相关结构体
smartHomeApp_Group.ID=0x0001;//组相关结构体的ID值赋0x0001
aps_RemoveGroup(10,0x0002);//如果10号端点关联了0x0002,那么就取消组2的关联;如果没有关联,就不做处理。
//aps_RemoveGroup(uint8 endpoint, uint16 groupID )函数用来解端点与组的关联
StarryApp_Group.ID=0x0001;
aps_AddGroup(10,&smartHomeApp_Group);//将端点与组关联起来。(第一个参数为关联的端点号,第二个参数是组结构体的地址)
//...

/*
其他组相关函数
 // Remove all groups for endpoint
extern void aps_RemoveAllGroup( uint8 endpoint );
更多组相关函数参考头文件aps_groups.h

*/
        (3)数据接收

        消息处理函数要修改成适合组播的接收处理程序,其中pkt结构体变量的groupId成员,如果为0,表示收到的数据包不是通过组播发送的,而是通过单播或者广播等。

static void smartHomeApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{

 
  if(pkt->groupId==0x0001)
  {
    if(pkt->endPoint==10)
    {
      switch(pkt->clusterId)
      {
      case 0x0001:
       //...  处理内容代码
       break;
      }
    }
  }
  if(pkt->groupId==0x0002)
  {
    if(pkt->endPoint==10)
    {
      switch(pkt->clusterId)
      {
      case 0x0001:
        //...  处理内容代码
       break;
      }
    }
  }
}

参考链接

        (1)lesson10组播通信原理_哔哩哔哩_bilibili

        (2)lesson10 Zigbee组播通信原理-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度剖析渗透测试:流程、规范与实战全指南

一、引言 在当今数字化时代,网络安全问题日益凸显。渗透测试作为一种主动的安全评估方法,能够帮助企业和组织发现潜在的安全漏洞,提高系统的安全性。本文将详细介绍渗透测试的实施流程、规范、不同类型的测试方法以及相关的 checklist 和报告…

Matlab处理H5文件

1.读取h5文件 filenamexxx.h5; h5disp(filename) 2.h5文件保存为mat文件 读取 HDF5 文件中的数据 % 指定 HDF5 文件的路径 filename xxx.h5;% 读取 HDF5 文件中的各个数据集 A241_P h5read(filename, /A241_P); A241_W h5read(filename, /A241_W); A242_P h5read(filen…

ensp 中 wlan 的配置过程和示例

一、拓朴: 要求:vlan20 用于笔记本上网,使用Huawei信号,vlan30 用于手机上网,使用 Huawei-5G 信号 二、配置过程: 1、SW1 基本配置: 起 vlan batch 10 20 30,10 为管理 vlan&#…

Acrobat Pro DC 2024 for mac/Win:跨平台PDF编辑与管理的巅峰之作

Adobe Acrobat Pro DC 2024是一款专为Mac和Windows用户设计的全面PDF解决方案软件,它集成了创建、编辑、转换、共享和签署PDF文件的强大功能,为用户带来前所未有的高效与便捷体验。 强大的PDF编辑功能 Acrobat Pro DC 2024在PDF编辑方面表现出色。用户…

JavaScript初级——DOM增删改

1、 document.createElement() —— 可以用于创建一个元素节点对象,他需要一个标签名作为参数,将会根据该标签名创建元素节点对象,并将创建好的对象作为返回值返回。 2、 document.createTextNode(&#…

职场达人必备!MyComputerManager助你轻松管理快捷方式

前言 你是否还在为硬盘管理界面上那一堆乱糟糟的快捷方式头疼不已?是不是每次打开‘此电脑’都像是在玩寻宝游戏,寻找那个被深埋的文件夹?想象一下,如果能在此电脑页面一键启动程序,是不是觉得整个人都轻松了许多&…

使用Tabs组件提升页面内容的聚焦与分类效率

当页面信息量较大时,为了提高用户的浏览效率,我们需要对页面内容进行有效的分类和展示。HarmonyOS提供的Tabs组件是一个理想的解决方案,可以在一个页面内快速切换视图内容,提升用户查找信息的效率,同时减少用户在单次操…

CSS定位与布局

一、display属性(元素如何显示) 网页上的每个元素都是一个​盒模型​。​display​属性决定了盒模型的​行为方式​,设置元素如何被显示。 display常用的属性共有​4个​值: ​display: none;​ -- 让标签消失(隐藏元素并脱离文档…

Mac M1Pro 安装Java性能监控工具VisualVM 2.1.9

本地已经安装了java8,在终端输入jvisualvm提示没有安装 zhiniansara ~ % jvisualvm The operation couldn’t be completed. Unable to locate a Java Runtime that supports jvisualvm. Please visit http://www.java.com for information on installing Java.官网…

Kafka事件(消息、数据)的存储

1、查看有关kafka日志配置文件的信息 2、查看kafka全部主题的日志文件 3、查看每个主题的日志文件 4、__consumer_offsets-xx文件夹的作用 package com.power;public class Test {public static void main(String[] args) {int partition Math.abs("myTopic".hashCo…

企业微信API对接文档【可向微信用户发消息】

目录 企业微信API对接文档 1.背景 2.获取微信第三方token 3.安装docker环境 4.打包与启动 4.1打包镜像 4.2启动容器(启动应用) 5.企业微信二维码验证 5.1 获取初始二维码 5.2 第1次二维码验证 5.3 第2次二维码验证 6. 企业微信三…

上博士为了毕业写学术论文头都大了,但更难受的是英语不咋地,投稿后经常会因为语言问题而惨遭拒稿,每每想起就令人心情郁郁,天台可期。

上博士为了毕业写学术论文头都大了,但更难受的是英语不咋地,投稿后经常会因为语言问题而惨遭拒稿,每每想起就令人心情郁郁,天台可期。有些审稿人也会直接告知需要专业的修改,那咋整呢,让润色呗,…

虚拟机virtualbox linux ubuntu使用usb串口

1.卸载brltty sudo apt remove brltty brltty是一个没啥用但是会抢占ch431的软件,所以卸载它 2.连接上串口,点击连接对应的usb串口 3.查看是否连接上 sudo dmesg -T | grep tty 查看tty组的最近日志,如果连接成功会显示连接的时间和串口…

基于数据挖掘的心力衰竭疾病风险评估系统

B站视频及代码下载:基于数据挖掘的心力衰竭疾病风险评估系统_哔哩哔哩_bilibili 1. 项目简介 心力衰竭是一种常见的心脏疾病,它严重影响患者的生活质量和预期寿命。早期识别和干预对于改善患者的预后至关重要。近年来,随着大数据技术和机器学…

eleme

设置主从从mysql57服务器 --配置主数据库 # systemctl stop firewalld # setenforce 0 # systemctl disable firewalld # ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz # cp -r mysql-5.7.44-linux-…

【题解】【循环】——[NOIP2010 普及组] 数字统计

【题解】【循环】——[NOIP2010 普及组] 数字统计 [NOIP2010 普及组] 数字统计题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2 提示 1.题意解析2.AC代码 [NOIP2010 普及组] 数字统计 戳我查看题目(洛谷) 题目描述 请统计某个给定…

Spring cloud 网关信息

网关简绍 就是网络的关口&#xff0c;负责请求的路由、转发、身份校验。 引入网关依赖 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependenc…

html+css 实现爱心跳动

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 实现爱心跳动&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f49…

速通教程:如何使用Coze+剪映,捏一个爆款悟空视频

程哥最近做了一个和黑神话悟空有关的视频&#xff0c;没想到就火了&#xff0c;视频主打一个玉石风格&#xff0c;就是下面这个视频。 视频请移步飞书观看&#xff1a;黑神话悟空玉石版 制作过程不算很复杂&#xff0c;全程只需要用到Coze智能体和剪映这两个工具。 智能体用…

做个实验

做个实验 #include <bits/stdc.h> using namespace std; #define int long long #define ll __int128_t #define ar array<int, 2> #define arr array<int, 3> int n, m, k, inf 1LL << 61, mod 998244353;// 1e97; const int N 5e5 50;void sol…