当前位置: 首页 > backend >正文

欢乐熊大话蓝牙知识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 模块之一

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

http://www.xdnf.cn/news/7003.html

相关文章:

  • 费马小定理
  • 数学复习笔记 16
  • 【Linux网络编程】Socket编程:协议理论入门
  • 数据库的规范化设计方法---3种范式
  • AIStarter Windows 版本迎来重磅更新!模型插件工作流上线,支持 Ollama / ComfyUI 等多平台本地部署模型统一管理
  • FPC连接器的未来趋势:柔性时代的核心桥梁
  • 【Redis】Hash 哈希
  • opencv4.11生成ArUco标记 ArUco Marker
  • IP68防水Type-C连接器实测:水下1米浸泡72小时的生存挑战
  • CodeBuddy 开发 JSON 可视化工具实录:JsonVision 的诞生之旅
  • 广东省省考备考(第十三天5.17)——言语:接语选择题(听课后强化练习)
  • 永磁同步电机公式总结——反电动势、磁链、转矩公式;三项、两项电压方程;坐标表换方程
  • 通过多线程获取VENC的H264码流数据
  • 11.1 LangGraph生产级AI Agent开发:状态管理与多智能体系统构建全解析
  • RAID学习笔记
  • USB和串口软件编程控制继电器通断
  • windows系统各版本下载
  • 查看电脑信息的方法-CPU核心数量、线程数量等
  • TXT记录解析技术深度解析与应用实践
  • 医疗大模型技术演进与行业应用全景
  • 在Java中调用Ant命令
  • 动态规划(3)学习方法论:构建思维模型
  • CSP 2024 提高级第一轮(CSP-S 2024)单选题解析
  • 利用SenseGlove触觉手套开发XR手术训练体验
  • profibusDP主站转profinet网关接ABB电机保护单元与1200plc通讯
  • 初探Linux内核:解锁Linux操作系统的基本核心的奥秘
  • StreamCap v0.0.1 直播录制工具 支持批量录制和直播监控
  • 数学复习笔记 17
  • arm-linux平台通过syslog + logrotate + 脚本实现日志管理
  • 互联网大厂Java求职面试:AI驱动的短视频直播平台架构设计