当前位置: 首页 > news >正文

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

一、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博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【60天备战2024年11月软考高级系统架构设计师——第0天:详细规划与学习心得】
  • 为什么需要对即将上线的系统进行压力测试
  • Vue——认识day02
  • 力扣刷题--2185. 统计包含给定前缀的字符串【简单】
  • 虚幻引擎UE5入坑记
  • 2024Android面试题与答案(2)
  • 三种tcp并发服务器实现程序
  • 【C#】【EXCEL】Bumblebee/Components/Analysis/GH_Ex_Ana_CondBetween.cs
  • WPF—资源的使用
  • 速盾:整站加速和cdn的关系是怎样的?
  • 设置视图的宽高
  • day35-测试之性能测试JMeter的测试报告、并发数计算和性能监控
  • 数据结构,顺序表和单向链表(一对一)
  • maven引用项目内的jar包
  • Unity3D 屏幕适配详解
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • CEF与代理
  • emacs初体验
  • Java-详解HashMap
  • js对象的深浅拷贝
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Less 日常用法
  • Nacos系列:Nacos的Java SDK使用
  • vue:响应原理
  • 翻译--Thinking in React
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 怎么把视频里的音乐提取出来
  • 阿里云ACE认证学习知识点梳理
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #pragma multi_compile #pragma shader_feature
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (js)循环条件满足时终止循环
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (八)c52学习之旅-中断实验
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (强烈推荐)移动端音视频从零到上手(下)
  • (算法)Travel Information Center
  • (一)SvelteKit教程:hello world
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)Linux整合apache和tomcat构建Web服务器
  • (自用)gtest单元测试
  • ***利用Ms05002溢出找“肉鸡
  • .NET CORE Aws S3 使用
  • .net web项目 调用webService
  • .NET WPF 抖动动画
  • .net 设置默认首页
  • .net 生成二级域名
  • .NET6 命令行启动及发布单个Exe文件
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net生成的类,跨工程调用显示注释
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • /*在DataTable中更新、删除数据*/