广播类型与模式:可连接广播、可扫描广播、不可连接广播、定向广播、广播间隔与占空比
BLE 广播,说白了就是设备在「喊话」。但喊话的方式有好几种——有的想让别人连进来,有的只想让别人看看数据,有的干脆就是「一次性通知」。你想想看,如果所有设备都用同一种方式广播,那信道早就挤爆了。
这一节,我把 BLE 广播的几种类型和模式拆开讲。每种模式我都踩过坑,咱们一个一个来。
广播类型的核心分类
BLE 规范定义了四种广播类型。它们的区别,主要在于「能不能被扫描」和「能不能被连接」。
| 广播类型 | 可被扫描 | 可被连接 | 典型场景 |
|---|---|---|---|
| 可连接广播 | ✅ | ✅ | 传感器、外设等待主机连接 |
| 可扫描广播 | ✅ | ❌ | 信标、数据采集但不建立连接 |
| 不可连接广播 | ❌ | ❌ | 广播通知、单向数据推送 |
| 定向广播 | ❌ | ✅(仅对指定设备) | 快速重连、低延迟配对 |
关键点:「可扫描」和「可连接」是正交属性。一个广播包可以同时被扫描和连接,也可以只被扫描不连接,或者干脆两者都关掉。
可连接广播(Connectable Advertising)
这是最常见的广播模式。设备发出广播包,告诉周围:「我在这里,快来连我。」
我在项目中遇到过一个问题:某个心率传感器一直发可连接广播,但手机就是扫不到。后来发现是广播间隔设得太短,导致射频模块过热,自动降频了。嗯,这里要注意——广播间隔不是越短越好。
可连接广播的典型流程:
- 外设发送广播包(包含设备地址、名称、服务 UUID)
- 主机(手机/网关)扫描到广播包
- 主机发送连接请求(CONNECT_REQ)
- 双方进入连接状态,后续走连接通信
个人习惯:做产品原型时,我一般先用可连接广播调试。等逻辑稳定了,再根据需求切换成其他类型。这样排查问题方便。
可扫描广播(Scannable Advertising)
这种广播允许别人扫描,但不允许连接。说白了就是:「你可以看我的数据,但别想连进来。」
可扫描广播通常配合 Scan Response(扫描响应) 使用。设备在广播包中放少量关键信息,如果主机发起扫描请求,设备再回复更详细的数据。
举个例子:
- 广播包:设备名称 + 服务 UUID(31 字节以内)
- 扫描响应:制造商自定义数据 + 完整设备信息(额外 31 字节)
我曾经用可扫描广播做室内定位信标。广播包只放 UUID 和电量,扫描响应里放坐标和楼层信息。这样普通扫描器只能看到 UUID,只有主动扫描的设备才能拿到完整数据——既省电又安全。
注意:可扫描广播不能同时是可连接广播。如果你需要两者兼得,请使用可连接广播(它本身就支持扫描响应)。
不可连接广播(Non-connectable Advertising)
这种模式最简单——只发不收。设备只管往外扔数据,不理会任何扫描请求或连接请求。
典型场景:
- 苹果 iBeacon、Google Eddystone 等信标协议
- 环境传感器周期性上报温度、湿度
- 设备状态广播(如「门已开」「报警触发」)
不可连接广播的优点是功耗极低。因为设备不需要监听扫描请求,也不用等待连接,发完就睡。我记得有个项目做温湿度标签,用不可连接广播,一粒 CR2032 电池撑了两年多。
但缺点也很明显:数据是单向的,主机无法确认设备是否收到。说白了就是「发完即忘」。
定向广播(Directed Advertising)
定向广播是「点对点」的。设备只对某个特定设备广播,其他设备即使收到也会忽略。
这种模式主要用于快速重连。比如你的蓝牙耳机已经配对过手机,下次开机时,耳机直接发定向广播给手机:「我在这里,快来连我。」
定向广播有两种子类型:
- 低占空比定向广播:间隔较长,省电,适合后台扫描
- 高占空比定向广播:间隔极短(通常 3.75ms),快速建立连接,但功耗高
避坑指南:我曾经在耳机项目里用高占空比定向广播做重连,结果发现手机在锁屏状态下扫描窗口不够密,经常漏掉广播包。后来我加了一个「先发几次高占空比,没回应就切回可连接广播」的策略——问题解决了。
广播间隔与占空比
广播间隔,就是两次广播事件之间的时间。占空比,则是广播事件持续时间与间隔的比值。
这两个参数直接影响功耗和发现速度。
| 参数 | 范围 | 影响 |
|---|---|---|
| 广播间隔 | 20ms ~ 10.24s | 间隔越短,发现越快,功耗越高 |
| 广播持续时间 | 约 0.5ms ~ 4ms(取决于数据量) | 数据越多,持续时间越长 |
| 占空比 | 通常 0.1% ~ 5% | 占空比越高,功耗越大 |
举个例子:广播间隔 100ms,每次广播持续 1ms,占空比就是 1%。如果间隔缩短到 20ms,占空比变成 5%,功耗直接翻 5 倍。
我个人习惯这样选:
- 需要快速发现:间隔 20~50ms,占空比 2%~5%(如耳机配对)
- 平衡功耗与发现:间隔 100~200ms,占空比 0.5%~1%(如智能家居传感器)
- 极致省电:间隔 1~10s,占空比 0.01%~0.1%(如信标、标签)
小技巧:广播间隔不是固定值。BLE 规范允许在间隔上叠加 0~10ms 的随机延迟,避免多个设备同时广播造成碰撞。这个随机延迟是自动加的,你不需要手动配置。
四种广播类型的对比总结
我把四种广播类型放在一张表里,方便你对照选型:
| 特性 | 可连接 | 可扫描 | 不可连接 | 定向 |
|---|---|---|---|---|
| 功耗 | 中 | 中低 | 低 | 高(高占空比)/ 低(低占空比) |
| 发现速度 | 快 | 中 | 中 | 极快(高占空比) |
| 数据量 | 31B + 扫描响应 31B | 31B + 扫描响应 31B | 31B(无扫描响应) | 仅设备地址(6B) |
| 典型应用 | 传感器、外设 | 信标、数据采集 | 单向通知 | 快速重连 |
广播模式与类型的关系图
下面这张图展示了四种广播类型与扫描、连接的关系:
实际项目中的选型建议
说了这么多,到底怎么选?我根据经验给你几个参考:
- 做可穿戴设备:用可连接广播,间隔 50~100ms。既要能被手机发现,又要省电。
- 做信标:用不可连接广播,间隔 500ms~1s。不需要连接,只发数据就行。
- 做数据采集网关:用可扫描广播。网关扫描设备,设备回复扫描响应,不建立连接,省资源。
- 做耳机/音箱重连:先用高占空比定向广播(3.75ms 间隔)尝试快速重连,失败后切回可连接广播。
重要提醒:广播类型和间隔的选择,必须在产品设计阶段就定下来。我见过一个项目,开发时用可连接广播,量产前想改成不可连接——结果发现协议栈配置、功耗模型、测试用例全都要改,差点延期。所以,一开始就想清楚。
好了,广播类型和模式就讲到这里。记住一句话:广播不是「越强越好」,而是「刚刚好」。选对类型,配好间隔,你的 BLE 产品才能既省电又稳定。