EnviroMetricsV2 est une solution IoT complète (de bout en bout) conçue pour la surveillance de la qualité de l'air et de l'environnement intérieur. Le système collecte les données de température, d'humidité et de CO2 via un microcontrôleur ESP32-C6, les stocke sur un serveur auto-hébergé et les restitue sur un tableau de bord multiplateforme personnalisable.
- Acquisition de données précise : Mesure de la température et de l'humidité via le capteur AHT10, et du CO2 via le capteur SCD4x.
- Optimisation énergétique : Utilisation du Deep Sleep (réveil toutes les 5 minutes) et du Light Sleep sur l'ESP32-C6 pour minimiser la consommation sur batterie.
- Connexion Wi-Fi optimisée : Sauvegarde du canal et du BSSID en mémoire RTC pour une reconnexion quasi instantanée (moins de 300 ms), complétée par une adresse IP statique.
- Tableau de bord sur mesure : Application multiplateforme en Flutter offrant des graphiques interactifs, la gestion de plusieurs capteurs et le choix de la plage temporelle.
- Accessibilité et affichage E-Ink : Prise en charge du mode sombre classique et d'un mode "Haut Contraste" exclusif (fond blanc, tracés noirs, suppression des ombres et des animations) optimisé pour les liseuses et tablettes E-Ink.
- Rétrocompatibilité et double API : Le proxy Nginx redirige de manière transparente les requêtes de l'application et les anciennes requêtes PHP (
SendDB.php,get_mesures.php,get_appareils.php) vers la nouvelle API performante écrite en Go (ou Python), garantissant le fonctionnement des anciennes versions de l'application et des capteurs existants.
Le système repose sur une pile technologique moderne, modulaire et conteneurisée :
| Composant | Technologie | Rôle |
|---|---|---|
| Microcontrôleur | ESP32-C6 (Arduino/C++/RTOS) | Lecture I2C des capteurs (AHT10, SCD4x) et transmission HTTP des mesures. |
| API Backend (Par défaut) | Go / Fiber | Point d'entrée principal ultra-rapide (port /api/) pour l'enregistrement et la requête des données. |
| API Backend (Alternative) | Python / FastAPI | API de secours ou alternative (port /api-python/). |
| Base de Données | MariaDB | Stockage persistant des appareils et de l'historique des mesures. |
| Serveur Web / Proxy | Nginx | Service du frontend web (Flutter) et routage dynamique vers les API ou les anciens liens PHP. |
| Interface Utilisateur | Flutter / Dart | Application mobile/web dynamique avec gestion des seuils d'alerte et paramètres API. |
Pour garantir une réactivité optimale et supporter un grand nombre de capteurs, le backend a été migré de Python (FastAPI) vers Go (Fiber). Les benchmarks (détails dans 260706_resultTests.txt) montrent des gains significatifs en mode Single-User :
- Liste Appareils : Go est 18.0x plus rapide (2.93 ms vs 52.83 ms)
- Mesures (3h) : Go est 4.7x plus rapide (13.19 ms vs 61.39 ms)
- Mesures (365 jours) : Go est 2.6x plus rapide (33.05 ms vs 84.87 ms) En charge (Multi-User, 50 requêtes simultanées), Go reste jusqu'à 19.9x plus rapide, d'où son utilisation par défaut pour toutes les requêtes de production.
L'ensemble de l'infrastructure backend est conteneurisé et se déploie via Docker Compose.
Prérequis :
- Docker et Docker Compose installés sur votre serveur (ex: Raspberry Pi).
Étapes :
- Cloner le dépôt : Clonez ce projet sur votre serveur hôte.
- Configuration de l'environnement :
Dans le dossier Server, créez un fichier
.enven vous basant sur la configuration actuelle ou l'exemple ci-dessous :DB_ROOT_PASSWORD=VotreMotDePasseRoot DB_NAME=EnviroMetrics DB_USER=admin DB_PASSWORD=VotreMotDePasseUser PORT_PHPMYADMIN=1889 PATH_BDD=./BDD
- Compiler le Web : Placez la compilation web de votre application Flutter (
flutter build web) dans le dossierServer/frontend_web/. - Lancer les conteneurs :
Depuis le dossier
Server, exécutez la commande suivante :cd Server docker-compose up -d --build - Le serveur Nginx exposera le frontend sur le port
8080de votre réseau local, tout en gérant le routage/api/(Go) et/api-python/(Python) en arrière-plan. L'interface PhpMyAdmin sera disponible sur le port configuré dans le.env(1889par défaut).
Le dossier Hardware contient la conception électronique du projet :
- Schéma électronique et routage du circuit imprimé (PCB) sous KiCad (dossier EnvirometricsV2).
- Le circuit intègre l'ESP32-C6, le capteur de CO2 (SCD4x), le capteur de température/humidité (AHT10) ainsi que la gestion de l'alimentation par batterie avec retour de charge (
vbat).
Le code C++ pour l'ESP32 se trouve dans le fichier ESP-C6.ino.
- Câblage : Connectez l'AHT10 et le SCD4x au bus I2C de l'ESP32-C6.
- Paramétrage Réseau : Modifiez les variables
ssidetpasswordpour correspondre à votre réseau Wi-Fi. - Paramétrage IP : Ajustez
staticIPetgatewayselon votre routeur local pour éviter les latences DHCP lors du réveil. - Serveur API : Modifiez la variable
serverpour pointer vers l'adresse IP de votre serveur auto-hébergé. - Flashez le code avec l'IDE Arduino ou VS Code + PlatformIO.
L'application EnviroMetrics permet de visualiser et d'adapter l'affichage des données environnementales en temps réel.
- Configuration Initiale : Rendez-vous dans les "Paramètres" (via le menu latéral) pour définir l'URL de votre API locale (ex:
http://<IP_SERVEUR>:8080/api). - Limites des graphiques : Ajustez manuellement les échelles Y pour la température (Min-Max), l'humidité et le CO2 afin de les adapter à chaque pièce.
- Taux d'actualisation : Le polling de l'application est paramétrable de 30 à 600 secondes.
Ancien projet (V1)
Ce projet EnviroMetrics V2 n'est pas parti d'une page blanche : il s'agit d'une refonte complète et d'une amélioration majeure d'une première version (V1).
Le passage de cette ancienne version vers EnviroMetrics V2 marque l'évolution d'une architecture basique vers un véritable système IoT moderne et modulaire.
Là où l'ancienne mouture reposait sur des scripts PHP monolithiques (SendDB.php, graphiques.php) qui mélangeaient requêtes SQL directes et affichage web statique, la V2 sépare proprement la logique avec des API performantes (Go/Fiber par défaut, ou Python/FastAPI sous Docker) et une interface riche et multiplateforme (Flutter).
Du côté matériel, l'optimisation énergétique a fait un bond en avant grâce à l'utilisation d'un véritable Deep Sleep couplé à la sauvegarde des données Wi-Fi, réduisant ainsi drastiquement la consommation de la batterie.