【蓝牙mesh】Bearer层(承载层)介绍

news2024/12/19 19:16:56

【蓝牙mesh】Bearer层(承载层)介绍

Bearer层简介

在这里插入图片描述

   蓝牙Mesh协议栈由多个不同的协议层组成,其中最底层的协议就是Bearer层,它负责提供数据传输的底层支持。蓝牙Mesh协议栈的最底层就是BLE协议栈,所以Bearer层是直接与BLE协议栈连接的。在蓝牙Mesh网络中,Bearer层有两种类型,分别是广播Bearer和GATT Bearer。广播Bearer使用广播通道进行通信,这种通信方式非常适合在网络中传输短暂的数据包,例如传感器数据。而GATT Bearer则使用标准的蓝牙GATT(通用属性)协议进行通信,这种通信方式则更适合传输大型数据包和进行命令和控制。

   需要说明一下,由于目前的手机都没有加入对蓝牙Mesh 广播Bearer的支持,所以我们想要使用手机APP控制蓝牙Mesh设备,只能使用代理的方式走Gatt通道与设备节点进行通信。 而设备节点与设备节点之间,往往都是通过广播Bearer通道进行通信的,当然低功耗节点除外。

概念介绍

   蓝牙Mesh Bearer层分为广播Bearer层和Gatt bearer层,一个节点设备可以支持至少其中的一个,也可以都支持。 一般情况下,子设备节点如果不是低功耗设备,两个层都会支持的。

广播Bearer层

当使用广播Bearer层的时候,底层会发送BLE广播,广播包的类型如下图:

在这里插入图片描述

   广播Bearer层使用的广播类型又两种,类型为0x2A表示的就是蓝牙Mesh的数据包, 类型0x2B表示的蓝牙Mesh的Beacon包。

至于上面的0x29是用来发送Gatt连接包的,是用在Gatt Bearer层的。

   蓝牙Mesh的广播Bearer层使用的广播包是不可连接不可扫描的不定向广播包,如果接收到其他类型的广播包,应该直接丢弃。

Note: 蓝牙Mesh之所以使用不可连接的广播包就是为了节省掉Flags AD
Type所占用的广播字段,这样蓝牙Mesh的广播包数据有效长度可以达到29个字节。

Gatt Bearer

   Gatt Bearer层一般是用在广播Bearer层不能使用的情况下,Gatt Bearer是使用的代理协议来发送和接收蓝牙Mesh数据的。
GATT服务端只能实例化一个蓝牙mesh代理服务,就是一个服务端不能同时连接多个客户端

   Gatt客户端应该使用发现所有服务规程或者使用通过UUID发现服务规程来发现蓝牙Mesh的Proxy代理服务的。

   Gatt客户端应该使用发现所有特征规程或者使用通过UUID发现特征规程来发现蓝牙Mesh的特征的

   当Gatt客户端发现了蓝牙mesh的特征值描述符时,应该主动打开对应的通知。 当Gatt客户端需要发送数据到服务端时,需要使用write no response的发送指令。 当Gatt服务端需要发送数据给客户端是,需要使用Notify。

   蓝牙mesh协议,实际上包括设备配网协议与配网后的7层网络架构协议。配网数据的发送和节点的消息发送是两种不同的协议层次。但是他们都会使用到承载层,所以可以看到设备在配网前后使用的代理特性是不一样的,在APP界面上,搜索未配网设备和搜索已配网设备的页面也是分开的,这样做的好处,在代码实现层面的结构更清晰。当然是可以做到把未配网设备和配网设备都放在同一个页面,但不管是从消费者使用方便还是程序业务逻辑上讲,都没有任何好处。

总结

   在蓝牙Mesh网络中,Bearer层还提供了许多其他的功能,例如数据加密、数据压缩、数据分段等等。这些功能都是为了提高数据传输的效率和安全性。总的来说,Bearer层是蓝牙Mesh网络中非常重要的一层,它提供了数据传输的基础支持,使整个网络能够顺畅地运行。

   蓝牙Mesh的Bearer层实际上就是对应的BLE协议的广播和Gatt连接,所以熟悉BLE协议的朋友应该都很熟悉。

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

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

相关文章

GO 中的 defer 有哪些注意事项?下

上次一起写了 3 个案例,咱们这一次继续,这一次的会比上一次的稍微不太一样 案例 1 还有一个也非常常用的案例,使用 defer 来捕获异常 ,也就是当程序崩溃的时候,defer 语句可以帮我们兜底,可以捕获异常后按…

vscode 配置 codeql

1、安装配置 codeql 环境 1.1 下载 codeql-cli 和 codeql 标准库 1)下载安装 下载安装 codeql-cli: Releases github/codeql-cli-binaries GitHub 下载 codeql 标准库:https://github.com/gi thub/codeql 下载的安装包解压,codeql 可执…

二,从源代码开始编译安装iperf3

本文目录Linux系统中编译安装基本知识简介第一步,执行configure第二步,执行make第三步,make install其它功能说明Linux系统中编译安装基本知识简介 从前一文章"一,下载iPerf3最新源代码"我们已经知道如何通过git的方式…

Linux系统下命令行安装MySQL5.6+详细步骤

1、因为想在腾讯云的服务器上创建自己的数据库,所以我在这里是通过使用Xshell 7来连接腾讯云的远程服务器; 2、Xshell 7与服务器连接好之后,就可以开始进行数据库的安装了(如果服务器曾经安装过数据库,得将之前安装的…

干货 | 八条“黄金规则”解决RF电路寄生信号

PART 01 接地通孔应位于接地参考层开关处流经所布线路的所有电流都有相等的回流。耦合策略固然很多,不过回流通常流经相邻的接地层或与信号线路并行布置的接地。在参考层继续时,所有耦合都仅限于传输线路,一切都非常正常。不过,如…

MySQL关于NULL值,常见的几个坑

数据库版本MySQL8。 1.count 函数 觉得 NULL值 不算数 ,所以开发中要避免count的时候丢失数据。 如图所示,以下有7条记录,但是count(name)却只有6条。 为什么丢失数据?因为MySQL的count函数觉得 Null值不算数,就是说…

Shader(着色)

1.深度测试(Z-Buffer )每个像素需要一个深度来排序是否需要渲染,所以需要额外的buffer来存储,frame buffer 存颜色,depth buffer (z-buffer) 存深度。2.Lambert(漫反射)3.Blinn-Phong (高光)4.环…

Netty权威指南总结(一)

一、为什么选择Netty:API使用简单,开发门槛低,屏蔽了NIO通信的底层细节。功能强大,预制了很多种编解码功能,支持主流协议。定制能力强,可以通过ChannelHandler对通信框架进行灵活地拓展。性能高、成熟、稳定…

一文搞定Android Vsync原理简析

屏幕渲染原理"现代计算机之父"冯诺依曼提出了计算机的体系结构: 计算机由运算器,存储器,控制器,输入设备和输出设备构成,每部分各司其职,它们之间通过控制信号进行交互。计算机发展到现在,已经出…

【Python知识点桂电版】01基本数据类型

一、变量变量定义注:查看变量类型->type(变量)查看变量地址->id(变量)变量命名规则只允许出现:英文、中文、数字、下划线(不推荐用中文,不能以数字开头)大小写敏感不可使用关键字(如and)和…

代码随想录【Day24】| 开始回溯!77. 组合

回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。 那么既然回溯法并不高效为什么还要用它呢? 因为没得选&#xf…

cesium: 设置skybox透明并添加背景图 ( 003 )

第003个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置skybox透明并添加背景图。 我们不想要黑乎乎的背景,想自定义一个背景图,然后前面显示地球。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共70…

奇妙的background-clip:text

我们在学习CSS3时,一个背景属性background-clip用来对背景进行裁剪,即指定背景绘制的区域,通常我们使用的几个属性如下:值说明border-box默认值。背景绘制在边框方框内(剪切成边框方框)。padding-box背景绘…

【C++入门(上篇)】C++入门学习

前言: 在之前的学习中,我们已经对初阶数据结构进行相应了学习,加上之前C语言的学习功底。今天,我们将会踏上更高一级“台阶”的学习-----即C的学习!!! 文章目录1.C 简介1.1什么是C1.2.C的发展史…

【数据库】join SQL语句原理优化

背景 在实际的开发中,业务相关表都是通过uid或者一个可以标记业务领域的一个属性转换成的字段进行关联的,但是对于一些后续的业务,比如数据分析、下游系统使用、金融对账等业务,需要进行多表联查,之前实际生产的时候就…

【安卓开发】内容提供器

内容提供器实现了不同程序之间实现数据共享的功能。 7.2 运行时权限 安卓6.0版本后引入了运行时权限 每个权限都属于一个组&#xff0c;授权了其中一个&#xff0c;一个组内的权限都将会被授权。 测试代码 // AndroidManifest.xml中加入以下代码 <uses-permission andr…

魔改hustoj源码使其支持显示队名和队员及女队标志

0. 起因&需求 本文涉及到的开源项目Github地址&#xff1a;https://github.com/zhblue/hustoj 事件的起因是&#xff0c;计算机学院要举办一个院级的ACM比赛&#xff0c;然后捏… 老师给我提了一个需求&#xff0c;就是能不能把比赛排行榜显示的队名下标注对应的队员&…

光栅化Triangles(笔记)

field of view (可见区域) 该角度越大,需要透视投影的角度越大,成像显示的内容越多 有Y值,则可得出成像范围 屏幕: 典型的光栅处理设备所有像素都被表示为x,y坐标轴形式 3D方块成像步骤: 先将其所在平面化为 与屏幕等长等宽的形式: 如何将一个三角形拆成像素&#xff1f;采样…

C++学习笔记-2

C学习笔记-2输入/输出控制----I/O流命名空间的定义及使用string类型函数改进域解析符::扩大全局变量的作用域形式参数可带有默认值函数重载引用的定义与应用引用的概念及使用引用作为形式参数引用与指针的比较引用作为返回值动态内存空间用new申请动态内存空间用delete释放动态…

unicloud的aggregate聚合查询时间戳转日期

我特么不知道看了这个帖子几百遍才看明白到-----》unicloud数据库中&#xff0c;聚合操作如何操作时间戳&#xff1f; - DCloud问答 自己淋过雨老想着为别人撑伞&#xff0c;可怜我这35岁的老人家&#xff0c;给我去点关注&#xff01;&#xff01;&#xff01;&#xff01;&a…