Le projet de station météo connecté avance et voici donc une seconde partie où je vais m'intéresser à la récupération des prévisions météorologiques. Celles-ci sont évidemment diffusées sur internet mais nous ne voulons pas une page web telle que celle de météo France avec sa mise en page, ses liens, ses images, etc. Mais les données prévisionnelles brutes que nous pourrons ensuite manipuler comme bon nous semble.
L'outil qui va nous servir à récupérer ces données est appelé API (pour "application programming interface") et il s'agit plus particulièrement d'une API web. Cela se présente comme une page internet accesible via n'importe quel navigateur mais ne contenant que des informations, généralement au format json, destinées à d'autres porgrammes. Les APIs sont des outils très utilisés dans le monde des objets connectés et rien que pour la météo ils sont nombreux.
Cependant ils sont loin d'être tous gratuits et accesibles facilement, j'en ai testé plusieurs et mon choix s'est finalement porté sur Open Weather Map qui a l'avantage d'être simple d'utilisation et gratuit pour des prévisions jusqu'à cinq jours, ce qui est plus que raisonnable.
Pour disposer d'une clé permettant d'accéder aux prévisions il faut s'inscrire sur le site. On pourra alors envoyer des requêtes à l'API en spécifiant notre clé et nos coordonnées géogrphiques dans l'url de la page. En principe on peut également trouver les prévisions pour un lieu donné en spécifiant le nom d'une ville ou un code postal mais après quelques essais il s'avère que, en dehors des grandes villes, l'API ne connais pas beaucoup de lieux et repère très mal les codes postaux me situant par exemple en Allemagne alors que je cherche un lieu en France près de la frontière.
Une fois votre clé d'API récupérée et un test de vos coordonnées géographiques concluant, il est tant de passer à l'exploitation des données depuis le micro-controleur. Ici j'utilise un esp32 disposant nativement d'une connectique Wi-Fi et programmé via le logiciel arduino et une extension fournit par Espressif le fabriquant du micro-controleur sur son GitHub. Cette dernière contient un compilateur pour la carte en question, des bibliothèques pour gérer certaines de ses fonctionnalités (comme l'interface Wi-Fi) et les exemples qui vont avec.
Je ne vais pas détailler tout le programme que j'ai écrit (vous le trouverez en pièce jointe à la fin de ce billet avec ses commentaires) mais il est constitué globalement de deux parties: en premier lieu on établie une connection Wi-Fi avec notre réseau local (exactement comme le ferait n'importe quel ordinateur ou téléphone portable) puis on se connecte sur la page de l'API que l'on récupère via une bibliothèque gérant la lecture de pages html et toujours fournit avec le soft de Espressif. Enfin il s'agit de lire cette page pour en tirer les informations qui nous intéresse, c'est la partie la plus compliquée. On pourrait utiliser une bibliothèque telle que arduinoJson qui permet, entre autre, de lire des données au format json. Mais non seulement l'utilisation de la bibliothèque rend le programme bien plus lourd mais de plus je n'ai pas réussi à la faire fonctionner... Mon Esp32 plantait en boucle avec le programme donné en exemple sur internet. Donc si vous arrivez à faire fonctionner cette bibliothèque pour vous simplifier la vie sur le code tant mieux, personnelement j'utilise ma méthode plus archaïque mais qui fonctionne!
Il s'agira de parcourir le fichier caractère par caractère et de trouver les mots clés précédent une donnée avant de lire celle-ci. Je ne doute pas que arduinoJson fonctionne de manière similaire mais probablement plus optimisée. On pourra modifier ce programme pour récupérer seulement les données qui nous intéressent et afficher un nombre limité de prévisions (l'API envoie les prévisions pour 5 jours à raison d'une toutes les 3 heures). Une fois le programme lancé, ouvrez l'interface série du logiciel arduino, vous devriez voir l'esp32 se connecter au réseau puis envoyer 3 prévisions toutes les minutes.
Je vous laisse avec le programme ci-joint et reviendrais bientôt avec une nouvelle étape du projet à vous présenter. N'hésitez pas à m'envoyer un message via le formulaire de contact si vous rencontrez un problème avec le code.
Aujourd'hui je vais revenir sur un projet "terminé" l'année dernière mais qui ne me satisfait plus et que je veux améliorer. J’en profiterai pour le documenter sur ce blog au fur et à mesure de sa conception.
J'ai en effet réalisé une petite station météo à base d'un micro-contrôleur Arduino et de quelques capteurs achetés en Chine… Le résultat est, disons, moyen : les modules sont soudés sur une plaque de prototypage sans logique ni ergonomie, l’interface passe par un minuscule écran OLED (1,5 cm par 2,5 cm de côté et 124 par 32 pixels de résolution) et deux boutons. Je ne lui ai pas confectionné de boîtier mais avec sa forme bizarre et notamment la position de l’écran en bas de la carte, il n’aurai sans doute pas été très esthétique.
Pour cette nouvelle version je compte faire un appareil plus propre, plus fonctionnel et vraiment fini. J’ai commencé par rédiger un cahier des charges histoire se savoir où je vais :
Caractéristiques | Présent dans l’ancienne version |
Essentielles | |
Récupérer les données météorologiques de base dans l’environnement extérieur: température, humidité, pression, luminosité | OUI (même si j’avais finalement retiré le capteur de luminosité) |
Récupérer la température et l’humidité intérieur (dans la pièce où se trouve l’affichage) | NON |
Connaître l’heure et la date | OUI |
Récupérer des données météos prévisionnelles et les afficher | NON |
Enregistrer les données récupérées pour éventuellement les exploiter/comparer plus tard | NON |
Afficher ces informations sur un écran | OUI |
Secondaires | |
Disposer d’une interface simple pour effectuer différents réglages | PARTIELLEMENT (l’interface n’était pas adaptée) |
Rendre le système transportable facilement pour effectuer des mesures ailleurs que chez moi | NON |
Évaluer le temps qu’il fait grâce aux données récoltées | NON |
Bonus (si j’ai le temps, l’envie, les moyens…) | |
Évaluer la qualité de l’air | OUI mais avec des résultats PEU CONCLUANTS, soit les capteurs étaient de trop mauvaise qualité soit leur utilisation et notamment leur étalonnage était mal réalisé |
Mesurer la vitesse du vent | NON |
Alimentation solaire | NON (mais je dispose déjà d’une partie du matériel : les panneaux solaires) |
Comme on peut le voir, il y a du travail mais en commençant par le plus important et en progressant de manière réfléchie et planifiée je devrais arriver au bout ! Pour commencer il faut sélectionner les solutions techniques pour répondre à ce cahier des charges et je vais commencer par sélectionner dans mon stock personnel.
Parmi les nouveaux joujoux dans le monde des objets connectés et du DIY que j’ai découvert récemment se trouve le magnifique ESP 32. Ce micro-contrôleur a tout pour plaire : facile à programmer (un compilateur facilement installable sur l’interface de programmation Arduino accompagné des bibliothèques essentielles est disponible sur GitHub juste ici), équipé de modules Wi-Fi et Bluetooth ainsi que d’une antenne et vendu à des prix dérisoires un peu partout sur internet.
Avec l’ESP 32 j’ai la base principale de ma station mais pour les quelques raisons que j’expose ci-après je vais séparer la tache de contrôle en deux parties : l’une gérée par l’ESP 32 l’autre par un Arduino Nano. Grâce à ça ma station sera amovible, la partie interface et mesure de l’environnement intérieur pourra rester dans la maison devant une fenêtre, la partie mesure de l’environnement extérieur pourra se trouver sur le rebord de la fenêtre dehors et être transportée au besoin. On répond ainsi au critère de transportabilité et on a un moyen facile de séparer les deux zones de mesures.
Deux principes s’opposent pour l’interface entre les deux micro-contrôleurs, un câble serait une solution facile mais l’interface sans-fil permet d’améliorer la mobilité de l’appareil et d’avoir moins de contrainte quand à trouver l’emplacement optimal pour le module extérieur. De plus je dispose d’un module HC-06 permettant de disposer d’une transmission Bluetooth sur l’Arduino. Enfin, dans le cas hypothétique où j’essai d’alimenter via des panneaux solaires mon système, on peut toujours imaginer une alimentation sur secteur pour la partie intérieur et ainsi libérer de cette charge l’alimentation solaire qui de plus permettra d’effectuer des mesures n’importe où dans la nature.
Bref nous avons là les cerveaux de mon projet.
Intéressons nous maintenant à ceux qui vont permettre de rendre ce projet fonctionnel et de faire son job, c’est à dire relever des données de son environnement.
Question température et pression je vais reprendre le capteur de la précédente version, le BME280. Ce capteur développé par Bosch et dont les copies sont trouvables dans toute bonne boutique Chinoise d’électronique qui se respecte permet via un bus I2C de recevoir la température et la pression ambiante sur un microcontrôleur.
L’humidité et la luminosité peuvent toutes deux être obtenues facilement via des capteurs analogiques, en mesurant la tension à leurs bornes ont déduis facilement les données voulues. La même chose existe pour la température. Je reviendrai dans le détail sur l’implémentation de ces capteurs dans un autre billet.
La version précédente de mon système utilisait un minuscule écran OLED pour afficher ses données, non seulement c’était difficile à lire mais de toute façon trop petit pour le nombre d’informations que je souhaite présenter. Après avoir fait un tour sur internet je pense choisir un écran e-paper avec un affichage à encre numérique mat et basse consommation.
Il aurait été intéressant d’utiliser un écran tactile pour disposer d’une interface moderne et ergonomique mais le prix de ceux-ci est relativement élevé par rapport à l’intérêt qu’ils peuvent présenter et je me contenterai sans doute de boutons poussoirs comme précédemment.
Enfin l’heure et la date sont facilement obtenus via une petite horloge à pile qui conservera ceux-ci même hors tension. L’ancienne version de ma station en disposait déjà.
Le schéma de cette future station connectée est déjà dégrossi et la prochaine étape consiste à trouver, acquérir et tester les composants qui seront nécessaire à sa réalisation. J’ai déjà commencé avec ceux dont je dispose et je vous partage tout ça dans un future article !