3. 网络拓扑与角色:Friend节点、Low Power节点、Proxy节点、Relay节点
好,咱们今天聊聊蓝牙Mesh里的几个关键角色。说白了,一个Mesh网络能不能跑得稳,很大程度上取决于这些节点怎么分工。我刚开始接触蓝牙Mesh时,也搞混过Friend和Relay的区别,后来在项目里踩了坑才真正明白。
3.1 四种核心角色概述
蓝牙Mesh规范定义了四种节点角色。它们不是硬件上的区别,而是功能上的划分。同一个设备,可以同时扮演多个角色。举个例子,一个智能灯泡可以既是Relay又是Proxy。
| 角色 | 英文名 | 核心功能 | 典型功耗 |
|---|---|---|---|
| 中继节点 | Relay | 转发消息,扩大网络覆盖 | 中等 |
| 低功耗节点 | Low Power (LPN) | 省电,周期性休眠 | 极低 |
| 朋友节点 | Friend | 为LPN缓存消息 | 较高 |
| 代理节点 | Proxy | 让非Mesh设备(如手机)接入 | 中等 |
3.2 Relay节点——网络的“传声筒”
Relay节点是Mesh网络的基石。它的工作很简单:收到消息,然后转发出去。你想想看,如果没有Relay,两个距离远的设备根本没法通信。
Relay的工作原理:
- 收到一条消息后,检查TTL(生存时间)值。如果TTL大于1,就减1后转发。
- 每个Relay节点会维护一个“消息缓存”,防止重复转发同一条消息。
- 默认情况下,所有节点都可以作为Relay,但你可以关闭这个功能来省电。
重要参数:Relay节点的转发次数由TTL控制。TTL初始值通常设为7,意味着消息最多能跳7次。我在项目中遇到过,如果网络规模大,TTL设小了会导致某些设备收不到消息。
我的经验:在大型项目中,我习惯把TTL设成10左右。但别设太大,否则消息会在网络里“乱窜”,造成不必要的拥塞。
3.3 Low Power节点——省电才是王道
Low Power节点,简称LPN。这类设备通常靠电池供电,比如温湿度传感器、门磁开关。它们不能一直监听网络,那样太费电了。
LPN的工作模式:
- 大部分时间处于休眠状态,功耗可以降到微安级别。
- 每隔一段时间醒来,主动向它的Friend节点“拉取”消息。
- LPN本身不转发消息,也不参与中继。
为什么会这样?因为LPN如果一直开着接收器,电池撑不了几天。我做过一个项目,客户要求传感器电池续航两年,最后全靠LPN模式才实现。
避坑指南:我曾经遇到过LPN醒来后收不到Friend的响应,原因是两者之间的“友谊”超时了。记住,LPN的轮询间隔不能太长,否则Friend会以为它离线了。
3.4 Friend节点——LPN的“私人助理”
Friend节点是为LPN服务的。它负责缓存发往LPN的消息,等LPN醒来时再交给它。
Friend节点的职责:
- 与LPN建立“友谊”关系,协商好缓存大小和轮询间隔。
- 持续监听网络,接收所有发往LPN的消息。
- 将消息存储在缓存中,等待LPN来取。
- 如果缓存满了,就丢弃最旧的消息。
说白了,Friend就是LPN的“消息信箱”。LPN不用一直守着,有空来取就行。
| 友谊参数 | 说明 | 我常用的值 |
|---|---|---|
| ReceiveDelay | LPN醒来后等待多久才接收消息 | 100ms |
| PollTimeout | LPN两次轮询的最大间隔 | 10秒 |
| FriendCache | Friend能缓存多少条消息 | 16条 |
注意:一个Friend节点可以同时服务多个LPN,但每个LPN只能有一个Friend。我建议一个Friend最多带5个LPN,否则缓存压力太大。
3.5 Proxy节点——连接“两个世界”的桥梁
Proxy节点解决了一个关键问题:手机、平板这些设备不支持蓝牙Mesh协议栈,怎么接入Mesh网络?
Proxy的工作原理:
- Proxy节点同时支持两种协议:标准的蓝牙GATT和蓝牙Mesh。
- 手机通过GATT连接到Proxy,发送Mesh协议数据包。
- Proxy把GATT数据转换成Mesh数据,转发到网络中。
- 反过来,Mesh网络的消息也通过Proxy传给手机。
你想想看,没有Proxy的话,你连用手机App控制灯泡都做不到。我刚开始做产品时,就忽略了Proxy节点的配置,结果手机死活连不上网络。
我的建议:在产品设计中,至少保证网络中有2-3个Proxy节点。如果一个Proxy掉线了,手机还能通过其他Proxy接入。我曾经在一个项目中只放了一个Proxy,结果它坏了,整个网络就“失联”了。
3.6 实际组网中的分工策略
好了,四种角色都讲完了。那在实际项目中,怎么分配这些角色呢?
我总结了一套分工原则:
- 墙插设备(如智能插座、网关):设为Relay + Friend + Proxy。这类设备供电稳定,可以承担更多任务。
- 电池设备(如传感器、门锁):设为LPN。省电是第一要务。
- 移动设备(如手机、平板):通过Proxy接入,本身不加入Mesh网络。
- 灯具、开关:设为Relay。它们通常数量多,分布广,适合做中继。
核心原则:能者多劳。供电稳定的设备多干活,电池供电的设备少干活。这个道理很简单,但很多新手会搞反。
3.7 一个典型的组网案例
我去年做过一个智能办公项目,大概有200个节点。角色分配是这样的:
- 40个智能灯:Relay + Friend(为附近的传感器服务)
- 120个温湿度传感器:LPN(每5分钟上报一次数据)
- 30个墙壁开关:Relay(同时作为控制面板)
- 10个网关:Proxy + Relay + Friend(全能选手)
这个方案运行了一年多,非常稳定。LPN的电池续航达到了18个月,远超客户预期的12个月。
避坑指南:我曾经在一个项目中,把所有设备都设成了Relay。结果网络里消息满天飞,延迟高得离谱。记住,不是所有节点都需要做Relay。关掉不必要的Relay功能,能大幅降低网络拥塞。
嗯,关于网络拓扑和角色分工,今天就聊到这里。下一章我们会深入探讨Mesh网络的“寻址”机制,也就是消息怎么找到目标设备。到时候见。