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 角色与拓扑的关系图
下面这张图展示了四种角色如何组合成三种拓扑。我建议你仔细看看,理解角色和拓扑之间的映射关系。
3.7 实际项目中的角色选择
做产品时,角色选择不是拍脑袋定的。我一般会按这个流程走:
- 确定数据流向:是单向还是双向?单向选广播/观察者,双向选外设/中央或Mesh。
- 评估节点数量:2个设备?点对点。几十个?广播或Mesh。几百个?Mesh。
- 考虑功耗预算:电池供电且希望用一年以上?优先考虑广播者或外设。中央和Mesh节点功耗会高一些。
- 检查硬件能力:有些低端芯片不支持同时做中央和外设,或者支持的连接数有限。
一个小技巧:如果你不确定该用哪种拓扑,先从最简单的点对点开始做原型验证。等跑通了,再考虑扩展到广播或Mesh。别一上来就搞Mesh,调试起来真的很头疼。
3.8 本章小结
这一章我们聊了BLE的四种角色和三种拓扑。记住几个核心点:
- 广播者和观察者用于单向、无连接通信
- 外设和中央用于双向、连接通信
- 点对点、广播、Mesh三种拓扑各有适用场景
- 角色可以复用,一个设备可以同时是外设和中央