Article en cours de rédaction

wx station screen1 Description d'une mini station météo.
Caractéristiques :
- Basé 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.
- Afficheur OLED avec ou sans économiseur.
- Mises à jour possibles par OTA sécurisé par mot de passe.
- Serveur Web en SSE avec les principales données.

 

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 utilisent 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 et le framework Arduino.
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 communes, 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 juste avant de transmettre les données, par défaut toutes les 2 min. (TXPERIOD) 

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

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.

   

Logiciel :

Le logiciel a été écrit sous Visual Studio Code (VSC) et la 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 au démarrage noter l'adresse IP attribuée au module sur l'écran OLED ou affiché 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 logiciesl et toutes les documentations seront disponibles sur mon Github dés que le logiciel sera mâture, ou sur demande pour expérimentations.

 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 le 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 fonctionnent 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 affichent 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)

 wx-station-aprs-screen.png wx station web screen   wx station screen2

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 !

Liens :

Le protocole APRS