GATT(Generic Attribute Profile,通用属性协议)是蓝牙低功耗(BLE, Bluetooth Low Energy)技术中用于在两个设备之间传输数据的核心协议之一。GATT 定义了如何通过 BLE 连接来组织和交换数据。
一、GATT 基本概念
GATT 建立在 ATT(Attribute Protocol,属性协议)之上,使用“属性”作为数据的基本单元。GATT 的核心思想是:服务(Service) → 特征(Characteristic) → 描述符(Descriptor)的层级结构。
1. 角色定义
- GATT Server(服务器):存储数据并响应来自客户端的请求。
- GATT Client(客户端):发起读写请求以访问服务器上的数据。
注意:一个设备可以同时是 GATT Client 和 GATT Server(例如手机与智能手表配对时,手机读取手表心率数据,此时手表是 Server,手机是 Client;但若手表要从手机获取时间,则角色反转)。
二、GATT 服务(Service)
定义:
- Service是一组相关的数据和功能的集合。
- 每个 Service 由一个16-bit 或 128-bit UUID唯一标识。
- 可以是标准服务(如 Battery Service, Heart Rate Service)或自定义服务。
类型:
- Primary Service(主服务):设备的主要功能服务。
- Secondary Service(次服务):被其他主服务引用的辅助服务(较少使用)。
三、特征(Characteristic)
定义:
- Characteristic 是 Service 中包含的具体数据点。
- 每个 Characteristic 包含:
- 声明(Declaration):说明该特征的 UUID、属性(读/写/通知等)。
- 值(Value):实际数据内容。
- 描述符(Descriptors)(可选):提供关于值的额外信息(如单位、格式、客户端配置等)。
属性权限(Properties)示例:
- Read(可读)
- Write(可写)
- Notify(通知:Server 主动推送,无需 Client 请求)
- Indicate(指示:类似通知,但需 Client 确认)
- Broadcast(广播,较少用)
四、描述符(Descriptor)
- 描述符是附加在 Characteristic 上的属性,用于描述或控制该特征的行为。
- 最常见的描述符:
- Client Characteristic Configuration Descriptor (CCCD):用于启用/禁用 Notify 或 Indicate。
- Characteristic User Description:用户可读的描述文本。
- Presentation Format:定义数据的格式(如符号、指数、单位等)。
五、GATT 服务定义示例(伪代码 / 结构)
Service: Heart Rate (UUID: 0x180D) │ ├── Characteristic: Heart Rate Measurement (UUID: 0x2A37) │ ├── Properties: Notify │ ├── Value: [flags][heart_rate] (e.g., 0x00 0x45 = 69 bpm) │ └── Descriptor: CCCD (UUID: 0x2902) │ ├── Characteristic: Body Sensor Location (UUID: 0x2A38) │ ├── Properties: Read │ └── Value: 0x01 (Chest) │ └── Characteristic: Heart Rate Control Point (UUID: 0x2A39) ├── Properties: Write └── Value: Used to reset energy expended, etc.六、标准 vs 自定义服务
- 标准服务:由 Bluetooth SIG 定义,使用 16-bit UUID(如 0x180F 表示 Battery Service)。
- 自定义服务:开发者自定义,必须使用 128-bit UUID(基于 Base UUID:
0000xxxx-0000-1000-8000-00805F9B34FB)。
七、开发中的注意事项
- MTU 大小:默认 ATT MTU 为 23 字节,可通过协商增大(提高吞吐量)。
- Notify/Indicate 需要 CCCD 使能:客户端必须先写入 CCCD 才能接收通知。
- 服务发现流程:连接后,Client 通常会执行“服务发现”以了解 Server 支持哪些服务和特征。
- 并发与安全:考虑加密(Bonding)、权限(Authentication/Authorization)等。