4. 节点与角色:中继、代理、朋友、低功耗节点

蓝牙Mesh网络里,节点不是千篇一律的。每个节点可以承担不同的角色,就像团队里有人负责传话,有人负责带路,有人负责省电。这四种角色——Relay、Proxy、Friend、LPN——是Mesh协议栈的核心设计。理解它们,你才算真正入了Mesh的门。

一句话总结:一个节点可以同时具备多个角色。比如,一个插座既可以做中继,也可以做朋友节点。但低功耗节点(LPN)通常只做LPN,因为它要省电。

4.1 中继节点(Relay)

中继节点是Mesh网络的“传声筒”。它收到一条消息,如果发现不是给自己的,就转发出去。这样消息才能一跳一跳地覆盖整个网络。

核心功能:

  • 接收并重发消息,延长网络覆盖范围
  • 支持TTL(生存时间)控制,防止消息无限循环
  • 可以配置是否开启中继功能

我个人习惯,在部署大规模Mesh网络时,至少让60%的节点开启中继功能。太少的话,网络容易分裂;太多的话,空口冲突会加剧。

配置场景:智能照明系统里,每个灯泡都做中继。这样不管开关在哪,指令都能到达。

避坑指南:我曾经遇到一个项目,所有节点都开了中继,结果网络里全是重复包,丢包率飙升。后来我把一些边缘节点的中继关掉,只保留主干节点的中继,问题就解决了。记住,中继不是越多越好。

4.2 代理节点(Proxy)

代理节点是Mesh网络和外部设备(比如手机)之间的桥梁。手机没有Mesh协议栈,但可以通过GATT连接代理节点,间接和Mesh网络通信。

工作原理:

  1. 手机通过BLE GATT连接到代理节点
  2. 代理节点把GATT数据包转换成Mesh ADV包
  3. 反之亦然,实现双向通信

说白了,代理节点就是个翻译官。它让不支持Mesh的设备也能参与进来。

注意:代理节点会消耗更多电量,因为它需要同时维护GATT连接和Mesh网络。如果设备是电池供电的,要谨慎开启代理功能。

配置场景:智能门锁通常不做代理,因为它要省电。但网关设备必须做代理,因为手机要通过它来控制门锁。

4.3 朋友节点(Friend)与低功耗节点(LPN)

这两个角色是成对出现的。LPN要省电,所以大部分时间都在睡觉。Friend节点帮LPN缓存消息,等LPN醒来时再一次性发给它。

朋友节点(Friend):

  • 为LPN缓存消息
  • 维护朋友关系表
  • 定期检查LPN是否还在

低功耗节点(LPN):

  • 大部分时间处于休眠状态
  • 定期醒来,向Friend节点请求缓存的消息
  • 不能做中继,因为它在睡觉

你想想看,一个温度传感器,每10分钟才上报一次数据。如果它一直开着接收器,电池几天就没了。但做了LPN,它可以睡9分50秒,醒来10秒处理完消息再睡。电池能用一年。

关键参数:

参数 说明 典型值
ReceiveDelay LPN醒来后等待Friend回复的时间 10ms - 100ms
PollTimeout LPN两次轮询之间的间隔 1s - 100s
FriendQueueSize Friend节点为LPN缓存的消息数量 1 - 64

配置场景:智能门磁传感器做LPN,网关做Friend。门磁平时睡觉,只有门被打开时才醒来发消息。网关帮它缓存其他节点的配置更新,等门磁下次醒来再取走。

调试技巧:我在调试LPN时,经常用抓包工具看PollTimeout是否合理。如果设得太短,LPN频繁醒来,省电效果差;设得太长,消息延迟会变大。一般传感器设5-10秒,执行器设1-2秒。

4.4 角色组合与网络拓扑

一个节点可以同时扮演多个角色。比如,一个智能插座可以同时是中继、朋友节点和代理节点。但要注意,角色越多,功耗越高,处理负担也越重。

常见组合:

  • 纯中继:只转发消息,适合供电稳定的设备
  • 中继+朋友:既转发消息,又为LPN缓存,适合网关
  • 代理+中继:手机入口+网络转发,适合智能音箱
  • 纯LPN:只睡觉和轮询,适合电池传感器

下面这张图展示了四种角色在Mesh网络中的位置和关系:

蓝牙Mesh节点角色关系图 蓝牙Mesh节点角色关系图 手机(GATT) 代理节点(Proxy) 中继节点(Relay) 朋友节点(Friend) 低功耗节点(LPN) 其他节点 GATT ADV ADV 轮询/缓存 消息转发 说明: • 手机通过GATT连接代理节点,代理节点将数据转为Mesh ADV包转发给中继节点。 • 朋友节点为LPN缓存消息,LPN定期轮询取走消息,其余时间休眠省电。

4.5 配置建议与实战经验

在实际项目中,角色配置不是拍脑袋决定的。我总结了几条经验:

  • 供电稳定的设备:开启中继+朋友+代理,最大化网络覆盖
  • 电池供电的设备:只做LPN,必要时做纯节点(不开启任何角色)
  • 网关设备:必须开启代理,建议同时开启中继和朋友
  • 移动设备:不做任何角色,只通过GATT连接代理节点

重要:一个网络里至少要有1个代理节点,否则手机无法接入。至少要有1个朋友节点,否则LPN无法工作。中继节点数量取决于网络规模,一般建议每10个节点至少有3个中继。

嗯,这里要注意。角色配置是在节点入网时通过配置消息完成的。你可以在产品固件里预设角色,也可以后期通过手机App动态调整。我个人建议,在产品设计阶段就固定好角色,减少后期维护成本。

我曾经在一个项目中,把所有节点都设成了中继+朋友,结果电池供电的传感器两天就没电了。后来把传感器改成纯LPN,网关改成中继+朋友+代理,问题才解决。所以,角色配置一定要根据设备的供电能力和功能需求来定。