欢乐熊大话蓝牙知识4:GATT 协议全解:蓝牙传数据到底怎么传?

🧠 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 开发小贴士

  1. 自定义 UUID 别撞车:推荐使用 128-bit UUID,避免与官方服务冲突
  2. 读写权限记得设置:想防止误操作?配置好属性权限
  3. 能 Notify 就别频繁轮询:省电 + 高效 = Notify!
  4. 抓包调试利器:nRF Connect App / Silabs BGTool
  5. 善用 Soft Timer + Notify 打造低功耗主动汇报机制

🏁 总结

GATT 就是…
蓝牙低功耗通信的核心设计框架
服务+特征=数据结构的骨架
通信方式丰富,支持读写推送
开发时最常打交道的 BLE 模块之一

喜欢的盆友点赞加关注,欢乐熊将持续更新该频道!!谢谢!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欢乐熊嵌入式编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值