广播参数详解:广播间隔、广播延迟、广播数据长度、广播通道选择

广播参数,说白了就是决定你的设备「怎么喊」、「喊多大声」、「喊多久」以及「在哪个频道喊」。这些参数调得好,设备既省电又能被快速发现;调得不好,要么扫描端死活搜不到,要么电池两天就废了。

我刚开始做 BLE 项目时,就吃过广播参数的亏。当时一个信标产品,客户反馈有些手机能扫到,有些扫不到。排查了半天,发现是广播间隔设得太长,加上信道选择没处理好。嗯,从那以后我再也不敢随便填参数了。

2.1 广播间隔(Advertising Interval)

广播间隔,就是两次广播事件之间的时间。单位是 0.625ms,BLE 协议里叫一个「slot」。

公式很简单:
实际间隔 = advInterval × 0.625ms

举个例子:
如果你设置 advInterval = 160,那实际间隔就是 160 × 0.625 = 100ms。

关键范围:

  • 最小间隔:20ms(对应 advInterval = 32)
  • 最大间隔:10.24s(对应 advInterval = 16384)
  • 推荐范围:100ms ~ 1s(大部分场景够用)

我个人习惯把广播间隔分成三档:

场景 推荐间隔 说明
快速发现(如配对) 20ms ~ 50ms 扫描端能秒级发现,但耗电快
常规信标 100ms ~ 500ms 平衡功耗与发现速度
低功耗场景 1s ~ 5s 电池续航优先,发现延迟可接受

注意:广播间隔不能低于 20ms。这是 BLE 协议硬性限制,低于这个值设备可能无法通过认证。我曾经见过有人设成 10ms,结果芯片直接不工作——因为底层硬件根本来不及处理。

2.2 广播延迟(Advertising Delay)

广播延迟,很多人容易忽略。它其实是一个随机值,范围是 0ms ~ 10ms。

为什么要加这个延迟?
你想想看,如果多个设备都用同样的广播间隔,它们很可能在同一个时间点发送数据包,造成碰撞。加上随机延迟后,碰撞概率大大降低。

实际广播间隔 = 设定的广播间隔 + 随机延迟

举个例子:
你设了 100ms 的广播间隔,实际可能是 100ms + 3.2ms = 103.2ms,下一次可能是 100ms + 7.8ms = 107.8ms。

我的经验:广播延迟是协议栈自动加的,开发者一般不需要手动干预。但如果你在做高密度设备部署(比如一个房间里有 50 个以上 BLE 设备同时广播),这个随机延迟就特别重要。我曾经在展会上遇到过 100 多个设备同时广播,结果扫描端几乎收不到任何数据——就是因为碰撞太严重。后来把广播间隔拉开,加上延迟的随机性,问题才解决。

2.3 广播数据长度

广播数据包能装多少东西?
BLE 4.x 时代,广播数据最大是 31 字节。到了 BLE 5.0,扩展广播可以到 255 字节,甚至更多。

但别高兴太早——31 字节里还要包含必要的信息:

  • Flags(1~3 字节):标识设备是否支持 LE、BR/EDR 等
  • Tx Power Level(3 字节):发射功率,用于距离估算
  • Local Name(可变):设备名称
  • Service UUID(可变):服务标识
  • Manufacturer Specific Data(可变):厂商自定义数据

我建议你按这个优先级来分配那 31 字节:

  1. Flags —— 必须带,否则扫描端可能不识别
  2. Service UUID —— 让扫描端快速过滤
  3. Local Name —— 用户能看到设备名
  4. Manufacturer Data —— 放你的自定义数据

实际案例:我做的一个温湿度传感器,广播数据是这样分配的:

Flags: 02 01 06          (3字节)
UUID:  03 02 AA FE        (3字节,Eddystone)
Name:  09 09 54 65 6D 70  (7字节,"Temp")
Data:  0B FF 59 01 23 0A  (6字节,温度+湿度)
Total: 19字节,还剩12字节备用

注意:广播数据超过 31 字节时,需要用到 BLE 5.0 的扩展广播(Extended Advertising)。但扩展广播不是所有芯片都支持,而且会增加功耗。我建议你先确认目标芯片的能力,再决定是否用扩展广播。

2.4 广播通道选择

BLE 在 2.4GHz 频段有 40 个通道,但广播只用其中 3 个:

  • 通道 37(2402 MHz)
  • 通道 38(2426 MHz)
  • 通道 39(2480 MHz)

为什么选这三个?
因为它们避开了 Wi-Fi 常用的 1、6、11 通道。说白了,就是故意错开,减少干扰。

广播通道的选择策略有两种:

策略 说明 适用场景
全通道广播 在 37/38/39 三个通道上都发 默认模式,兼容性最好
单通道广播 只在一个通道上发 低功耗、低干扰环境

我的建议:除非你非常确定环境干扰很小,否则别用单通道广播。我曾经在一个工厂里测试,只用了通道 38,结果旁边一台 Wi-Fi 路由器正好在 6 通道(2437 MHz)上跑,干扰严重到扫描端几乎收不到数据。换成全通道广播后,问题立刻解决。

下面这张图展示了广播通道与 Wi-Fi 通道的关系:

BLE 广播通道与 Wi-Fi 通道分布 频率 (MHz) 2400 2420 2440 2460 2480 2500 CH 37 2402 MHz CH 38 2426 MHz CH 39 2480 MHz Wi-Fi CH 1 Wi-Fi CH 6 Wi-Fi CH 11 BLE 广播通道故意避开 Wi-Fi 常用通道,减少干扰

2.5 参数调优实战建议

说了这么多理论,最后给几个实战建议:

快速调优清单:

  • 发现速度优先:广播间隔设 20ms ~ 50ms,全通道广播
  • 省电优先:广播间隔设 1s ~ 5s,可以考虑单通道(但慎用)
  • 数据量大:用 BLE 5.0 扩展广播,或者分多次广播
  • 高密度部署:拉开广播间隔,利用随机延迟减少碰撞

我的习惯:开发阶段先用 100ms 全通道广播,方便调试。等产品定型后,再根据实际场景优化。别一开始就追求极致省电,否则调试时你会疯掉——扫半天扫不到设备,你都不知道是代码问题还是参数问题。