3. BLE角色与拓扑:广播者、观察者、外设、中央、点对点、广播、Mesh网络拓扑

好,咱们进入第三章。这一章要聊的是BLE的角色和拓扑。说白了,就是搞清楚设备之间怎么互相称呼、怎么连、怎么传数据。

我刚开始接触BLE时,最困惑的就是这些角色名——广播者、观察者、外设、中央……听起来像一堆专业术语堆在一起。后来做项目多了才发现,这些角色其实对应着非常具体的硬件行为和协议栈配置。搞懂了它们,你写代码时就知道该调用哪些API、配哪些参数。

3.1 四大核心角色

BLE规范定义了四种基本角色。它们不是互斥的,一个设备可以同时扮演多个角色。嗯,这点很重要,后面会细说。

角色 英文 核心行为 典型设备
广播者 Broadcaster 单向发送广播包,不接收连接 信标、温度传感器(只发数据)
观察者 Observer 扫描并接收广播包,不发起连接 扫描仪、网关监听节点
外设 Peripheral 发送广播包,接受连接请求 手环、心率带、智能锁
中央 Central 扫描广播包,主动发起连接 手机、平板、PC

关键点:广播者和外设都会发广播包,区别在于外设愿意接受连接,广播者不接。观察者和中央都会扫描,区别在于中央会主动去连,观察者只看不连。

3.2 广播者与观察者:单向数据流

先说说最简单的组合:广播者 + 观察者。

广播者只管往外扔数据包,不关心有没有人收。观察者只管扫描,不回复、不连接。这是一种单向、无连接的通信方式。

我在项目中遇到过这样一个场景:一个仓库里放了上百个温湿度传感器,每个传感器每隔5秒广播一次当前数据。一个网关在仓库中央做观察者,扫描所有广播包。这样做的好处是——传感器功耗极低,而且网关可以同时接收上百个传感器的数据,不需要建立连接。

我的经验:广播者模式适合数据量小、发送频率低、对实时性要求不高的场景。广播包最大31字节,别想着传大文件。

3.3 外设与中央:经典连接模式

这是BLE最常用的组合。外设发广播,中央扫描到后发起连接请求。连接建立后,双方就可以双向通信了。

你想想看,手机连手环、平板连键盘,都是这个模式。中央设备通常资源更丰富(屏幕、大电池、强CPU),外设则更注重低功耗。

这里有个坑,我曾经踩过:外设的广播间隔和中央的扫描窗口要匹配好。如果外设每100ms发一次广播,中央每200ms扫描一次,那理论上每次扫描都能抓到广播。但如果中央扫描窗口太短,就可能漏掉广播包,导致连接建立变慢。

避坑指南:我曾经在一个项目中,外设广播间隔设成了500ms,中央扫描窗口只有50ms。结果连接建立时间长达3-5秒,用户体验极差。后来把广播间隔调到100ms,扫描窗口调到150ms,连接时间降到了1秒以内。

3.4 三种网络拓扑

角色组合起来,就形成了不同的网络拓扑。BLE主要有三种:点对点、广播、Mesh。

3.4.1 点对点拓扑

一个中央连接一个外设,形成一对一的连接。这是最基础的拓扑,也是BLE规范最早支持的。

  • 特点:连接稳定、延迟低、功耗可控
  • 典型场景:手机连耳机、平板连键盘
  • 限制:一个中央通常只能连几个外设(取决于芯片能力)

3.4.2 广播拓扑

一个广播者向多个观察者发送数据,一对多,无连接。观察者之间互不通信。

  • 特点:扩展性好、功耗极低、无连接开销
  • 典型场景:信标定位、传感器数据广播
  • 限制:单向通信,数据量小,无确认机制

3.4.3 Mesh拓扑

Mesh是BLE 4.0之后才引入的(通过规范补充),它实现了多对多通信。每个节点都可以转发消息,网络可以覆盖很大的范围。

  • 特点:覆盖范围广、自愈能力强、节点间可中继
  • 典型场景:智能照明、楼宇自动化
  • 限制:延迟较高、配置复杂、功耗比点对点高

我个人习惯:做产品选型时,先问自己三个问题——数据是单向还是双向?需要覆盖多大范围?节点数量是多少?答案基本就能帮你定下拓扑。

3.5 拓扑对比一览

特性 点对点 广播 Mesh
通信方向 双向 单向 双向(多跳)
节点数量 2(1对1) 1对N N对N
覆盖范围 短(~10m) 短(~10m) 远(可扩展)
功耗 低 极低 中等
延迟 低 低 较高(多跳)
配置复杂度 简单 简单 复杂

3.6 角色与拓扑的关系图

下面这张图展示了四种角色如何组合成三种拓扑。我建议你仔细看看,理解角色和拓扑之间的映射关系。

BLE角色与拓扑关系图 广播拓扑 点对点拓扑 Mesh拓扑 广播者 观察者 广播包 外设 中央 连接 节点A 节点B 节点C 节点D 角色复用说明 • 外设可同时做广播者 • 中央可同时做观察者 • Mesh节点可同时是 外设+中央+广播者 角色不互斥

3.7 实际项目中的角色选择

做产品时,角色选择不是拍脑袋定的。我一般会按这个流程走:

  1. 确定数据流向:是单向还是双向?单向选广播/观察者,双向选外设/中央或Mesh。
  2. 评估节点数量:2个设备?点对点。几十个?广播或Mesh。几百个?Mesh。
  3. 考虑功耗预算:电池供电且希望用一年以上?优先考虑广播者或外设。中央和Mesh节点功耗会高一些。
  4. 检查硬件能力:有些低端芯片不支持同时做中央和外设,或者支持的连接数有限。

一个小技巧:如果你不确定该用哪种拓扑,先从最简单的点对点开始做原型验证。等跑通了,再考虑扩展到广播或Mesh。别一上来就搞Mesh,调试起来真的很头疼。

3.8 本章小结

这一章我们聊了BLE的四种角色和三种拓扑。记住几个核心点:

  • 广播者和观察者用于单向、无连接通信
  • 外设和中央用于双向、连接通信
  • 点对点、广播、Mesh三种拓扑各有适用场景
  • 角色可以复用,一个设备可以同时是外设和中央