蓝牙技术基础:版本演进与核心机制
做蓝牙网关选型,第一件事就是搞清楚蓝牙版本到底在说什么。我见过不少工程师,上来就问「支不支持蓝牙 5.0」,但你要问他 5.0 比 4.2 多了什么,他可能就含糊了。嗯,这章咱们就把这事彻底理清楚。
蓝牙版本演进:从 4.0 到 5.4
蓝牙 4.0 是个分水岭。它第一次引入了 BLE(低功耗蓝牙),跟传统蓝牙(BR/EDR)彻底分家。说白了,从 4.0 开始,蓝牙才有了「低功耗」这个标签。
| 版本 | 发布时间 | 核心变化 | 我的评价 |
|---|---|---|---|
| 4.0 | 2010 | 引入 BLE,双模架构 | 奠基之作,功耗大幅下降 |
| 4.2 | 2014 | 数据包扩展,LE Secure Connections | 安全性提升,IoT 开始可用 |
| 5.0 | 2016 | 2Mbps 速率,长距离模式,广播扩展 | 真正让 BLE 走向工业级 |
| 5.1 | 2019 | 方向发现,AoA/AoD,GATT 缓存 | 室内定位的转折点 |
| 5.2 | 2020 | LE Audio,LC3 编码,同步信道 | 音频场景的革新 |
| 5.3 | 2021 | 连接子速率更新,信道分类增强 | 稳定性优化,功耗再降 |
| 5.4 | 2023 | 广播加密,响应式广播,LE GATT 安全 | 企业级安全补全 |
选型核心判断:做网关,至少选 5.0 起步。如果涉及室内定位,必须 5.1+。音频场景直接上 5.2。5.3/5.4 目前更多是锦上添花,但新项目我建议直接上 5.4。
我记得 2017 年有个项目,客户坚持用 4.2 芯片做网关,结果广播数据包太小,设备信息塞不下。后来硬生生拆成两个广播包,兼容性问题搞了两个月。从那以后,我所有新项目起步就是 5.0。
BLE 协议栈架构:三层模型
BLE 协议栈分三层:Controller、Host、Application。你想想看,这其实跟 OSI 七层模型一个思路,只是简化了。
Controller 层是硬件干的活。PHY 负责射频收发,LL(链路层)负责数据包组装、时序、重传。说白了,这一层你基本碰不到,芯片厂家已经封装好了。
Host 层才是我们做网关开发的主战场。GAP 管连接和广播,GATT 管数据读写,SMP 管配对加密。我习惯把 Host 层理解成「蓝牙的操作系统」——它定义了设备怎么被发现、怎么交换数据。
Application 层就是你的业务代码了。比如网关收到温度数据,怎么解析、怎么上报云端,都在这一层。
我的习惯:做网关选型时,我会先确认 Controller 和 Host 之间的 HCI 接口是否开放。有些模组把 Host 也封死在固件里,你就只能调 AT 指令,灵活性大打折扣。我个人偏好开放 HCI 的方案,这样可以用 BlueZ 或 Zephyr 做上层定制。
蓝牙广播与扫描机制
广播是 BLE 最核心的机制之一。设备不连接就能发数据,这对 IoT 场景太重要了。
广播类型
- 可连接广播:标准广播,扫描设备可以发起连接。网关扫描到设备后,可以主动连上去。
- 不可连接广播:只发不收,适合信标场景。比如 iBeacon、Eddystone。
- 可扫描广播:广播设备允许扫描设备发送扫描请求,获取更多数据。
- 定向广播:指定目标设备,其他设备忽略。用于快速重连。
我记得有个项目,客户用不可连接广播做温湿度采集,结果网关收不到数据。排查了半天,发现广播间隔设成了 100ms,但网关扫描窗口只有 50ms,刚好错过。后来我把扫描窗口调到 150ms,问题解决。你想想看,广播和扫描的参数匹配有多重要。
广播信道与避让
BLE 在 2.4GHz 频段工作,有 40 个信道。但广播只用 3 个:37、38、39。为什么?因为这三个信道避开了 Wi-Fi 的 1、6、11 信道,减少干扰。
我曾经踩过的坑:在 Wi-Fi 密集的办公环境做网关部署,广播信道 38 经常被 Wi-Fi 干扰。后来我强制网关在扫描时优先监听 37 和 39,丢包率从 15% 降到了 3%。如果你遇到广播不稳定,试试调整扫描信道优先级。
广播数据格式
广播包最大 31 字节,5.0 之后扩展广播可以到 255 字节。数据格式是 AD Structure(AD Type + AD Data)的拼接。
// 广播数据示例(十六进制)
02 01 06 03 03 AA FE 12 16 AA FE 10 00 01 02 03 04 05 06 07 08
// 解析:
// 02 01 06 → AD Type 0x01 (Flags), 长度 2, 数据 0x06
// 03 03 AA FE → AD Type 0x03 (16-bit UUID), 长度 3, UUID 0xFEAA
// 12 16 AA FE ... → AD Type 0x16 (Service Data), 长度 18, 数据内容
做网关开发时,我习惯把广播解析写成独立模块。因为不同厂家的设备,广播数据格式千奇百怪。统一解析入口,后期维护会轻松很多。
扫描参数调优
| 参数 | 说明 | 推荐值 |
|---|---|---|
| 扫描窗口 | 每次扫描的持续时间 | 100-200ms |
| 扫描间隔 | 两次扫描开始的时间间隔 | 200-500ms |
| 扫描模式 | 被动扫描 vs 主动扫描 | 主动扫描(获取更多数据) |
| 过滤策略 | 是否只接收特定设备 | 按需开启 |
核心原则:扫描窗口 ≤ 扫描间隔,否则会漏包。扫描窗口越大,功耗越高,但发现概率也越高。做网关时,我一般把扫描窗口设为 150ms,间隔 300ms,兼顾功耗和实时性。
嗯,这章的内容差不多就这些。蓝牙版本、协议栈分层、广播扫描机制,这三块是后续所有选型和配置的基础。你把这些吃透了,后面讲网关硬件选型、固件开发的时候,就不会觉得吃力。