the

good

wire

Catégorie: Électronique

API & ESP32 - Station météo connectée part.2

2018-09-04 par Rémi

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'API

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.

exemple de page API en Json
Exemple de page envoyée par l'API de Open Weather Map, Firefox détecte tout seul le format json et formate la page en conséquence mais vous pouvez également lire les données brut au format html standard. Voici le lien de l'exemple diffusé sur le site de l'API: api.openweathermap.org/data/2.5/weather?lat=35&lon=139

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.

Intégration sur l'esp32

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.

intérieur de l'esp32
Une photo de l'intérieur de la coque métallique de l'esp32, la bande noire tout à gauche est l'antenne permettant les connections Wi-Fi et Bluetooth. Source: Wikipédia

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.

le port serie recevant les prévisions météo de l'esp32
Voilà ce que l'on obtient après avoir compilé et téléversé le programme dans l'esp32.

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.

À télécharger: API_meteo_esp32.ino

Station météo connectée part.1

2018-07-18 par Rémi

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.

Première version

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.

l'ancienne version de ce projet
La version antérieur du projet: c'est pas top (et c'est pas dû qu'à la qualité de l'image...).

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.

Les cerveaux

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.

ESP32 et Arduino Nano côte à côte
Les cerveaux de mon projet: à gauche l'ESP32 et à droite l'Arduino Nano.

Les capteurs

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.

Le capteur BME280
Le capteur BME280, cette minuscule puce permet de mesurer la température et la pression ambiante.

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.

L’affichage, l’interface et l’heure

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à.

En résumé

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 !