一、Mesh技术文档
PainlessMesh创建了一个自组织和修复网络,所有节点都连接在一起。网格中的所有节点都相等。网络使用星形拓扑,避免任何圆形路径。不同节点之间的消息以JSON格式发送,使其易于理解和生成。可以在此处找到有关用于各种消息的JSON模式的信息。
功能列表
- 基于JSON的消息。它们可以直接用于javascript代码。
- 相当容易的设置。
- 适用于Arduino环境。
- 实现为第3层协议。无连接,无需确认。
- 完全异步。无需轮询新消息。
- 准确的时间同步。所有节点共享相同的时钟,精度优于10 ms。
- 所有节点立即知道完整的拓扑。每3秒更新一次。
- 网格自动配置。任何节点都可以随时断开连接。任何新节点都会自动集成。
- 所有节点持续监视其直接连接的对等体,以检查它们是否处于活动状
- 单个寻址和广播消息是可能的。
- 主动避免网络循环。
网络布局
每个节点充当接入点(AP),供其他节点连接,并作为客户端连接到另一个节点的一个AP。ESP8266的每个AP限制为4个站点节点,ESP32限制为10个站点节点。
尚未或已经连接到AP的每个节点会周期性地从其他节点扫描AP信号。它将连接到具有最强信号的AP,该信号尚未出现在连接或子连接列表中,即该节点尚未知道。通过仅连接到未知AP,网格避免了网络环路的创建,使得网格中的每对节点之间存在单个路由。
箭头的方向表示连接的方向。
节点同步
存储节点的连接列表,并且还存储每个AP连接的子连接列表。(注意:连接列表包含节点接收的连接和节点发起的连接(最大1)。)。每个节点都知道整个网络完整的网络拓扑。
每个节点的子连接列表由请求/响应消息获得。该请求包含请求节点的子连接,响应包含响应节点的子连接。返回的子连接集合始终排除请求连接及其子连接。有关更多信息,请参阅协议信息
完成新节点同步的情况
请求定期进行子连接
当检测到网络中的任何更新时,即节点的任何子连接已经改变
当新节点连接到新AP时
路由消息
星型网络拓扑没有任何循环。路由变得非常容易。每个节点对都有一条路由。
单个消息
对于单个消息,指定了目标和源节点。首先查找使用的连接。直接连接,或者与目标节点具有子连接的连接。消息将发送到该节点。当该节点不是目标节点时,确切的消息将被中继到下一个连接,该连接以相同的方式查找。这将重复,直到消息到达目标节点。
消息未得到确认。这应该在应用程序级别实现。
广播消息
对于广播消息,将迭代所有连接,并将消息发送到每个连接。在接收到广播消息时,除了接收消息的连接之外,消息被中继到接收节点的所有连接。