Station météo pour cyclistes urbains

August 21, 2024

J'ai utilisé un Raspberry Pi, un afficheur OLED et quelques lignes de codes pour prendre de meilleures décisions quant à l'équipement à utiliser ou l'itinéraire à prendre avant de sortir à vélo.

Se retrouver à vélo à plusieurs kilomètres de mon domicile et être surpris par la pluie ou la grêle, sans équipement approprié, sans vêtements de rechange, sans possibilité de faire demi-tour, ce n'est pas une expérience que j'ai envie de reproduire trop souvent.

Mon souhait était d'avoir juste l'information suffisante pour mieux me préparer avant de prendre mon guidon en main. Et sans dégainer mon téléphone portable.

Cet article décrit dans les grandes lignes la réalisation de ce projet. Il peut être utilisé pour le reproduire, l'adapter ou s'en inspirer. Le code source est entièrement disponible.

J'ai utilisé le matériel que j'avais à ma disposition.

  • Un Raspberry Pi 3 Model B+
  • Un afficheur OLED SH1106 de 1,3 pouces
  • Un capteur tactile
  • Du petit matériel d'électronique (cartes PCB de développement, nappes, fils)

Pour se procurer ces équipements, il faut compter environ 45 €.

L'installation consiste en une boîte en carton pour l'afficheur et le capteur tactile. Une carte PCB relie les pattes de l'afficheur et du capteur tactile au port GPIO du Raspberry Pi via une nappe.

Front La face avant de l'afficheur

Inside L'intérieur de l'afficheur

Card Carte PCB

Raspberry Pi La nappe connectée au port GPIO du Raspberry Pi

Une page d'informations est affichée lorsque l'on touche le capteur. Ce même capteur permet de passer sur une deuxième page d'informations.

L'écran s'éteint au bout de 30 secondes d'inactivité.

Page 1 La première page d'information

Pour cette page, la météo des 3 heures à venir est disponible ainsi que la météo du lendemain, ici entre 6h et 8h. Les informations du lendemain sont notées avec un '.

Le nombre de caractères affichable étant limité, l'information est compactée.

22/08 11:19 23°C 170W

22/08 [Date du jour]
11:19 [Heure]
23°C  [Température intérieure]
170W  [Consommation instantanée]

Actu. 20°C 0% Enso.

Actu. [Actu. = Actuellement]
20°C  [Température extérieure actuelle]
0%    [Pourcentage précipitation actuel]
Enso. [Description du temps]

11/12 19°C 0% Enso.

11/12 [Créneau horaire de 11h entre 12h]
19°C  [Température extérieure du créneau]
0%    [Pourcentage de précipitaion du créneau]
Enso. [Description du temps du créneau]

12/13 21°C 0% Enso.

12/13 [Créneau horaire de 12h entre 13h]
21°C  [Température extérieure du créneau]
0%    [Pourcentage de précipitaion du créneau]
Enso. [Description du temps du créneau]

18/19 22°C 0% Nuag.

18/19 [Créneau horaire de 18h entre 19h]
22°C  [Température extérieure du créneau]
0%    [Pourcentage de précipitaion du créneau]
Nuag. [Description du temps du créneau]

06/07' 19°C 0% Brui.

06/07' [Créneau horaire de 6h entre 7h le lendemain]
19°C   [Température extérieure du créneau]
0%     [Pourcentage de précipitaion du créneau]
Brui.  [Description du temps du créneau]

Page 2 La deuxième page d'information

Cette page ressemble à la précédente, sans la météo du lendemain.

Deux programmes ont été écrits phdezann/home-console-frontend [GitHub] et phdezann/home-console-backend [GitHub].

home-console-frontend en Python, s'occupe de recevoir les ordres d'affichage et de transformer les touchers du capteur en évènements.

home-console-backend en Java, sur réception d'un évènement de toucher, interroge l'api de météo tomorrow.io, formate une page d'information et envoie un ordre d'affichage.

Ces deux programmes communiquent à travers un broker MQTT, hébergé sur le Raspberry Pi.

La séparation en deux programmes est un choix personnel. Le support en Python des drivers de l'écran est excellent. L'appel d'API, la manipulation des données, le support des tests unitaires, me semblaient plus rapides à écrire en Java.

Seul du texte statique est affiché et le nombre de caractères est limité. Il serait possible d'afficher plus de données en ajoutant un déroulement automatique comme le montre cet exemple. Cela permettrait d'afficher plus de créneaux horaires ou plus d'informations par créneau, comme le vent ou l'humidité.


Ma tête