这个项目能做什么
AlteriomPainlessMesh 是 painlessMesh 库的一个分支,用于在 ESP8266 和 ESP32 设备上构建自组织网状网络。它保留了原有的自组网模型——无需中央控制器或路由器,节点通过 32 位芯片 ID 识别,基于 JSON 的消息传递,节点间时间同步——并在此基础上增加了面向 IoT 部署的结构化数据包。
核心网状网络行为
- 真正的自组网:任意一个或多个节点集合都能自组织成网状网络;规模主要受限于可用于连接缓冲区的堆内存。
- JSON 消息具有良好的可读性,便于与 Web/JavaScript 前端集成;README 提到这会带来一些性能开销,并指出二进制消息传递可能是一个可贡献的方向。
- 网络层使用 ESP32/ESP8266 原生 SDK 库而非 Arduino WiFi 库,以降低延迟。
- 非 IP 网络:消息要么广播,要么发送到特定 nodeId。
- 文档中列出的注意事项:避免使用 delay()(改用 TaskScheduler),小心 WiFi 事件订阅冲突,保持合理的消息速率,并预期高流量下可能出现消息丢失。
Alteriom 扩展
该分支增加了带序列化和 JSON 转换的类型化数据包,并与 mqtt-schema(v0.7.2/v0.7.3)对齐,用于 IoT 集成:
- SensorPackage (200):温度、湿度、气压、电池电量、传感器 ID、时间戳。
- StatusPackage (202):状态标志、运行时间、空闲内存、WiFi 信号强度、固件版本。
- CommandPackage (400):带 JSON 参数和唯一 ID 的定向命令。
- MetricsPackage (204):CPU、内存健康、网络吞吐量、数据包统计、延迟、RSSI。
- HealthCheckPackage (605):健康评分、问题标志、内存泄漏趋势分析、预测性维护、崩溃/重启跟踪。
- MeshNodeListPackage (600)、MeshTopologyPackage (601)、MeshAlertPackage (602)、MeshBridgePackage (603)、EnhancedStatusPackage (604):节点清单、带链路质量的拓扑图、警报、协议桥接、详细网状网络统计。
- 桥接故障转移数据包 (610-614):桥接状态、选举、接管、协调、NTP 时间同步。
运维特性
- 广播 OTA 分发:README 声称对于 50 个以上节点的网状网络,网络流量可减少约 98%,并行更新可扩展到 100 个以上节点,且只需一个参数即可启用。
- MQTT 状态桥接:发布网状网络状态/拓扑,供 Grafana、InfluxDB、Prometheus 等监控栈使用,可配置发布间隔。
- 自动桥接故障转移:基于 RSSI 的选举(平局时依次比较运行时间、空闲内存、节点 ID)、基于心跳的桥接丢失检测、接管后信道跟随、分布式共识;通过每次仅进行一次选举、角色变更之间保持 60 秒间隔、以及孤立候选节点需满足最小 RSSI 来防止脑裂。
- 多桥协调:支持多个同时存在的桥接,具有优先级(1-10)、角色(主/备/待命)、对等发现和负载均衡策略。
- 离线模式消息队列:基于优先级的排队(CRITICAL/HIGH/NORMAL/LOW),带有保护关键消息的驱逐规则,自动在线/离线检测和自动刷新。
- 共享网关模式:所有节点连接同一路由器,可中继到互联网,支持网关选举、去重和投递确认。
硬件验证
README 指出,2.0 版本中对故障转移、路由、信道跟随和站点扫描的更改已在硬件在环测试台上验证,该测试台结合了 ESP32、ESP32-C3、ESP32-C5、ESP32-C6、ESP32-S3 和 ESP8266,并使用真实路由器,发布门禁为完整测试套件连续三次干净通过。
ESP8266 容量说明
README 将 ESP8266 描述为适合小型网状网络或作为叶节点,并报告其在七节点网状网络中作为内部节点时有 10-13 KB 空闲堆;同时指出在该内存水平下,单个 8 KB 数据包或一个 OTA 分片可能分配失败。建议将 ESP8266 配置为叶节点,maxconn = 0 或 1,并提供了 overCapacity() 和 apChildren() 辅助函数以及周期性低内存检查。
安装与依赖
可通过 Arduino 库管理器搜索“Alteriom PainlessMesh”安装,通过 PlatformIO 使用 sparck75/AlteriomPainlessMesh(README 指出 alteriom/ 所有者条目止步于 1.10.0),也可通过 npm 获取 @alteriom/painlessmesh。依赖项包括 ArduinoJson、TaskScheduler,以及 AsyncTCP(ESP32)或 ESPAsyncTCP(ESP8266)。
仓库中的示例涵盖基本传感器节点、带自动信道检测的桥接到互联网、桥接故障转移、共享网关、MQTT 桥接,以及使用结构化数据包的 Alteriom 传感器节点。
评论
0 评分人数达到10人后显示
登录后参与讨论。