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 anémomètre et une girouette recueille les valeurs de vent en utilisant le protocole ModBus RS485.
Un pluviomètre à godets de la marque MISOL (ou autre) mesure les précipitations.
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 pour la température, l'humidité et la pression atmosphérique. (Utilisation obligatoire)
- 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
- le réseau APRS-IS via un accès WiFi
- un serveur MQTT en WiFi
- le réseau de stations météo Wunderground via Internet WiFi
Un fichier de configuration "settings.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 toutes les 10s pour mis à jour de la page Web. Les données sont transmises par défaut toutes les 2 min. (TXPERIOD)
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
- 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 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 les schéma d'interconnexion)
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 IP65.
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.
Il me reste à trouver une meilleure protection du capteur BME280 qui vieillit très mal en extérieur. (expérience sur mes ruches connectées)
Le schéma et les photos ci-dessous donnent une idée du montage.
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
- 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.h" est à modifier à convenance.
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.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.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.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)
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'éteindra 3s 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 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)
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 un bon rendement !
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.
Liens :