このプロジェクトについて
AlteriomPainlessMeshは、ESP8266およびESP32デバイス上で自己組織化メッシュネットワークを構築するためのpainlessMeshライブラリのフォークです。中央コントローラやルータを必要としない元のアドホックネットワーキングモデル(32ビットチップIDによるノード識別、JSONベースのメッセージング、ノード間の時刻同期)を維持しつつ、IoT導入を目的とした構造化パッケージを追加しています。
メッシュの基本動作
- 真のアドホックネットワーキング: 1つ以上のノードの任意の集合がメッシュを自己組織化します。サイズは主に接続バッファに使用可能なヒープによって制限されます。
- JSONメッセージング: 可読性が高く、Web/JavaScriptフロントエンドとの統合が容易です。READMEにはパフォーマンスコストがあること、バイナリメッセージングが今後の貢献の可能性として挙げられています。
- ネットワーキングはレイテンシ理由からArduino WiFiライブラリではなく、ネイティブのESP32/ESP8266 SDKライブラリを使用しています。
- IPネットワーキングではありません。メッセージはブロードキャストされるか、特定のnodeIdに送信されます。
- 文書化された注意事項: delay()を避ける(TaskSchedulerを使用)、WiFiイベント購読の競合に注意、メッセージレートは控えめに保つ、高トラフィック下ではメッセージ損失の可能性があることを想定する。
Alteriom拡張機能
このフォークは、IoT統合のためのmqtt-schema(v0.7.2/v0.7.3)に準拠した、シリアライゼーションとJSON変換を備えた型付きパッケージを追加しています:
- 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で決定)、ハートビートベースのブリッジ喪失検出、引き継ぎ後のチャネル追従、分散コンセンサス、および一度に1つの選挙、役割変更間の60秒間の保持、単独候補の最低RSSIによるスプリットブレイン防止。
- マルチブリッジ調整: 優先度レベル(1〜10)、役割(プライマリ/セカンダリ/スタンバイ)、ピアディスカバリ、負荷分散戦略を持つ複数の同時ブリッジ。
- オフラインモード用メッセージキュー: 優先度ベースのキューイング(CRITICAL/HIGH/NORMAL/LOW)と、重要なメッセージを保護するエビクションルール、自動オンライン/オフライン検出、自動フラッシュ。
- 共有ゲートウェイモード: すべてのノードが同じルータに接続し、インターネットへ中継できます。ゲートウェイ選挙、重複排除、配信確認を備えています。
ハードウェア検証
READMEによると、フェイルオーバー、ルーティング、チャネル追従、ステーションスキャンへの2.0の変更は、ESP32、ESP32-C3、ESP32-C5、ESP32-C6、ESP32-S3、ESP8266と実ルータを組み合わせたハードウェアインザループ装置で検証され、リリースゲートは全スイートの3回連続クリーン実行です。
ESP8266の容量に関する注意
READMEは、ESP8266を小規模メッシュまたはリーフノードに適していると説明し、7ノードメッシュの内部ノードとして動作する場合の空きヒープが10〜13KBであると報告しています。また、そのレベルでは8KBのパッケージ1つまたはOTAパーツ1つが割り当てに失敗する可能性があると述べています。ESP8266をmaxconn = 0または1のリーフとして構成することを推奨し、overCapacity()およびapChildren()ヘルパーと定期的な低メモリチェックを提供しています。
インストールと依存関係
Arduino Library Managerでは「Alteriom PainlessMesh」、PlatformIOではsparck75/AlteriomPainlessMesh(READMEにはalteriom/オーナーエントリは1.10.0で止まると記載)、npmでは@alteriom/painlessmeshとして利用できます。依存関係にはArduinoJson、TaskScheduler、AsyncTCP(ESP32)またはESPAsyncTCP(ESP8266)が含まれます。
リポジトリ内の例は、基本的なセンサーノード、自動チャネル検出を備えたインターネットへのブリッジ、ブリッジフェイルオーバー、共有ゲートウェイ、MQTTブリッジ、および構造化パッケージを使用したAlteriomセンサーノードをカバーしています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.