蓝牙的 GATT(Generic Attribute Profile) 是蓝牙低功耗(Bluetooth Low Energy,简称BLE)协议栈中的一个核心协议,用于定义设备如何通过蓝牙进行数据传输和交互。GATT 是基于 ATT(Attribute Protocol) 的一个高层协议,它提供了一种标准化的方式来组织和访问设备上的数据。
GATT 的核心概念
-
服务(Service):
- 服务是一个逻辑分组,包含一组相关的特性(Characteristic)。
- 每个服务都有一个唯一的 UUID(Universally Unique Identifier)来标识它。
- 例如,心率监测服务(Heart Rate Service)是一个常见的服务,用于传输心率数据。
-
特性(Characteristic):
- 特性是服务中的具体数据项,表示一个具体的值。
- 每个特性都有一个唯一的 UUID,并且可以包含一个或多个描述符(Descriptor)。
- 例如,心率监测服务中的“心率测量”特性,用于传输实时心率值。
-
描述符(Descriptor):
- 描述符是特性值的附加信息,用于描述特性值的用途或格式。
- 例如,特性值的单位、数据格式等。
-
属性(Attribute):
- 属性是 GATT 中的最小数据单元,可以是服务、特性或描述符。
- 每个属性都有一个唯一的句柄(Handle),用于标识它。
GATT 的工作原理
GATT 通信通常涉及两个角色:
- GATT 服务器(GATT Server):提供数据的设备(通常是传感器或外围设备)。
- GATT 客户端(GATT Client):请求和访问数据的设备(通常是智能手机或中央设备)。
通信流程:
-
发现服务(Discover Services):
- 客户端请求服务器列出所有可用的服务。
-
发现特性(Discover Characteristics):
- 客户端请求服务器列出某个服务中的所有特性。
-
读取特性值(Read Characteristic Value):
- 客户端读取某个特性的当前值。
-
写入特性值(Write Characteristic Value):
- 客户端修改某个特性的值。
-
通知和指示(Notification 和 Indication):
- 服务器可以主动向客户端发送特性值的更新(通知)或等待客户端确认后发送(指示)。
GATT 的应用示例
-
心率监测:
- 服务:心率监测服务。
- 特性:心率测量、体感位置等。
- 描述符:心率单位(如 BPM)。
-
设备信息:
- 服务:设备信息服务。
- 特性:制造商名称、型号、硬件版本等。
-
环境传感器:
- 服务:环境传感器服务。
- 特性:温度、湿度、压力等。
GATT 的特点
-
灵活性:
- GATT 允许开发者自定义服务和特性,以满足特定需求。
-
标准化:
- 蓝牙 SIG(Special Interest Group)定义了许多标准服务(如心率服务、电池服务等),便于设备间互操作。
-
低功耗:
- GATT 是蓝牙低功耗协议的一部分,适合电池供电设备。
-
事件驱动:
- 服务器可以主动向客户端发送数据(如通知),无需客户端频繁轮询。
总结
GATT 是蓝牙低功耗通信的核心协议,它通过服务、特性和描述符的层次结构,提供了一种标准化的方式来组织和访问设备上的数据。GATT 的灵活性和标准化特性使其成为物联网设备(如传感器、可穿戴设备等)通信的首选协议。