4、BLE广播功耗优化:广播间隔、广播类型与数据包长度
广播,是BLE设备最基础的行为之一。但很多人没意识到,广播阶段的功耗,往往占了整个设备功耗的大头。我见过不少项目,明明待机电流设计得挺好,一跑广播就崩了——电池撑不过一周。
这一章,咱们就聊聊广播功耗怎么优化。说白了,就是三个维度:广播间隔怎么选、广播类型怎么定、数据包长度怎么控。
4.1 广播间隔(Advertising Interval)的选择
广播间隔,就是设备两次广播事件之间的时间。单位是0.625ms,协议里叫Advertising Interval。
举个例子:你设了100,那实际间隔就是100 × 0.625ms = 62.5ms。
间隔越短,设备被发现得越快,但功耗也越高。这是个典型的trade-off。
核心公式:广播功耗 ≈ 广播事件次数 × 单次广播能耗
间隔减半,功耗翻倍。就是这么直接。
我个人习惯,在项目初期先按这个经验值来选:
| 应用场景 | 推荐广播间隔 | 平均电流(参考) |
|---|---|---|
| 快速配对/发现 | 20ms - 50ms | ~500μA - 1mA |
| 常规信标 | 100ms - 500ms | ~50μA - 200μA |
| 低功耗传感器 | 1s - 5s | ~5μA - 20μA |
我在一个智能门锁项目里遇到过一个问题:客户要求手机靠近时1秒内必须发现设备。我一开始设了20ms间隔,功耗直接飙到1.2mA。后来改成动态广播——平时用1s间隔,检测到手机靠近信号再切到20ms。功耗降了80%。
技巧:如果产品支持,尽量用动态广播间隔。平时低频,需要时高频。这是性价比最高的方案。
4.2 广播类型功耗对比
BLE广播分三种类型:可连接广播、不可连接广播、扫描响应广播。功耗差异不小。
你想想看,这三种广播,本质上区别在哪?
- 可连接广播(Connectable):广播包+扫描响应包,设备可以被连接。功耗最高。
- 不可连接广播(Non-connectable):只发广播包,不响应扫描请求。功耗最低。
- 扫描响应广播(Scannable):广播包+扫描响应包,但不可连接。功耗居中。
我做过一个对比测试,用同一块开发板,同样的广播间隔(100ms),结果如下:
| 广播类型 | 平均电流 | 适用场景 |
|---|---|---|
| 不可连接广播 | ~45μA | 信标、广播数据 |
| 扫描响应广播 | ~65μA | 需要额外数据但不需要连接 |
| 可连接广播 | ~85μA | 需要建立连接 |
嗯,这里要注意:如果你的设备只是发个温度数据,根本不需要连接,那就别用可连接广播。我曾经见过一个项目,明明只是广播温湿度,却用了可连接广播,白白多耗了40%的电流。
避坑指南:我曾经在一个项目中,为了省事,所有设备统一用了可连接广播。结果功耗超标,排查了两天才发现是广播类型的问题。后来改成不可连接广播,电流直接降了一半。
4.3 广播数据包长度优化
广播数据包,最大31字节。很多人觉得,反正就31字节,能塞多少塞多少。其实不然。
广播包越长,空中传输时间越长,功耗也越高。虽然单次差异不大,但积少成多。
我建议你遵循这几个原则:
- 只放必要数据。比如设备名称,如果不需要显示全名,用缩写。
- 合并AD Structure。多个数据尽量合并到一个AD Structure里。
- 避免冗余。比如UUID,如果协议里已经定义了,广播里就别重复。
举个例子,一个典型的iBeacon广播包:
// 优化前:31字节全用满
0x02 0x01 0x06 // Flags
0x1A 0xFF 0x4C 0x00 // Manufacturer Specific Data
0x02 0x15 // iBeacon Proximity UUID
... // 20字节UUID + Major + Minor + Tx Power
// 优化后:只保留核心数据
0x02 0x01 0x06 // Flags
0x0A 0xFF 0x4C 0x00 // Manufacturer Specific Data
0x02 0x15 // iBeacon Proximity UUID
... // 只保留必要的UUID和Tx Power
我在一个蓝牙手环项目里,把广播包从31字节压缩到18字节,广播功耗降低了约15%。虽然不多,但对于纽扣电池供电的设备来说,这15%可能就是多撑一个月的关键。
小技巧:用Wireshark抓包,看看你的广播包里到底塞了哪些没用的数据。我每次优化前都会先抓包分析,往往能发现一些「历史遗留」的冗余字段。
4.4 综合优化建议
好了,三个维度都聊完了。最后给个总结性的建议:
- 广播间隔:能长就别短,能用动态就别固定。
- 广播类型:不需要连接就别用可连接广播。
- 数据包长度:能短就别长,只放必要数据。
这三个点,任何一个优化到位,都能省下可观的功耗。三个都做到,你的设备续航至少能提升30%-50%。
下一章,咱们聊聊连接阶段的功耗优化。连接建立之后,功耗怎么控?有哪些坑?到时候细说。