蓝牙 (四) GATT profile

2024-05-27 16:38
文章标签 蓝牙 profile gatt

本文主要是介绍蓝牙 (四) GATT profile,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


GATT 综述 ,是一个服务框架程序发现,,,notify,indicating,配置特性的广播.服务和其特性
依赖app 依赖 GATT ,GATT 依赖 GAP 程序
There are 11 features defined in the GATT Profile:
1. Server Configuration
2. Primary Service Discovery
3. Relationship Discovery
4. Characteristic Discovery
5. Characteristic Descriptor Discovery
6. Reading a Characteristic Value
7. Writing a Characteristic Value
8. Notification of a Characteristic Value
9. Indication of a Characteristic Value
10.Reading a Characteristic Descriptor
11.Writing a Characteristic Descriptor
  • profile service character descriptors 的关系

GATT中最上层是Profile,Profile由一个或多个服务(Service)组成 服务(Services)、特性(Characteristics)和描述符(Descriptors)都是属性类别,因此也就有了通用属性配置文件(Generic Attribute Profile)、属性表(Attribute Table)和属性协议(Attribute Protocol)等。具体是哪一个类别的属性,由“通用唯一标识符(Universally Unique Identifier,简称UUID)”来定义。服务(Service)、特性(Characteristics)和描述符(Descriptors)也有层级之分。服务包括一项或多项特性。
一项特性可能没有、拥有一个或拥有多个描述符
  • Attribute
规定数据按照一定规则存放,这个规则就是属性。属性句柄(2个字节) + 属性类型(2个字节) + 属性值(0-512个字节) + 属性权限

在这里插入图片描述

1.属性句柄(Attribute Handle)
通过他可以找到对应属性,并用于区分不同服务中的相同属性。我理解类似是数组下标。2.属性类型(Attribute Type)
是对某个东西取一个数字代号(用uuid来代号),比如心率计,SIG就是用0x180D这个uuid来表示这个这条属性是和心率计有关SIG将uuid进行了范围规定,下面这些uuid都来标识属性类型0x1800~0x26FF 用于服务类 UUID
0x2700~0x27FF 用于标识计量单位
0x2800~0x28FF 用于区分属性类型
0x2900~0x29FF 用于特性描述
0x2A00~0x7FFF 用于区分特性类型3.属性值(Attribute Value)
属性值是一个 0~512 字节的数据,属性值是给上层应用层使用的,是用户“真正”要使用的数据,属性值可以有一下几类服务通用唯一识别码(UUID)  // 1800
单位
属性类型
特性描述符
特性类型
  • Attribute 实例,从开发看

属性句柄 是不用填充的
属性类型 需要填充一般包括 uuid权限 (读写 notify initicate)长度
属性值 如果是特性声明,需要填充属性值 描述符 (包括访问控制权限(),特征数值句柄,特征数值uuid )Service Definition 部分Service Declaration // 由一个属性表示 // 2800 2801Include Definitions(>=0) // 由一个属性表示 // 2802 includeCharacteristic Definitions(>=0) // 由多个属性表示Characteristic Definitions 部分 
- Characteristic Declaration                       : First  // 由 一个属性 表示 , 2803 
- Characteristic Value declaration                 : Second // 由 一个属性 表示 , xxxx(自定义)
- Characteristic Descriptor Declarations(Optional)(>=0) : Last(含多个时顺序不关紧要) // 由 一个或者多个属性 构成Characteristic Descriptor Declarations(Optional)(>=0) 部分- Characteristic Extended Properties 
- Characteristic User Description 
- Client Characteristic Configuration 
- Server Characteristic Configuration 
- Characteristic Presentation Format 
- Characteristic Aggregate FormatAttribute Type	UUID	Description
<Primary Service>	0x2800	Primary Service Declaration
<Secondary Service>	0x2801	Secondary Service Declaration
<Include>	0x2802	Include Declaration
<Characteristic>	0x2803	Characteristic Declaration
<Characteristic Extended Properties>	0x2900	Characteristic Extended Properties
<Characteristic User Description>	0x2901	Characteristic User Description Descriptor
<Client Characteristic Configuration>	0x2902	Client Characteristic Configuration Descriptor
<Server Characteristic Configuration>	0x2903	Server Characteristic Configuration Descriptor
<Characteristic Format>	0x2904	Characteristic Format Descriptor
<Characteristic Aggregate Format>	0x2905	Characteristic Aggregate Format Descriptor
  • Attribute 实例,从app看
    在这里插入图片描述
属性句柄(Attribute Handle)  属性类型(Attribute Type) 							属性值(Attribute Value) 	属性许可(Attribute Permissions)
service:0x2800(用于区分服务类型,首要服务)						0x1800(服务通用唯一识别码,GAP)
service:0x2800(用于区分服务类型,首要服务) 					0x1801(服务通用唯一识别码,GATT)
character:0x2A00(用于区分特性类型,Device Name)					"Apple Watch"(特性类型,Device Name 的 value)
character:0x2A05(用于区分特性类型,Service Changed)				自定义
character:0xXXXX(自己建立的uuid)(用于区分特性类型,Unknow Service)	自定义
Descriptors:0x2902(用于区分描述类型,Client Characteristic Configuration,可以通过这个Descriptors 来 notify和 indicate)		"Notifications and indications disabled"(特性类型,enable 或者 disable)
Descriptors:0x2900(用于区分描述类型,Characteristic Extended Properties,可以根据这个 Descriptors 来 在 notify 和 indicate 的同时实现 write)		"Reliable Write enabled"
Descriptors:0x2901(用于区分描述类型,Characteristic User Description)		"Telink SPP:module->phone"标准 service
1800 Generic Access标准 characcter2A00 Device Name2A01 Appearance标准 service
1801 Generic Access标准 characcter2A05 Service Changed标准 service
180F Battery Service标准 characcter2A19 Battery Level标准 service
1805 Current Time Service标准 characcter2A2B Current Time2A0F Local Time information标准 service
180A Device Information标准 characcter2A29 Manufacturer Name String2A24 Model Number String
  • character 与 service 的实例 (开发中应该新建几个service?)

profile 描述一个或多个设备,在每个设备上有一个或多个服务的规格。可以看到他可以包含多个 Service,大部分 Service 其实都是 BLE 本身自带的,一般都是 SDK 定义好了的,我们不需要修改和操作的,我们要用的 Service 可能一个工程里面只有一个。 举个例子:一个血压计设备,他可能只有一个我们需要操作、修改的 Service,就是读取血压数值然后发送给 APP。再举个例子:一个带心率功能的计步器,有两个功能,一个是计步,还有一个是测量心率,那么这个设备可能就有两个 Service 需要我们操作、修改。这些新增的服务都属于 profile .在图中还能看到一个 Service 可能包含多个 Characteristic,这就是一个服务所包含的特征值。怎么理解特征值呢,还举那个血压计的例子吧:上面说过血压计只有一个 Service(代表他只有这个服务的一系列值),就是读取血压数值然后发送给 APP,但是这一个 Service (一般一个值对应一个charatcer)可能包含多个 Characteristic也就是说一个血压计的设备有一个服务,一个服务就是一个功能,但是这个功能可能包含了好几个变量,这个 Characteristic 可以暂时理解为变量。所以说 BLE 之间的数据交换是通过 Characteristic 做到的。具体怎么定义 Characteristic  要 根据 需求来定
  • 特性里面的东西
特性包括多个部分,如类型、值、一些属性和权限等。特性一般包括三个要素:声明、数值和描述。前两者都是必须的。作为通信交互,一个特性必须要告诉对方声明(存储长度和访问控制)、定义(具体赋值)。在某些特性(如notify或者indicate)里面,特性还需要告知对方附加的配置属性(提供订阅等)。特性声明必须作为服务属性之后的第一条属性,而数值必须紧随其后。无论是服务还是特性,它们都是一条条属性;特性的各个要素也是一条条属性。只不过,不同的服务是独立的;而一个服务如果有多个特性,那么不同的特性也是独立的;一个特性包含的多条属性则是关联的。类型(Type) 在上面已经解释过了,就是表明属性具体特性类别的UUID值uuid 由 Handle、UUID(属性类型)、Value(属性值) 组成.这张图由三个部分组成,分别是 Handle、UUID(属性类型)、Value(属性值)。我们先来说 UUID,UUID 是通用唯一识别码。这里表示的是属性类型。举个例子,在 BLE 协议中定义了 0x2800 这个 UUID,它代表了一个这个属性的类型是 Service;0x2803 这个 UUID,表示这个属性的类型是一个 Characteristic。那我们看到 UUID 有很多都重复出现了,那怎么区别他们呢?那就要靠前面的 Handle 了,这个 Handle 是不能重复的,就是一个属性在属性列表中的位置,所以可以当做地址来理解。两个属性的 UUID 可能是相同的,但是 Handle 永远不可能相同。值(Value) 就是相关状态数据项的值。属性(Properties) 属性定义了其他设备如何通过蓝牙运用特性,这些特性主要关于各项操作,如读取(READ)、  写入(WRITE)或通知(NOTIFY)。读取特性就是通过蓝牙链路将当前的值从属性表传输至相连的设备。写入是允许互连设备改变状态表中的值。通知是当相关特性值改变或由定时器进行周期性控制时,设备可以发送至相连设备的一种特定的信息类型。有些特性并不支持所有操作。通过特性的属性可以了解其支持的操作。有时设备的编程允许其在处理操作时(如在属性表中读写值)能够以特定的方式作出回应,这样就能实现更多功能,而不是简单的通过连接来传输数据。例如,改变特性的值也可能改变设备从加速器上读取样本数据的频率。权限(Permissions)  权限与安全相关,并进一步描述了在对特性进行读写访问之前必须确保的安全条件。描述符(DESCRIPTORS)  描述符含有元数据,这些元数据可以放大描述符所属特性的相关细节,或实现涉及这一 属性的运行配置。例如,可通过名为“客户端特性配置描述符(Client Characteristic Configuration Descriptor,CCCD)”的特定描述符来开启或关闭通知(NOTIFY)信息。配置文件(PROFILE)    蓝牙配置文件是包括所有必需信息的规格,包括设备功能,服务、属性及描述符的访问方式,以及安全准则、并行限制等。
  • 特性字段与封包的关系
对开发者来说,很简单,他只需要调用send(0x53)
GATT层定义数据的类型和分组,方便起见,我们用0x0013表示电量这种数据类型,这样GATT层把数据打包成130053(小端模式!)
ATT层用来选择具体的通信命令,比如读//notify/indicate等,这里选择notify命令0x1B,这样数据包变成了:1B130053

nrf connect app

nrf connect下箭头按下 : 读
上箭头按下 : 写上下箭头此时状态 : notify and indication 关闭
上下箭头打叉此时状态 : indication 开三下箭头此时状态 :  notify and indication 关
三下箭头打叉此时状态 :  notify enable 开notification无需client端确认,就好像小明妈妈跟小明发了一条信息说该吃饭了,小明收到了可以有动作也可以忽略。
indication是需要client端确认,举个例子小明妈妈跟小明打电话,小明务必点击接听,听妈妈跟他说该吃饭了,整个过程才完结。当 notify 或者 indication 为开的情况下, 当value 改变(通过定时器,通过host端主动修改), ble 会主动上报改变过的 value.

标准服务


可以通过GATT层定义自己的Profile
18001801服务UUID为TI蓝牙协议栈的GATT层服务。GATT ServicesGATT Characteristics

UUID

  • 低功耗蓝牙BLE对应Gatt的UUID

  • uuid标准

  • uuid标准2

  • services

/*** WARNINGS: The 16-bit UUIDs are assigned by the Bluetooth SIG and published in the Bluetooth Assigned Numbers page. Do not change these values. Changing them will cause Bluetooth interoperability issues.*/
/*** GATT Services*/#define GAP_SERVICE_UUID             0x00001800 // Generic Access Profile 通用接入规范#define GATT_SERVICE_UUID            0x00001801 // Generic Attribute Profile 通用属性规范
  • Characteristics
/*** GATT Characteristics*/#define DEVICE_NAME_UUID              0x00002A00 // Device Name 设备名称#define APPEARANCE_UUID               0x00002A01 // Appearance 外貌特征#define PERI_PRIVACY_FLAG_UUID        0x00002A02 // Peripheral Privacy Flag 外围设备隐蔽标志#define PECONNECT_ADDR_UUID           0x00002A03 // Peconnection Address 连接地址#define PERI_CONN_PARAM_UUID          0x00002A04 // Peripheral Preferred Connection Parameters 外围设备首选连接参数 #define SERVICE_CHANGED_UUID          0x00002A05 // Service Changed 服务改变

这篇关于蓝牙 (四) GATT profile的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008021

相关文章

开放式耳机好用?平价开放式耳机推荐?四款开放式的蓝牙耳机推荐

开放式耳机好用吗?有平价些的开放式耳机推荐吗?那这两个问题的回答当然是肯定的。 首先开放式耳机好不好用取决于对耳机的需求,因为开放式耳机其实是比较适用于需要注意周围环境、需要‌长时间佩戴舒适以及需要频繁与人交流的场景中,在这些场景下使用开放式耳机的话就会比较有优势。就例如跑步骑行健身等运动的时候,能够兼得佩戴舒适度的同时,增加一定的安全性;还有在办公学习的时候,会很适合长时间佩戴,能够方便和

Flutter 中的低功耗蓝牙概述

随着智能设备数量的增加,控制这些设备的需求也在增加。对于多种使用情况,期望设备在需要进行控制的同时连接到互联网会受到很大限制,因此是不可行的。在这些情况下,使用低功耗蓝牙(也称为 Bluetooth LE 或 BLE)似乎是最佳选择,因为它功耗低,在我们的手机中无处不在,而且无需连接到更广泛的网络。因此,蓝牙应用程序的需求也在不断增长。 通过阅读本文,您将了解如何开始在 Flutter 中开

开放式蓝牙耳机哪个品牌好用?盘点五款超优秀的开放式耳机!

开放式蓝牙耳机现在挺受欢迎的,它们最大的好处就是不塞耳朵,戴着舒服,特别适合长时间佩戴。而且,这种耳机能让你在听音乐的同时,还能听到周围的环境声,这样在外面运动或者骑车的时候就更安全。音质方面,现在的开放式耳机也做得越来越好,有些高端款式还有特别的技术来减少漏音,保护你的隐私。但是现在市场上的开放式耳机品牌太多了,很多人不知道怎么选?为了帮助您在众多选项中做出选择,我根据个人经验挑选了一些表现良好

Anroid BLE蓝牙(手机分别作为中心设备和外围设备)

蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的LE蓝牙称为低功耗蓝牙。  BLE蓝牙模块主要应用领域     1、移动扩展设备     2、汽车电子设备     3、健康医疗用品:心跳带、血压计等     4、定位应用:室内定位、井下定位等     5、近距离数据采集:无线

蓝牙--关于bta_ag_sdp.cc文件的讲解

讲解代表之前先简单介绍下HF和AG HF(Hands-Free unit)测:是指作为音频网关的远程音频输入和输出机制的设备。它还提供了一些远程控制手段。在蓝牙通信中,HF通常是支持HFP(Hands-Free Profile)协议的设备,例如蓝牙耳机、汽车蓝牙系统等。 AG(Audio Gateway)测:是指作为音频的输入和输出网关的设备。典型的充当音频网关的设备包括手机。 我们这边主要

蓝牙--关于bta_ag_sco.cc文件的讲解

讲解代表之前先简单介绍下HF和AG HF(Hands-Free unit)测:是指作为音频网关的远程音频输入和输出机制的设备。它还提供了一些远程控制手段。在蓝牙通信中,HF通常是支持HFP(Hands-Free Profile)协议的设备,例如蓝牙耳机、汽车蓝牙系统等。 AG(Audio Gateway)测:是指作为音频的输入和输出网关的设备。典型的充当音频网关的设备包括手机。 我们这边主要

500以内蓝牙耳机最良心推荐有哪些?四款百元平价必入机型盘点

面对市场上琳琅满目的蓝牙耳机品牌和型号,消费者往往感到困惑,特别是在预算有限的情况下,如何挑选出既满足质量又符合价格预期的产品似乎成了一项挑战,那么500以内蓝牙耳机最良心推荐有哪些?为了帮助大家轻松找到适合自己且价格合理的蓝牙耳机,我今天特别带来了四款百元平价必入机型盘点,下面,让我们一起深入了解这四款平价蓝牙耳机的各项性能,看看它们是否真正符合你的需求和预期。 500以内蓝牙耳机最良

构建STM32智能平衡车项目:PID控制算法与蓝牙通信技术

一、项目概述 项目目标和用途 本项目旨在设计和实现一款基于STM32单片机的平衡车。平衡车是一种新型的个人交通工具,广泛应用于短途出行、休闲娱乐等场景。通过本项目,我们希望能够实现一款具备良好稳定性和操控性的平衡车,能够在不同的地形上自如行驶。 解决的问题和带来的价值 平衡车的核心问题在于如何保持其平衡。传统的平衡车往往依赖于复杂的控制算法和高精度的传感器。通过本项目,我们将利用STM32

开放式蓝牙耳机哪个品牌好用?开放式耳机排行榜10强

开放式耳机是我觉得蓝牙耳机里最适合入手的耳机类型,它有很多使用场景的选择。平时外出办公的话,也很合适,我自己也算是外出办公的打工人了,我会比较喜欢一点点嘈杂的环境,就还挺适合的。 那平时下班健身就更不用说了,健身最适合戴耳机了,那入耳式就很容易掉,所以这时就该轮到开放式耳机登场了,挂耳式、耳夹式或者是挂脖式的佩戴设计都很适合运动健身。 所以,毋庸置疑,开放式耳机当然是好用且适合入手的。

哪个牌子的蓝牙耳机性价比高?四款全能高性价比机型盘点

在蓝牙耳机市场日益丰富的今天,消费者面对的选择多到令人眼花缭乱,从国际大牌到国产新秀,每个品牌都在努力推出具有独特卖点和特色功能的蓝牙耳机,那么在众多选择中,哪个牌子的蓝牙耳机性价比高?而这是一个值得深究的问题,为了帮助大家在众多品牌和机型中找到真正的高性价比之选,我细致的整理四款全能高性价比机型盘点,无论你是学生、上班族,还是热爱运动和旅行的人士,以下推荐的这四款耳机都将满足你对高性能和合理价格