Description d'une station météo polyvalente. Caractéristiques : - Réalisée autour d'un module TTGO T3 LoRa 433 MHz - Capteurs de température, pression, humidité, pluviométrie, vitesse et direction du vent. - Protocoles APRS via LoRa, APRS-IS, MQTT et Wunderground via Internet par Wifi. - Wifi par DHCP ou statique. - Afficheur OLED avec ou sans économiseur. - Mises à jour du logiciel par OTA sécurisé par mot de passe. - Serveur Web autonome avec les principales données. - Repli LoRa en cas de panne WiFi ou Internet. - etc... |
Généralités :
La station météo décrite ici utilise un module TTGO v3 1.6.2 et différents capteurs. Elle affiche les données sur un écran OLED et les transmet au choix sous différents protocoles à destination des serveurs APRS, APRS-IS, Wunderground ou sur un broker MQTT.
En APRS, la transmission s'effectue sur 433,775 MHz et avec le protocole LoRa.
Les balises APRS captées par les passerelles iGate sont alors transmises aux serveurs APRS.
En APRS-IS, MQTT et Wunderground, les données sont transmises par une connexion WiFi. La connexion peut se faire par DHCP ou en adresse statique.
Un capteur BME280 mesure la température, l'humidité et la pression barométrique. Un SHT31 peut également être utilisé, mais alors sans mesure de la pression.
Un anémomètre et une girouette utilisant le protocole ModBus RS485 recueillent les valeurs de vent .
Un pluviomètre à godets (de la marque MISOL ou autre) mesure les précipitations.
Le logiciel est actuellement utilisé par des stations en France, Italie, Tchéquie, Allemagne, Chili, Suède, Belgique.
Logiciel :
Le logiciel a été écrit pour la plateforme de développement PlatformIO.
Le logiciel peut cependant également être compilé à l'aide de l'IDE Arduino.
Lors de mes essais avec des capteurs envoyant des impulsions, il s'est avéré que la gestion des interruptions sur l'ESP32 est défaillante et comporte un sérieux bug. Alors qu'on ne veut compter que les fronts montants par exemple, le compteur comptabilise les fronts montants ET descendants.
J'ai donc cherché une autre solution et je me suis intéressé aux capteurs de vent au format RS485 qui sont au même prix que ceux à impulsions ou tension. J'ai donc choisi cette solution.
Pour le moment, le pluviomètre utilise encore les interruptions de l'ESP32 et la mesure peut donc présenter une certaine erreur. Je vais étudier une autre méthode de comptage.
Les bibliothèques utilisées sont classiques, hormis celle gérant les capteurs de vent sous le protocole ModBus en RS485 qui a été écrite par mes soins pour les modèles de capteurs de vent utilisés ici.
Principe de fonctionnement :
Le cœur de la station est un module TTGO T3 qui comporte :
- un microcontrôleur ESP32
- un écran OLED de 0,96 pouces
- un émetteur/récepteur LoRa sur 433 MHz
- une interface WiFi
- une interface Bluetooth (non utilisé dans ce projet)
Le logiciel permet de configurer au choix un ou plusieurs capteurs, à savoir :
- BME280 ou SHT31 pour la température, l'humidité et la pression atmosphérique (BME280 uniquement).
- pluviomètre à godets
- girouette et anémomètre au format ModBus et interface RS485.
Il permet également de transmettre au choix à intervalles réguliers les données recueillies à une ou plusieurs destinations et modes :
- le réseau APRS par transmission en mode LoRa en UHF, avec ou sans digipeating.
- le réseau APRS-IS via un accès WiFi
- un serveur MQTT via WiFi
- le réseau de stations météo Wunderground via Internet WiFi
Un fichier de configuration "settings_sample.h" est lu au démarrage, et regroupe toutes les informations de configuration et choix ci-dessus.
Les données de pluie et vent sont mesurées toutes les secondes afin d'en faire des moyennes glissantes sur 2min, 10min, et sur 1h suivant le capteur.
Les données de température, humidité et pression sont lues juste avant la transmission. Les données sont transmises par défaut toutes les 2 min. (TXPERIOD)
La page Web est rafraichie toutes les 10s.
La direction de la girouette est affichée sur une moyenne glissante afin d'éviter les trop nombreux changements de direction dus à l'instabilité du vent.
Matériels :
- module TTGO T3
- interface RS485
- module 5V
- capteur BME280
- SHT31
- girouette et anémomètre RS485
- pluviomètre à godet
- une alimentation 12 Volts
Les différents modules s'interconnectent comme suit sur le module TTGO :
- BME280 ou SHT31 sur le port i2c : SDA pin IO21, SCL pin IO22
- Interface RS485 : RxD IO34, Txd IO04
- Pluviomètre IO14
- Switch de paramétrage des adresses ModBus sur la pin IO25
(voir le schéma d'interconnexion)
J'ai reçu différents câbles de connexion pour les modules RS485. Les couleurs différent légèrement par rapport à celles du schéma d'interconnexion.
Le fil A+ est parfois de couleur JAUNE et non VERT.
Le bus RS485 se connecte sur la platine interface RS485 sur les plots A, B et Masse.
La girouette et l'anémomètre doivent être alimentés avec une tension de 10 à 30V. 12V fonctionne parfaitement dans mon cas.
Si la distance entre l'Arduino et le capteur dépasse quelques mètres, il faut alors connecter une résistance de terminaison de 120 Ohm à l'extrémité du bus côté capteurs.
Construction:
L'ensemble est monté en haut d'un tube à placer à un endroit dégagé, qui ne sera jamais à l'ombre et sans obstacles pouvant faire dévier, ralentir ou accélérer le vent.
J'ai câblé les différents modules sur une plaquette pour prototype à trous. Les modules sont enfichés dans des supports de manière à pourvoir être remplacés relativement facilement.
Ma première tentative s'est soldée par un échec, la station a tenu une semaine avant d'être totalement oxydée.
Il faut dire que la météo a été particulièrement mauvaise pendant cette semaine avec plusieurs jours de vent fort par moment > 120 km/h et une pluie battante qui parfois tombait à l'horizontale, le tout à 780m d'altitude.)!
Le premier boîtier n'était pas suffisamment étanche, il faut au minimum une protection IP67.
J'ai également protégé tous les modules et connexions par une application de vernis.
Les passages de fils se font avec des presse-étoupe.
Le capteur BME280 vieillit en général très mal en extérieur. (expérience sur mes ruches connectées).
12/12/2023 - Nouvel essai avec la sonde enfermée dans un tube de cachets dans lequel j'ai fait des ouvertures pour laisser circuler l'air et une protection à l'aide d'un morceau de tampon grattant vaisselle. 😁 L'air passe bien au travers et il devrait résister aux intempéries, ne pas trop retenir d'humidité et filtrer les insectes et la poussière.
Le schéma et les photos ci-dessous donnent une idée du montage.
Jérôme F4FEB a dessiné et réalisé un support pour les capteurs de vent et un tube support d'un diamètre de 40mm à l'aide d'une imprimante 3D.
Je vous livre ici le fruit de son travail en téléchargement.
Je n'ai personnellement pas d'imprimante 3D et n'ai donc pu tester ce support.
Logiciel :
Le logiciel a été écrit sous Visual Studio Code (VSC) et PlatformIO qui est devenu mon éditeur/compilateur préféré.
Les bibliothèques nécessaires sont :
- Wire, WiFi
- Adafruit GFX, SSD1306, Sensor et BME280
- Rob Tillart pour le SHT31
- LoRa par Sandeep Mistry
- PubSubClient pour MQTT par Nick O'Leary
- ElegantOTA
- AsyncTCP et SyncWeberver
- wind_rs485 par moi-même
Seul le fichier de configuration "settings_sample.h" est à modifier à convenance.
On peut renommer ce fichier au besoin (settings_qra.h, settings_punta.h, etc) et modifier la ligne #include settings_sample.h du programme principal. Cela permet de gérer plusieurs stations au besoin.
La première fois, il faut compiler puis transférer le logiciel par le port série sur lequel le module est branché.
Pour les fois suivantes, la mise à jour peut se faire par WiFi à l'aide d'OTA (On The Air).
Il faut alors au démarrage noter l'adresse IP attribuée au module sur l'écran OLED ou transmise sur le port série, et ensuite ouvrir une page avec un navigateur à cette adresse : xx.xx.xx.xx/update.
Il faut alors transférer le fichier : /.pio/build/tgo-lora32-v21/firmware.bin
Les logiciels et toutes les documentations seront disponibles sur mon Github, ou sur demande.
Configuration :
Le fichier de configuration settings_sample.h est suffisamment commenté pour comprendre à quoi servent tous les paramètres.
En cas de problème, ou pour comprendre le fonctionnement du logiciel, on peut utiliser différents niveaux de débogage par affichage sur le port série en décommentant une ou plusieurs options au début du fichier : #define DEBUG_WIND par exemple.
Par défaut, le port série est configuré pour un débit de 115200 Bauds.
Le réseau Wunderground nécessite la création d'un compte (gratuit).
L'utilisation des passerelles APRS IS (Internet Service) nécessite un mot de passe disponible en ligne et fonction de l'indicatif utilisé ; https://apps.magicbug.co.uk/passcode/
L'upload sur un serveur MQTT nécessite de créer des topics. Des exemples sont donnés dans le fichier settings_sample.h
Il est déconseillé de valider l'APRS et l'APRS-IS simultanément, les serveurs APRS risquent de ne pas apprécier !
Les capteurs de vent RS485 sont tous livrés avec la même adresse par défaut : 0x01.
Sur le bus ModBus, chaque capteur doit cependant avoir sa propre adresse. Par défaut, le fichier settings_sample.h attribue l'adresse 0x01 à l'anémomètre (AddressSpeedSensor) et 0x02 à la girouette (AddressDirSensor).
Il est donc nécessaire de changer l'adresse de la girouette à l'adresse 0x02. Cette valeur est définie par le paramètre NewSensorAddress dans le fichier de configuration.
On peut le faire avec le logiciel de configuration fourni par le constructeur, via une interface RS485 sur un port série de l'ordinateur ou utiliser mon logiciel de la station météo.
Il faut alors ne relier QUE la girouette sur le bus et connecter la pin IO25 du module au 3V3. La LED verte devrait s'allumer.
Appuyer alors sur le bouton RESET pour rebooter. Si tout se passe bien, l'adresse devrait avoir été changée et confirmée sur l'écran OLED.
Couper l'alimentation de la girouette et enlever la connexion du 3V3 à la pin IO25. Relier les 2 capteurs et rebooter.
Utilisation :
Une fois configuré, le fonctionnement du logiciel ne nécessite pas de commentaire particulier.
Une fois démarré, il est autonome et après une mesure de tous les capteurs, il effectue une transmission immédiatement au démarrage.
Les transmissions suivantes auront lieu cycliquement après le délai du paramètre TXPERIOD. (120s par défaut)
Au démarrage, les premiers écrans affichent les modes ainsi que l'adresse IP utilisés.
S'il y a un défaut de communication avec les capteurs de vent, un petit logo s'affiche en haut à droite sur l'OLED.
L'écran OLED affiche la plupart des informations, et en temps réel.
Les informations sont disponibles sur le port USB à la vitesse de 115200 Bauds, en fonction du niveau de débogage choisi dans le fichier de configuration.
Si l'économiseur d'écran n'est pas actif, l'afficheur restera allumé en permanence.
S'il est activé avec le paramètre ECOMODE = 1, il s'allumera complètement après l'envoi de la 2ème balise, ce qui permet de vérifier auparavant à l'écran le bon fonctionnement de l'ensemble.
Si ECOMODE=2, il s'éteindra comme ci-dessus et s'allumera brièvement pendant 5s avant l'envoi des données.
Une page Web est disponible à l'adresse IP du module : http://xx.xx.xx.xx
Elle affiche toutes les mesures, quelques paramétrages et l'uptime. (durée de fonctionnement depuis le dernier boot)
La mise à jour du logiciel est possible via OTA à l'adresse http://xx.xx.xx.xx/update.
Comme pour toute installation radio et pour obtenir un bon rendement, il faut soigner l'antenne.
La petite antenne "boudin" livrée avec les modules TTGO possède un mauvais rendement et DOIT être remplacée si on veut obtenir une meilleure portée!
La station météo de test est actuellement en service depuis le 23/11/23 sur le site de la Punta avec l'indicatif TK5KP-13.
Les données publiques sont visibles sur aprs.fi et Wunderground.
Retour d'expérience :
12/12/2023 : La sonde BME280 ne répondait plus. Totalement oxydée.
Nouvel essai avec la sonde enfermée dans un tube de cachets dans lequel j'ai fait des ouvertures pour laisser circuler l'air et une protection à l'aide d'un morceau de tampon grattant vaisselle. 😁 L'air passe bien au travers et il devrait résister aux intempéries, ne pas trop retenir d'humidité et filtrer les insectes et la poussière.
12/03/2024 : Remplacement de l'anémomètre qui ne répondait plus depuis quelques semaines. Au démontage, je constate qu'il y a beaucoup d'eau dans le capteur !
Le nouvel anémomètre tournait nettement moins facilement que l'ancien, probablement un problème de qualité de ces capteurs.
J'ai donc interchangé la partie supérieure des 2 capteurs et ai protégé la jonction entre les 2 parties du boîtier à l'aide de ruban adhésif.
Bien serrer les 3 vis d'assemblage du boîtier. Les miennes étaient mal serrées, ce qui peut expliquer le problème d'étanchéité. A moins que l'eau ne rentre par l'axe de l'anémomètre ?
Liens :
Le protocole APRS
Lien vers un article très intéressant traitant des pluviomètres.