🧠 GATT 协议全解:蓝牙传数据到底怎么传?
——你可能不知道,你的蓝牙设备每天都在说“悄悄话”
😫 前情提要:蓝牙到底怎么“说话”的?
你是不是也有过这样的疑问?
“我的 BLE 设备连上了手机,那它们到底是怎么互相传数据的?”
他们用的是一套不靠吼、不靠比划的官方“对话流程”——就是本文主角:
👑 GATT 协议(Generic Attribute Profile)
🧪 一句话简介 GATT:
GATT 是 BLE 中负责“怎么传数据”的那一套规范,所有的通信都要按它的规矩来。
🧱 GATT 的建筑结构(其实就是一层套一层)
想象一下你在点奶茶:
- 设备(Peripheral) 就是奶茶店
- 服务(Service) 就是“奶茶类”“果茶类”菜单
- 特征(Characteristic) 就是“多多绿茶”、“波霸奶茶”等单品
- 属性(Attribute) 是所有这些项目的底层条目数据,比如“名称”、“值”、“描述”、“权限”
简单来说:
设备
└── 服务1(如心率服务)
├── 特征1(心率值)
├── 特征2(传输间隔)
└── 服务2(如电池服务)
├── 特征1(电量值)
💬 GATT 中的通信方式
你可以把 GATT 通信方式类比为几种“说话方式”:
方式 | 举个栗子 | 说明 |
---|---|---|
Read | 手机问设备:你电量多少? | 主动读,像查快递 |
Write | 手机对设备说:亮灯! | 主动写,像发命令 |
Notify | 设备突然说:我温度变了! | 通知型推送,不用回应(轻量) |
Indicate | 设备说:我发你一条消息哦,你收到请回复“收到” | 和 Notify 类似,但要确认 |
📦 示例场景:BLE 温度计
假如你有一个 BLE 温度计,它可能的 GATT 结构如下:
服务:自定义温度服务(UUID:0xFFF0)
├── 特征1:温度值(UUID:0xFFF1)
│ ├── 属性:支持 Read + Notify
├── 特征2:单位设置(UUID:0xFFF2)
│ ├── 属性:支持 Read + Write
📱 手机怎么读取温度?
sl_bt_gatt_read_characteristic_value(connection, temperature_handle);
💨 如果要设置为华氏度呢?
uint8_t fahrenheit = 1;
sl_bt_gatt_write_characteristic_value(connection, unit_handle, 1, &fahrenheit);
📢 想让温度变化时自动推送呢?
// 手机向设备写入 Client Characteristic Configuration Descriptor (CCCD)
uint8_t notify_enable[2] = {0x01, 0x00};
sl_bt_gatt_write_characteristic_value(
connection,
temperature_cccd_handle,
sizeof(notify_enable),
notify_enable
);
🧐 GATT 和 ATT 是啥关系?
- ATT(Attribute Protocol) 是传输协议,负责“怎么搬运数据”
- GATT(Generic Attribute Profile) 是使用 ATT 的一套“高级玩法”
你可以把 ATT 想成蓝牙的“物流快递”,而 GATT 是“电商平台”——要怎么打包、哪种顺序、能不能退货,全靠 GATT 说了算。
🧙 GATT 开发术语速记表
术语 | 中文解释 | 用途说明 |
---|---|---|
UUID | 通用唯一标识 | 标识服务和特征,标准/自定义均可 |
Handle | 句柄 | BLE 中访问属性的“门牌号” |
CCCD | 配置描述符 | 用来打开 Notify/Indicate 功能 |
MTU | 最大传输单元 | 默认 23 字节,可协商提升 |
Service | 服务 | 一组相关特征的集合 |
Characteristic | 特征 | 包含值和权限的一组属性 |
🧠 GATT 开发小贴士
- 自定义 UUID 别撞车:推荐使用 128-bit UUID,避免与官方服务冲突
- 读写权限记得设置:想防止误操作?配置好属性权限
- 能 Notify 就别频繁轮询:省电 + 高效 = Notify!
- 抓包调试利器:nRF Connect App / Silabs BGTool
- 善用 Soft Timer + Notify 打造低功耗主动汇报机制
🏁 总结
GATT 就是… |
---|
蓝牙低功耗通信的核心设计框架 |
服务+特征=数据结构的骨架 |
通信方式丰富,支持读写推送 |
开发时最常打交道的 BLE 模块之一 |
喜欢的盆友点赞加关注,欢乐熊将持续更新该频道!!谢谢!!