À propos du projet
AlteriomPainlessMesh est un fork de la bibliothèque painlessMesh destiné à la construction de réseaux maillés auto-organisés sur les appareils ESP8266 et ESP32. Il conserve le modèle ad hoc d'origine — aucun contrôleur central ni routeur requis, nœuds identifiés par des identifiants 32 bits, messagerie JSON, synchronisation temporelle entre les nœuds — et y superpose des paquets structurés visant les déploiements IoT.
Comportement de maillage de base
- Véritable réseau ad hoc : tout ensemble d'un ou plusieurs nœuds s'auto-organise en maillage ; la taille est limitée principalement par le tas disponible pour les tampons de connexion.
- Messagerie JSON pour la lisibilité et l'intégration facile avec les interfaces web/JavaScript ; le README note un certain coût en performance et indique qu'une messagerie binaire serait une contribution possible.
- Le réseau utilise les bibliothèques SDK natives ESP32/ESP8266 plutôt que les bibliothèques Arduino WiFi, pour des raisons de latence.
- Ce n'est pas un réseau IP : les messages sont diffusés ou envoyés à un nodeId spécifique.
- Limitations documentées : éviter delay() (utiliser TaskScheduler), se méfier des conflits d'abonnement aux événements WiFi, maintenir des taux de messages prudents, et s'attendre à une perte de messages possible en cas de trafic élevé.
Extensions Alteriom
Le fork ajoute des paquets typés avec sérialisation et conversion JSON, alignés sur un mqtt-schema (v0.7.2/v0.7.3) pour l'intégration IoT :
- SensorPackage (200) : température, humidité, pression, batterie, identifiant du capteur, horodatage.
- StatusPackage (202) : indicateurs d'état, durée de fonctionnement, mémoire libre, puissance WiFi, version du firmware.
- CommandPackage (400) : commandes ciblées avec paramètres JSON et identifiants uniques.
- MetricsPackage (204) : CPU, santé mémoire, débit réseau, statistiques de paquets, latence, RSSI.
- HealthCheckPackage (605) : score de santé, indicateurs de problèmes, analyse de tendance des fuites mémoire, maintenance prédictive, suivi des plantages/redémarrages.
- MeshNodeListPackage (600), MeshTopologyPackage (601), MeshAlertPackage (602), MeshBridgePackage (603), EnhancedStatusPackage (604) : inventaire des nœuds, graphe de topologie avec qualité de lien, alertes, pontage de protocole et statistiques détaillées du maillage.
- Paquets de bascule de pont (610-614) : état du pont, élection, prise de contrôle, coordination et synchronisation temporelle NTP.
Fonctionnalités opérationnelles
- Distribution OTA diffusée : le README revendique environ 98 % de réduction du trafic réseau pour les maillages de 50+ nœuds et des mises à jour parallèles passant à l'échelle pour 100+ nœuds, activées par un seul paramètre.
- Pont de statut MQTT : publie le statut/la topologie du maillage pour des piles de surveillance telles que Grafana, InfluxDB et Prometheus, avec des intervalles configurables.
- Bascule automatique de pont : élection basée sur le RSSI (les égalités sont départagées par la durée de fonctionnement, la mémoire libre, l'identifiant du nœud), détection d'un pont perdu par pulsation, suivi de canal après prise de contrôle, consensus distribué et prévention du split-brain via une seule élection à la fois, un délai de 60 s entre les changements de rôle et un RSSI minimum pour un candidat isolé.
- Coordination multi-ponts : plusieurs ponts simultanés avec niveaux de priorité (1-10), rôles (primaire/secondaire/veille), découverte des pairs et stratégies de répartition de charge.
- File d'attente de messages pour mode hors ligne : file d'attente basée sur la priorité (CRITIQUE/HAUTE/NORMALE/BASSE) avec règles d'éviction protégeant les messages critiques, détection automatique en ligne/hors ligne et vidage automatique.
- Mode passerelle partagée : tous les nœuds se connectent au même routeur et peuvent relayer vers Internet, avec élection de passerelle, déduplication et confirmation de livraison.
Validation matérielle
Le README indique que les modifications 2.0 concernant la bascule, le routage, le suivi de canal et l'analyse des stations ont été validées sur un banc d'essai matériel en boucle combinant ESP32, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-S3 et ESP8266 avec un vrai routeur, avec un seuil de sortie de trois exécutions consécutives sans erreur de la suite complète.
Note sur la capacité de l'ESP8266
Le README décrit l'ESP8266 comme adapté aux petits maillages ou comme nœud feuille, rapportant 10 à 13 Ko de tas libre lorsqu'il agit comme nœud intérieur dans un maillage de sept nœuds, et note qu'un seul paquet de 8 Ko ou une partie OTA peut échouer à être alloué à ce niveau. Il suggère de configurer l'ESP8266 comme feuille avec maxconn = 0 ou 1, et fournit des helpers overCapacity() et apChildren() ainsi qu'une vérification périodique de faible mémoire.
Installation et dépendances
Disponible via le gestionnaire de bibliothèques Arduino sous le nom « Alteriom PainlessMesh », via PlatformIO sous sparck75/AlteriomPainlessMesh (le README note qu'une entrée propriétaire alteriom/ s'arrête à 1.10.0), et sur npm sous @alteriom/painlessmesh. Les dépendances incluent ArduinoJson, TaskScheduler et AsyncTCP (ESP32) ou ESPAsyncTCP (ESP8266).
Les exemples du dépôt couvrent un nœud capteur de base, un pont vers Internet avec détection automatique de canal, la bascule de pont, la passerelle partagée, le pont MQTT et un nœud capteur Alteriom utilisant les paquets structurés.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.