BLE 蓝牙设备 属性特征解析
在 BLE(Bluetooth Low Energy)协议中,每个蓝牙设备的主要属性特征是由 GATT(Generic Attribute Profile) 结构定义的。设备的所有功能和数据都通过 GATT 服务(Service) 和 特征(Characteristic) 进行组织和访问。
1. BLE 设备的主要属性
BLE 设备的属性主要包括 广播信息(Advertising)、GATT 服务、特征(Characteristic)等。
(1) 广播信息(Advertising Data)
蓝牙设备在未连接时,会通过 广播 发送设备的基本信息,常见的字段包括:
- 设备名称(Device Name)
- 可选字段,标识设备的可读名称,如
"Mi Band 6"。
- 可选字段,标识设备的可读名称,如
- 设备地址(MAC Address)
- 每个蓝牙设备都有唯一的
MAC地址,例如AA:BB:CC:DD:EE:FF(部分设备可能会随机化地址)。
- 每个蓝牙设备都有唯一的
- 信号强度(RSSI - Received Signal Strength Indicator)
- 代表设备信号的强度,一般为负值(如
-40dBm),数值越接近0,信号越强。
- 代表设备信号的强度,一般为负值(如
- 广播UUID(Advertised UUIDs)
- 设备可以在广播数据中发送 服务 UUID,例如
0x180D(代表心率服务)。
- 设备可以在广播数据中发送 服务 UUID,例如
- 制造商数据(Manufacturer Specific Data)
- 厂商可以自定义数据格式,如 iBeacon 就利用这个字段传输 UUID、Major、Minor 信息。
- Tx Power(发射功率)
- 设备的信号发射强度,影响通信距离。
(2) GATT(通用属性协议)
在 BLE 设备建立连接后,所有的通信都通过 GATT(Generic Attribute Profile) 进行。GATT 主要由以下部分组成:
① 服务(Service)
服务是一个逻辑分类,表示设备支持的功能。例如:
- 0x180D(Heart Rate Service,心率服务)
- 0x180A(Device Information Service,设备信息)
- 0x180F(Battery Service,电池信息)
每个 服务 由一个 UUID 标识,可以是 官方标准 UUID(16-bit,如 0x180D) 或 自定义 UUID(128-bit,如 f000aa80-0451-4000-b000-000000000000)。
② 特征(Characteristic)
每个 服务 下面包含多个 特征(Characteristic),它们是 BLE 设备的核心数据单元,例如:
- 0x2A37(心率测量值)
- 0x2A19(电池电量)
每个特征有 唯一的 UUID,通常有 读(Read)、写(Write)、通知(Notify)等权限。
③ 描述符(Descriptor)
描述符用于提供额外信息,例如:
- Client Characteristic Configuration Descriptor (CCCD)
- UUID:
0x2902 - 用于启用 通知(Notify) 或 指示(Indicate) 功能。
- UUID:
- Characteristic Presentation Format Descriptor (CPF)
- UUID:
0x2904 - 定义数据格式,如
int8、float32等。
- UUID:
2. BLE 设备的 GATT 结构示例
假设你在 Android/iOS 上连接了一个 BLE 设备,它的 GATT 结构可能是这样的:
Device: "Mi Band 6" (MAC: AA:BB:CC:DD:EE:FF)
└── Service: Battery Service (0x180F)
└── Characteristic: Battery Level (0x2A19) [Read, Notify]
└── Descriptor: Client Characteristic Configuration (0x2902)
└── Service: Heart Rate Service (0x180D)
├── Characteristic: Heart Rate Measurement (0x2A37) [Notify]
├── Characteristic: Body Sensor Location (0x2A38) [Read]
└── Service: Device Information (0x180A)
├── Characteristic: Manufacturer Name (0x2A29) [Read]
├── Characteristic: Model Number (0x2A24) [Read]
3. BLE 设备特征(Characteristic)的属性
每个 特征(Characteristic) 具有以下 属性(Properties):
| 属性 | 说明 |
|---|---|
| Read | 允许客户端(如手机)读取数据 |
| Write | 允许客户端写入数据 |
| Write Without Response | 写数据时不需要设备确认(加快速度) |
| Notify | 设备主动向客户端推送数据(不需要应答) |
| Indicate | 设备主动向客户端推送数据(需要应答) |
| Broadcast | 设备可以在广播时包含该特征的数据 |
示例
- 心率测量(Heart Rate Measurement)
- UUID:
0x2A37 - 属性:
Notify(心率变化时推送)
- UUID:
- 电池电量(Battery Level)
- UUID:
0x2A19 - 属性:
Read, Notify(支持读取 & 变化时通知)
- UUID:
4. 常见 BLE 设备服务 UUID
| 服务名称 | UUID(16-bit) | 功能 |
|---|---|---|
| Heart Rate Service | 0x180D |
监测心率 |
| Battery Service | 0x180F |
监测电池状态 |
| Device Information | 0x180A |
提供设备信息 |
| Alert Notification | 0x1811 |
处理通知/警报 |
| Health Thermometer | 0x1809 |
监测体温 |
| Blood Pressure | 0x1810 |
监测血压 |
| Cycling Speed and Cadence | 0x1816 |
自行车踏频检测 |
如果设备是自定义服务,它可能使用 128-bit UUID,如:
f000aa80-0451-4000-b000-000000000000
5. 读取 & 订阅 BLE 设备特征
在 Android 中可以使用 BluetoothGatt 进行 GATT 操作,例如:
// 读取特征数据
bluetoothGatt.readCharacteristic(characteristic);
// 订阅通知
bluetoothGatt.setCharacteristicNotification(characteristic, true);
// 设置 CCCD (启用 Notify)
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
bluetoothGatt.writeDescriptor(descriptor);
总结
-
BLE 设备的核心概念:
- 广播数据(Advertising):设备名称、UUID、信号强度(RSSI)。
- GATT 服务(Service):设备提供的功能分类。
- 特征(Characteristic):数据存储单元,可
Read/Write/Notify。 - 描述符(Descriptor):为特征提供附加信息,如
CCCD控制Notify/Indicate。
-
不同设备有不同的 GATT 结构,可使用 标准 UUID 或 自定义 UUID。
-
BLE 设备的主要交互方式
- 读取数据(Read)
- 写入数据(Write)
- 订阅通知(Notify / Indicate)
如果你的设备是 Notify 类型(如心率传感器),记得启用 CCCD 订阅通知,否则收不到数据!
如果你有具体的设备想要解析 GATT 结构,欢迎提供详细信息,我可以帮你分析它的 UUID 和特征 🚀

浙公网安备 33010602011771号