搞定蓝牙——第四章(GATT协议)

news2024/11/21 0:39:17

搞定蓝牙——第四章(GATT协议)

  • 原理介绍
    • 层次结构
    • server和client端
    • Attribute
  • ESP32代码

  • 文章下面用的英文表示:
    server和client:服务端和客户端
    char.:characteristic缩写,特征
    Attribute:属性
    ATT:Attribute Protocol缩写

原理介绍

GATT是蓝牙协议栈的一种协议,它定义了ble设备数据通讯的方法(设备角色、数据格式、服务发现、安全加密等等),也就是说两个ble设备是通讯的规范就是GATT协议。GAP也是一种协议,但是它是规范通讯之前的广播、连接等。

层次结构

GATT的层次结构是这样的。
在这里插入图片描述在这里插入图片描述
一个Profile包含多个server(与server和client中的server不是一个意思),一个server包含多个char.,profile只是一个定义,表示某个功能,例如测心率、测血氧等,server是一个服务,也表示某个功能,不传递实际的数据。char.是一个特征,可以理解为数据存放的地方。char.里面包含了属性、值和描述符,属性定义了访问权限,值就是一个要传递的数据,描述符描述了这个数据、例如单位。所以只有server和char.是实际运行的组件。

server和client端

Server端和client端,这个也是GATT定义的,一般server端提供服务,要传输的数据也在服务里面,client读取server的服务,也就是获取数据。有的服务可以接收client的数据,例如通知和指示。

Attribute

因为GATT是一种通讯规范,那通讯的数据是怎么样的呢?你想哈,好多地方都用到了蓝牙技术,但是应用场景差异有些很大,所以,这种数据格式必须能满足所有这些应用场景。于是,SIG(蓝牙技术联盟)就定义了一个统一的数据格式,称为Attribute(属性),也是ble传输最小单元了,每次最少发一个数据就是一个Attribute。
Attribute的结构是怎么样的呢。看图。
在这里插入图片描述
一个Attribute有四种类型的数据,一个一个展开说明。
Handle:因为ble发送数据都是一个一个Attribute发送的,所以需要加一个表示符来表示这个Attribute,可以看作为这个Attribute的名字,这个handle就是这个东西。
Type:表示Attribute的类型,使用16bit的UUID来表示,例如0x2800表示这个一个server声明的Attribute,更多看下图。
在这里插入图片描述
Value:表示这个Attribute的值,这个值有两种情况,如果从上面的Type中发现这是一个server声明的Attribute或者是char.声明的Attribute,那么这是一个UUID,这个可以自己定义,也可以用通用的,如果是其他,那么就是一个数据,例如心率、血氧。
Permissions:权限,也就是运行client对于这个Attribute的Value操作权限,因为server声明和char.声明是UUDI,所以该值为只读。

Ble是按照Attribute的格式来定义一个一个的数据的,在server端需要配置这一些Attribute,也就是Attribute表,这个表必须包含server声明、char.声明和char.值。
例如看看ESP32中的Attribute表,对于应用而言,维护这张表非常重要
在这里插入图片描述

ESP32代码

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

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

相关文章

02第二课 指标与指标体系

二、如何获得数据:指标体系与用户路径 Q1 指标可以用来干什么? 建立指标体系目的是获得全面而充足数据支撑,通过分析,从而发现问题、或得出主观问题的结论。 优秀的指标体系在制定每个指标时,会与业务目标密切关联,紧密围绕活动策略,数据结果可以有效的衡量产品的健康…

JAVA基础(JAVA SE)学习笔记(九)异常处理

前言 1. 学习视频: 尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第三阶段:Java高级应用 9.异常处理 10.多线程 11.常用类和基础API 12.集合框架 13.泛型 14…

优咔科技创新连接方案助力高质量5G车联服务

上海优咔网络科技有限公司 CEO 闫楠 【摘要】本文就智能网联汽车对高质量5G车联服务的需求背景和行业趋势进行了分析,主要介绍采用5G双SIM卡的创新连接方案,重点讲述双SIM卡联网的端到端体系架构和技术方案,并就优咔科技全方位支撑行业领先车…

俄罗斯黑客利用Roundcube零日漏洞窃取政府电子邮件

导语:最近,一起涉及Roundcube Webmail的零日漏洞被俄罗斯黑客组织Winter Vivern利用,攻击了欧洲政府机构和智库。这一漏洞已经存在至少一个月,直到10月16日,Roundcube开发团队才发布了安全补丁来修复这个Stored Cross-…

hibernate源码(1)--- schema创建

sessionFactory 配置项: hibernate的核心是sessionFactory,那我们看看如何构建session Factory。 参考官网: plugins {id("java") } group "com.atai.hibernatespy" version "1.0-SNAPSHOT" repositories…

【UE】抓取物体

目录 效果 步骤 一、制作准心 二、简单的第三人称视角偏移 三、基于屏幕正中央的打点与射线 四、物理抓取的实现(抓取、放下、丢出) 效果 步骤 一、制作准心 1. 新建一个HUD,这里命名为“HUD_ZhunXin”,同时复制一个第三人…

51单片机晶体管数字编码

51单片机 单片机型号:STC86C52RC/LE52RC 晶体管 数字编码 数字P0P1P2P3P4P5P6P7011111100101100000211011010311110010401100110510110110610111110711100000811111110911110110 00011 11110x3F10000 01100x0620101 10110x5B30100 11110x4F40110 01100x6650110 110…

Qt设计一个自定义的登录框窗口

今天写了一个Qt登录、注册的小demo,后续完善会连接MySQL使用,过几天写完我会放在github上。 主要页面: 动态演示: 写完这个界面后,我终于知道了Qt为什么几乎没什么好看的窗口设计了,随便写一个简单大方的登…

【OpenCV实现平滑图像处理】

文章目录 概要2D 卷积(图像过滤)模糊图像(平滑图像)中值模糊双边过滤小结 概要 在图像处理中,低通滤波器是一种常用的技术,用于平滑、模糊或降低图像的噪音。这种滤波器通过去除图像中高频部分&#xff08…

基于FPGA的电风扇控制器verilog,视频/代码

名称:基于FPGA的电风扇控制器verilog 软件:QuartusII 语言:Verilog 代码功能: 基于FPGA的电风扇控制器 运用 EDA SOPO实验开发系统设计一个基于FPGA的电风扇定时开关控制器,能实现手动和自动模式之间的切换。要求: (1)KI为电…

PLM如何与MES管理系统协同工作

产品生命周期管理(PLM)和MES生产管理系统是现代企业中不可或缺的生产管理工具。它们分别负责产品的设计和制造过程,对于提高企业的生产效率和产品质量具有重要作用。然而,要实现高效的生产管理,PLM和MES需要进行协同工…

Python---练习:使用for循环嵌套实现打印九九乘法表

思考: 外层循环主要用于控制循环的行数,内层循环用于控制列数。 基本语法: # 外层循环 for i in 序列1:# 内层循环for j in 序列2:循环体 序列1 序列2 ,就可以是range(1, 10) -----也就是从1,到9。 参考while循环…

笔记43:ResNet 结构详解

笔记本地地址:D:\work_file\DeepLearning_Learning\03_个人笔记\2.图像处理任务\ResNet网络学习 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a

DTO、VO、BO、PO等各种XO汇总

贫血模型和富领域模型 1.POJO对象(Plain Old Java Object) Plain Old Java Object(POJO),它的本来含义是指一个常规的、不受任何框架、平台的约束和限制的Java对象。可以认为,如果一个模块定义的对象皆为POJO,那么除了依赖JDK,它…

聚团队之力,学领军之道——麒麟信安组织开展卓越领导力主题培训

为提升高层次管理人员的领导力水平,为企业上市后高速发展以及高效运营提供更好支撑,日前,麒麟信安组织开展卓越领导力主题培训,公司领导层、各部门负责人以及各项目、技术骨干共同参加。 麒麟信安总裁刘文清作开训致辞。刘总指出&…

Python---练习:使用for循环实现用户名+密码认证

案例: 用for循环实现用户登录 ① 输入用户名和密码 ② 判断用户名和密码是否正确(usernamelaowang,passwordlw123) ③ 登录仅有三次机会,超过3次会报错 思考: 用户登陆情况有3种: ① 用户名错误(此时…

Ctrl+Alt+L或Ctrl+Alt+M或Ctrl+Alt+S热键无法启用(华硕天选)与armoury creat冲突

其实就是冲突了,但是就是检测不到(spy测不到,其他哪个open啥啥啥的直接进不去内核模式)。然后去找了个按键检测,发现都是找不到按键按下的事件,能检测到按键抬起事件,判断要么是应用占用&#x…

常见面试题-MySQL专栏(一)

为什么 mysql 删了行记录,反而磁盘空间没有减少? 答: 在 mysql 中,当使用 delete 删除数据时,mysql 会将删除的数据标记为已删除,但是并不去磁盘上真正进行删除,而是在需要使用这片存储空间时&…

vue源码分析(二)——vue的入口发生了什么

文章目录 前言(1)vue 项目构建的时候,通过package.json文件看到构建入口(2) 构建入口页面:导入同级模块config的getAllbuilds方法(3) 通过传入参数中的builds对象使用map获取&#x…

Python---for循环嵌套

for循环嵌套,就是一个for循环里面嵌套另外一个for循环的写法。 当循环结构相互嵌套时,位于外层的循环结构常简称为外层循环或外循环,位于内层的循环结构常简称为内层循环或内循环。 基本语法: # 外层循环 for i in 序列1:# 内层…