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节点的职责:

  1. 与LPN建立“友谊”关系,协商好缓存大小和轮询间隔。
  2. 持续监听网络,接收所有发往LPN的消息。
  3. 将消息存储在缓存中,等待LPN来取。
  4. 如果缓存满了,就丢弃最旧的消息。

说白了,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网络的“寻址”机制,也就是消息怎么找到目标设备。到时候见。