Suite au lancement de la saison 3 du projet Ambassad'Air à Rennes, j'ai décidé de suivre moi aussi la qualité de l'air, en réalisant le capteur proposé par les allemands de Luftdaten. Leur projet vise à favoriser les mesures citoyennes, en préparant un kit facile à assembler et qui produise rapidement de la donnée. Ils mettent à disposition le firmware, ainsi que des serveurs pour stocker, traiter et afficher les données. Une récupération est ensuite possible par API.
C'est donc un projet simple, rapide, une occasion de "faire" et d'observer facilement des résultats avec un peu d'électronique.
Composants
Pour ce montage, on a besoin de :
- NodeMCU ESP8266 : fournit l'intelligence. Ce petit microcontrôleur peut se connecter en Wifi, récupérer des données et afficher des pages web.
- Capteur de particules fines SDS011 : le coeur du système, il mesure par réfraction laser la quantité de PM10 (10µm) et PM2.5 (2,5µm) dans l'air
- Thermomètre/hygromètre/Baromètre BME280 : pour compléter, un capteur multifonctions atmosphérique.
J'ai remplacé le capteur d'humidité analogique proposé par défaut (DHT22) par un capteur plus robuste, communicant en I2C. Sa configuration est déjà proposée en option activable dans le firmware Luftdaten, parmi quelques autres. Avantage : l'unique broche analogique du nodeMCU reste ainsi disponible pour d'autres usages ;-)
Montage
L'assemblage s'est fait simplement avec une plaque d'essai, ce qui a permis de démarrer et d'inscrire le capteur rapidement sur le site internet du projet.
photos à prévoir
La version finale "prête à sortir" aura besoin de câbles Dupont F-F pour relier directement les éléments, ainsi que de la boite (découpage laser) proposée par le LabFab.
le boitier officiel, source Wiki-Rennes
Installation
Pour l'instant, le capteur est posé dans une boite en plastique fermée, sur le balcon. L'alimentation est fournie à l'aide de mon kit solaire. Dès que la boite en bois sera montée, les mesures devraient être plus fiables.
Mesures
Les mesures des capteurs sont consultables selon différentes méthodes, toutes proposées par défaut et fournies par des serveurs du OKLab de Stuttgart.
1. Courbes individuelles
Un site recueille les points 3min pour en faire des courbes 24h, 7j, 1an et "moyenne flottante 24h".
-
Particules (ici les PM10)
-
Atmosphère (ici la température)
2. Carte mondiale
J'ai fait la demande auprès du Hackerspace de Stuttgart, qui gère le projet et les serveurs, et me voilà sur la carte officielle, matricule 17320 :
Rennes se remplit, à vous de suivre ?!
3. API
Pour des besoins d'automatisation, les données qui constituent la carte sont également proposées en API. L'ensemble des capteurs est disponible par cet "endpoint"(attention, 18000+ éléments à charger). Mon capteur spécifique est trouvable à cette adresse.
Le résultat en JSON peut ainsi être utilisé par d'autres applications.
Prochaines étapes
Affichage par "La Boite"
J'aimerais intégrer ces données à un affichage connecté de type "LaBoite", que j'ai répliqué récemment en suivant le projet de LeNuage.io.
Pour point de départ, on utilisera évidemment les données issues de l'API. On peut alors les intégrer en créant une nouvelle "app", à placer sur une tuile. Le seul paramètre à fixer est l'ID du capteur pour Luftdaten.
Suivi de production solaire
Le nodeMCU utilisé peut également servir pour le suivi de ma production solaire (à la manière du Solar LowTech Magazine). En effet, le firmware proposé par Luftdaten permet de prendre les mesures d'autres capteurs (notamment en I2C) et de faire appel à d'autres API (pour pousser les valeurs vers d'autres serveurs). Il y a donc des possibilités à explorer !
J'ai justement des INA219 en stock, ca se configure simplement :)
Parmi les ressources à investiguer pour cette partie, j'ai noté :
- Une API avec Python-Flask :
- https://programminghistorian.org/en/lessons/creating-apis-with-python-and-flask
- https://www.jeremymorgan.com/tutorials/python-tutorials/how-to-rest-api-python/
- Un système de Database léger :
- https://xavierberger.github.io/RPi-Monitor-docs/01_features.html (j'ai déjà une instance RPiMonitor qui tourne)
- autre ?