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

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

搞定蓝牙——第四章(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.lryc.cn/news/207266.html

相关文章:

  • Go语言入门心法(十四): Go操作Redis实战
  • Java学习笔记(三)
  • Flutter笔记:GetX模块中不使用 Get.put 怎么办
  • 2023前端面试整理
  • 文化融合:TikTok如何弥合跨文化差异
  • asp.net core获取config和env
  • Git不常用命令(持续更新)
  • PostPreSql 数据库的一些用法
  • 小工具推荐:FastGithub的下载及使用
  • 硬件信息查看工具 EtreCheckpro mac中文版功能介绍
  • 宝塔Python3.7安装模块报错ModuleNotFoundError: No module named ‘Crypto‘解决办法
  • 优化改进YOLOv5算法:加入ODConv+ConvNeXt提升小目标检测能力——(超详细)
  • ElasticSearch安装、插件介绍及Kibana的安装与使用详解
  • JVM | 命令行诊断与调优 jhsdb jmap jstat jps
  • SQL 表达式
  • Unity3D 打包发布时生成文件到打包目录
  • Elasticsearch中使用join来进行父子关联
  • 提供一个springboot使用h2数据库是无法使用脚本并报错的处理方案
  • 【组合计数】CF1866 H
  • JavaSpringbootmysql农产品销售管理系统47627-计算机毕业设计项目选题推荐(附源码)
  • 一文5000字从0到1使用Jmeter实现轻量级的接口自动化测试(图文并茂)
  • 蓝桥杯每日一题0223.10.23
  • php危险函数及rce漏洞
  • 4. 寻找两个正序数组的中位数
  • Stable Diffusion AI绘图
  • MR混合现实情景实训教学系统在旅游管理专业中的应用
  • CentOS 使用线程库Pthread 库
  • #力扣:LCP 01. 猜数字@FDDLC
  • kafka丢数据的原因
  • 音视频编解码技术学习笔记