the

good

wire

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

2018-09-04

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

Commentaires:

Ajouter un commentaire

Les champs précédés d'un astérisque (*) sont obligatoires.

2019-08-15 par KelPurn
Keflex And Immonium Ad Mail Order Toprol Xl Non Prescription Prednisone tadalafil levitra Cialis Omline Buy Zithromax In The Uk Prix Levitra Pharmacie Lyon