Objectif
Construction d’un afficheur météo avec le cahier de charge suivant :
Permettre la lecture des informations jusqu’à trois mètres. D’un coup d’œil on devra être renseigné sur temps qu’il fait.
Affichage de la température intérieure.
Affichage de la température, le taux d’humidité, l’orientation et la vitesse du vent extérieures.
Affichage de la tendance des températures sur les quinze dernières minutes.
Utilisation de peu de composants.
Utilisation d’un afficheur TFT ILI9341 (240×320) en mode SPI
Utilisation du contrôleur Rapsberry pico W.
Pouvoir accéder/modifier le programme facilement une fois le dispositif terminé.
Partie 1 : Composant
Très peu de composants sont nécessaires. J’utilise une planche de prototypage pour démonstration de faisabilité.
– La fonction thermomètre (intérieure) est assurée par le composant DHT11.
– La fonction météo est assurée par le site « openweathermap«. Le site offre gratuitement une clé API d’accès aux données météo en fonction de la localisation. Une URL avec cette clé renvoie toutes les informations sous la forme d’une chaîne de caractères. Cette dernière est exploitée par le programme (voir exemple dans la section bibliographie).
L’alimentation du dispositif se fait par un cordon USB connecté directement au Pico. Un branchement à un PC permet alors d’affiner le programme, apporter des améliorations.
Tous les fichiers (applications et documentation) sont téléchargeables ICI.
Partie 2 : Montage de base
Le montage est simple et ne pose pas de problème. Le boîtier avec sa façade transparente facilite la mise en œuvre.
Partie 3 : L’affichage
Les images décrivent les fonctions affichées. La taille des caractères permet une lisibilité facile et à une distance de 2 à 3 mètres. D’un coup d’œil on est renseigné sur temps qu’il fait. On joue également avec le couleur lorsqu’une valeur dépasse certains seuils (ex blanc pour température extérieure inférieure à 4 degrés). Trois écrans se suivent en séquence pour permettre la visualisation de toutes les informations : températures, vent, état général et humidité.
Partie 2-b : Le programme
L’application comporte plusieurs fichiers.
- « definitions.h » regroupe les déclarations de variables ainsi que les tableaux de constantes.
- Constantes liées aux accès internet (WiFi, URL site météo).
- Traduction du temps qu’il fait et images associées.
- Positions des éléments graphiques sur l’écran.
- Diverses variables pour mémoriser des températures.
- « functions-internet » regroupe les fonctions liées aux relations avec internet.
- Démarrage WiFi.
- Appel des informations météo.
- Extraction des éléments météo et stockage des valeurs.
- « function-display » contient les fonctions d’affichage pour les trois écrans.
- « progafftemp2 » le programme principal qui orchestre le tout.
Les schémas montrent le déroulement du programme dans le temps.
Particularités du programme :
- Utilisation de la bibliothèque « FixedString-main ». Elle offre une utilisation de la mémoire plus sûre, plus simple et plus prévisible que les objets String dynamiques.
- L’utilisation de pointeurs permet une gestion efficace de la mémoire et une optimisation des performances.
- Les images utilisées ont été téléchargées du site « openweathermap.org » et adaptés par conversion au format « .c » (cf. bibliographie).
L’application se trouve dans le dossier « progafftemp2 ».
Conclusion
Ce projet ne comporte peu de composants et le montage est facile. L’affichage des données est bien visible et permet d’un coup d’œil de voir l’état de la météo. Comme on peut brancher directement le dispositif sur un PC on pourra adapter le programme selon ses envies. Enjoy it !
Bibliographie
Arduino 2.8″ ILI9341 Tutorial : http://educ8s.tv/arduino-2-8-ili9341-tutorial
Adafruit GFX Graphics Library : https://learn.adafruit.com/adafruit-gfx-graphics-library/using-fonts
WiFi (Raspberry Pi Pico W) Support : https://arduino-pico.readthedocs.io/en/latest/wifi.html
ArduinoHttpClient library <== exemples pour inspiration
Openweathermap : https://openweathermap.org/weather-conditions
Image converter : http://www.rinkydinkelectronics.com/t_imageconverter565.php
Exemple d’appel de la fonction météo :
https://api.openweathermap.org/data/2.5/weather?lat=xx.xx&lon=yy.yy&appid=919uif897b48jg375b7e95aa7f38c6e457&units=metric
Les informations en gras sont à fournir.
Exemple de la chaîne de caractères reçue d’openweathermap :
{“coord”:{“lon”:xx.xx,”lat”:yy.yy},”weather”:[{“id”:804,”main”:”Clouds”,”description“:”overcast
clouds”,”icon“:”04n”}],”base”:”stations”,”main”:
{“temp”:2.03,”feels_like“:-4.58,”temp_min”:1.43,”temp_max”:2.96,”pressure”:1018,”humidity“:64,
“sea_level”:1018,”grnd_level”:1002},”visibility”:10000,”wind“:{“speed“:10.8,”deg“:40,”gust“:16.46},
“clouds”:{“all”:100},”dt”:1766599863,”sys”:{“type”:1,”id”:6595,”country”:”xx”,”sunrise”:1766560793,
“sunset”:1766590630},”timezone”:3600,”id”:2973783,”name”:”xy”,”cod”:200}
Laisser un commentaire