4、节点角色与功能:中继节点、代理节点、朋友节点、低功耗节点
蓝牙Mesh网络里,节点不是千篇一律的。每个设备根据自己的硬件能力和应用场景,扮演不同的角色。说白了,就是「能者多劳,弱者躺平」。我刚开始接触Mesh时,以为所有节点都一样,结果在项目里吃了不少亏。今天咱们就把这四个角色掰开揉碎了讲清楚。
4.1 四种节点角色概览
蓝牙Mesh定义了四种节点功能:中继(Relay)、代理(Proxy)、朋友(Friend)和低功耗(LPN)。一个物理设备可以同时支持多个角色,但通常我们只按需开启。
核心原则:中继和代理负责网络通信的「广度」,朋友和低功耗负责「深度」——解决电池供电设备的功耗问题。
4.2 中继节点(Relay)
中继节点是Mesh网络的「传声筒」。它收到一条消息后,会按照TTL(生存时间)规则重新广播出去。没有中继,Mesh网络就只是一堆孤立的点对点连接。
工作原理:
- 监听所有广播信道上的消息
- 检查消息是否已经处理过(去重)
- 如果TTL > 1,将TTL减1后重新广播
- 如果TTL = 1,不再转发
我的经验:中继节点最耗电。我在一个智能照明项目里,所有灯都开启了中继功能,结果电池供电的传感器节点两周就没电了。后来我只让市电供电的设备做中继,电池设备只做LPN,问题才解决。
配置要点:
// 配置中继功能的几个关键参数
relay_retransmit_count = 2; // 重发次数,默认2次
relay_retransmit_interval = 20; // 重发间隔,单位毫秒
relay_enable = true; // 开启中继
重发次数不是越多越好。我见过有人设成7次,结果网络里全是重复包,丢包率反而上升了。一般2-3次就够。
4.3 代理节点(Proxy)
代理节点是Mesh网络和传统蓝牙设备之间的「翻译官」。你想想看,手机没有Mesh协议栈,怎么控制Mesh灯?靠的就是代理节点。
代理节点通过GATT(通用属性协议)与手机通信,然后把数据转换成Mesh的ADV(广播)包发出去。反过来也一样。
| 特性 | 说明 |
|---|---|
| 协议转换 | GATT ↔ Mesh ADV |
| 典型场景 | 手机App配网、调试、控制 |
| 硬件要求 | 支持GATT Server + Mesh协议栈 |
| 功耗 | 较高(需保持GATT连接) |
注意:代理节点必须同时开启GATT和Mesh广播功能。有些低端蓝牙芯片不支持并发操作,选型时要特别留意。
我曾经在一个项目中,用手机连不上Mesh网络,折腾了两天。最后发现是代理节点的MTU(最大传输单元)设得太小,手机发过来的配网数据包被截断了。把MTU从23改成247就好了。
4.4 朋友节点(Friend)与低功耗节点(LPN)
这两个角色是成对出现的,缺一不可。它们解决的是同一个问题:电池设备怎么省电?
LPN(低功耗节点):平时大部分时间在睡觉,只有需要时才醒来收发消息。
朋友节点:替LPN守着消息,等LPN醒来时一次性交给它。
嗯,这里要注意:朋友节点必须是一直在线、供电稳定的设备。你不能让一个电池设备去当别人的朋友,那叫「泥菩萨过河」。
4.4.1 朋友关系建立流程
- 请求:LPN广播Friend Request消息
- 响应:周围的朋友节点回复Friend Offer
- 选择:LPN根据RSSI(信号强度)和Friend Queue Size选择一个朋友
- 建立:双方交换Friend Poll和Friend Update确认关系
- 维持:LPN定期发送Friend Poll拉取缓存消息
关键参数:
- Receive Delay:LPN醒来后等待多久才开始收消息,一般10-100ms
- Poll Timeout:LPN最长多久不联系朋友,朋友就认为关系断了,默认1-60秒
- Friend Queue Size:朋友节点最多缓存多少条消息,通常1-10条
4.4.2 配置示例
// LPN配置
lpn_receive_delay_ms = 50; // 接收延迟50ms
lpn_poll_timeout_ms = 5000; // 5秒轮询一次
lpn_friend_queue_size = 3; // 朋友缓存3条消息
// 朋友节点配置
friend_receive_window = 100; // 接收窗口100ms
friend_queue_size = 5; // 缓存5条消息
friend_max_lpn = 2; // 最多支持2个LPN
我建议Poll Timeout不要设得太长。曾经有个客户把LPN的轮询间隔设成30秒,结果朋友节点以为它死了,把缓存清掉了。灯控指令丢了,用户投诉说「灯不听使唤」。
4.5 角色组合与选型建议
实际项目中,一个设备可以同时开启多个角色。比如一个智能插座,它既是中继(帮邻居转发),又是朋友(帮传感器缓存消息),还能当代理(让手机控制)。
| 设备类型 | 推荐角色 | 原因 |
|---|---|---|
| 市电供电(灯、插座) | 中继 + 朋友 + 代理 | 供电稳定,功能全开 |
| 电池供电(传感器) | LPN | 省电优先 |
| 手机/平板 | 代理(仅GATT) | 通过代理节点接入 |
| 网关 | 中继 + 代理 + 朋友 | 全功能,网络核心 |
避坑指南:我曾经在一个项目里,把所有设备都设成了中继+朋友,结果网络里全是管理消息,数据吞吐量反而下降了。后来我遵循「20%设备做朋友,30%设备做中继,其余只做普通节点」的经验法则,网络才稳定下来。
4.6 小结
四种角色各有分工:中继负责消息扩散,代理负责协议桥接,朋友和LPN负责省电。选型时记住一句话:能者多劳,弱者躺平。市电设备多干活,电池设备多睡觉,网络才能既稳定又省电。