Advertising(广播) — 是 Bluetooth Low Energy 中的一种机制,外设设备通过该机制在三个专用信道(37、38、39)上发送短数据包来宣告自己的存在。Bluetooth Core Specification 5.4 (2023) 定义了两种广播类型:可连接广播 — 设备已准备好连接,和不可连接广播 — 由信标(Beacon)使用,仅传输数据而不建立双向连接。广播参数 — 间隔从 20 ms 到 10.24 s、发射功率从 -20 到 +10 dBm 和数据包类型 — 直接影响设备的发现速度和能耗,这对于开发电池供电的物联网设备至关重要。
要点
Advertising(广播) — 是定期发送短数据包的过程,BLE 设备通过该过程宣告其存在和可用性。与经典蓝牙不同,经典蓝牙中搜索设备需要几秒钟,而 BLE 广播可以在几毫秒内发现设备,同时消耗最少的能量。
BLE 架构将设备分为两个角色:外设(Peripheral)(广播)和 中央设备(Central)(扫描)。外设发送广播数据包,中央设备扫描信道并决定是否连接。这种非对称模型是 BLE 的关键优势:广播设备仅消耗能量用于发送短数据包,而不是持续监听信道。
广播过程包括三个阶段:广播事件(在所有三个信道上发送数据包)、扫描请求/响应(与中央设备的可选交换)和 连接请求(中央设备发起连接)。每个阶段由链路层级别的蓝牙控制器管理。
BLE 使用 40 个信道 在 2.4 GHz 频段中,其中 37(2402 MHz)、38(2426 MHz)和 39(2480 MHz)专用于广播。三个信道是发现可靠性和带宽之间的折衷:一个信道可能被 Wi-Fi 或其他干扰占用,但设备将在其他两个信道上被发现。
信道 37 位于 Wi-Fi 信道 1 附近,信道 39 位于 Wi-Fi 信道 6 附近,而信道 38 位于它们之间,在最小干扰区域。选择三个信道 保证了即使在密集的无线电环境下也能发现设备 — 例如,在有数十个 Wi-Fi 接入点的购物中心。
外设按顺序在所有三个信道上发送广播数据包 — 这称为 广播事件。中央设备一次扫描一个信道,根据蓝牙控制器中实现的算法在它们之间切换。在没有冲突的情况下,一个广播事件期间的发现概率接近 100%。
Bluetooth Core Specification 定义了多种广播协议数据单元(PDU),每种都有自己的用途。主要类型:ADV_IND(可连接无定向广播) — 具有连接能力的标准广播,ADV_NONCONN_IND(不可连接无定向广播) — 仅广播无连接,ADV_SCAN_IND(可扫描无定向广播) — 支持扫描请求,ADV_DIRECT_IND(定向广播) — 针对特定中央设备的广播。
ADV_IND — 最常见的类型,用于大多数 BLE 设备。在收到 ADV_IND 后,中央设备可以发送连接请求并建立连接。ADV_NONCONN_IND 由信标(Beacon)使用:设备广播但不接受连接请求 — 仅单向数据传输。
| PDU 类型 | 描述 | 连接 | 扫描响应 |
|---|---|---|---|
| ADV_IND | 标准广播 | 是 | 是 |
| ADV_DIRECT_IND | 特定中央设备广播 | 是 | 否 |
| ADV_NONCONN_IND | 无连接(信标) | 否 | 否 |
| ADV_SCAN_IND | 支持扫描 | 是 | 是 |
| ADV_EXT_IND | 扩展广播(BLE 5.0) | 是 | 是 |
ADV_DIRECT_IND 包含目标中央设备的地址,允许在无需等待扫描的情况下快速建立连接。当设备已经相互"认识"时使用 — 例如,在重新连接到之前配对的智能手机后。这种类型降低了能耗,因为不需要在所有信道上广播。
广播间隔 — 是连续广播事件之间的时间。规范允许 20 ms 到 10.24 s 的间隔,步长为 0.625 ms。实际间隔计算为固定值和随机延迟(0–10 ms)的总和,这降低了多个广播设备之间冲突的可能性。
间隔的选择是在 发现速度 和 能耗 之间的平衡。在 20 ms 的间隔下,设备将在 20–30 ms 内被发现,但平均电流约为 1–2 mA。在 1000 ms 的间隔下 — 发现将需要最多 1 秒,但平均电流将降至 50–100 µA。对于大多数物联网设备,建议的间隔为 200–1000 ms。
根据 德州仪器应用报告 SWRA478(2024),将广播间隔从 100 ms 增加到 1000 ms 可将能耗降低 90%。如果设备不需要立即被发现(例如,每分钟发送一次数据的温度传感器),最佳间隔为 1000–2000 ms。
另一个参数 — 广播超时 — 设备广播的最长时间。在 iOS 中,外设在后台模式下 180 秒后自动关闭广播。在 Android 中没有这样的限制,但制造商可能会添加自己的限制。
扫描响应 — 是外设响应来自中央设备的扫描请求而发送的额外数据包(最多 31 字节)。扫描请求由中央设备在收到广播数据包后发送,如果它在连接前需要更多信息。扫描响应不需要额外广播 — 仅在请求时发送,节省信道资源。
典型数据分布:在 广播 PDU(31 字节)中放置标志(3 字节)、服务 UUID(2–16 字节)和制造商数据(剩余字节)。在 扫描响应 中传输设备的全名(最多 28 字节)和额外的 UUID 或 TX Power Level。这种划分允许中央设备根据 UUID 快速过滤设备,而无需读取扫描响应。
在设计广播数据包时请考虑:如果广播 PDU 中的所有 31 字节都已占用,中央设备将无法确定该设备是否支持扫描响应。建议在广播 PDU 中至少留出 3–5 字节 空闲以指示扫描响应能力。
扩展广播(BLE 5.0) — 是广播机制的扩展,将广播数据包的大小从 31 字节增加到 251 字节,并添加了新的数据包类型。扩展广播还支持编码 PHY,可将开放区域中的通信范围增加到 1 公里,以及周期性广播,用于同步多个中央设备。
主要创新:ADV_EXT_IND — 扩展广播 PDU,可以在单个数据包中传输最多 251 字节的数据。扩展广播仅使用主信道(37、38、39)来指示完整数据在哪个辅助信道(0–36)上传输。这减少了广播信道的负载并增加了系统的总带宽。
周期性广播 — 一种额外的机制,外设在辅助信道上以固定间隔发送数据,中央设备可以与此序列同步。用于需要定期数据更新的服务 — 例如,音频传输或实时传感器读数。
| 参数 | BLE 标准 | 扩展 BLE 5.0 |
|---|---|---|
| 最大数据包大小 | 31 字节 | 251 字节 |
| 信道 | 仅 37、38、39 | + 辅助 0–36 |
| 范围 | 最远 100 米 | 最远 1000 米(编码 PHY) |
| 速度 | 1 Mbps | 125 kbps – 2 Mbps |
| 周期性 | 否 | 是 |
iOS(Core Bluetooth) 提供 CBPeripheralManager 来管理广播。广播参数通过 advertisementData 字典设置,使用键 CBAdvertisementDataLocalNameKey(设备名称)、CBAdvertisementDataServiceUUIDsKey(服务 UUID)、CBAdvertisementDataTxPowerLevelKey(功率)。iOS 自动管理广播间隔,不允许手动设置。
import CoreBluetooth
class AdvertiserManager: NSObject, CBPeripheralManagerDelegate {
private var peripheralManager: CBPeripheralManager!
func startBLEAdvertising() {
let data: [String: Any] = [
CBAdvertisementDataLocalNameKey: "BLE Beacon",
CBAdvertisementDataServiceUUIDsKey: [
CBUUID("180F")
],
CBAdvertisementDataIsConnectable: true
]
peripheralManager.startAdvertising(data)
}
}
Android(BluetoothLeAdvertiser) 提供更详细的控制。可用:AdvertiseSettings — 设置模式(LOW_POWER、BALANCED、LOW_LATENCY)、发射功率和间隔;AdvertiseData — 数据包内容。Android 在兼容设备上支持扩展广播(BLE 5.0),但这类设备在市场上的份额约为 30–40%。
BluetoothLeAdvertiser advertiser =
BluetoothAdapter.getDefaultAdapter()
.getBluetoothLeAdvertiser();
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(
AdvertiseSettings.ADVERTISE_MODE_LOW_POWER
)
.setTxPowerLevel(
AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM
)
.build();
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(new ParcelUuid(
UUID.fromString(
"0000180F-0000-1000-8000-00805F9B34FB"
)
))
.build();
advertiser.startAdvertising(
settings, data, advertiseCallback
);
在开发跨平台 BLE 应用程序时,请考虑差异:iOS 不允许直接控制广播间隔,但保证在所有设备上稳定运行;Android 提供完全控制,但版本和制造商的碎片化可能导致不兼容。建议在两种平台的实际设备上 测试广播。
常见问题
可连接广播(ADV_IND)允许中央设备与设备建立 双向连接。不可连接广播(ADV_NONCONN_IND) — 仅单向数据传输,由信标(Beacon)用于广播标识符而无需连接可能。
标准广播数据包 — 31 字节,扫描响应 — 另外 31 字节。扩展广播(BLE 5.0+)通过使用辅助信道传输数据将限制提高到 251 字节。
对于大多数物联网设备,建议 500–1000 ms。如果需要快速发现(例如,连接耳机) — 20–50 ms。对于数据发送频率较低的传感器 — 1000–2000 ms 以节省能源。
三个信道(37、38、39)是 发现可靠性 和带宽之间的折衷。一个信道可能被 Wi-Fi 占用,但设备将在其他两个信道上被发现。信道 38 位于 Wi-Fi 信道之间的最小干扰区域。
广播是 BLE 中的主要能耗来源。在 1000 ms 的间隔下,平均电流为 50–100 µA,使设备能够使用 CR2032 电池工作一年。在 20 ms 的间隔下,电流增加到 1–2 mA,将工作时间缩短到几周。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。