这个项目能做什么

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 传感器节点。