2 points par GN⁺ 2024-06-09 | 1 commentaires | Partager sur WhatsApp
  • Sol Mate e-Paper Display est un projet qui génère une illustration reflétant la météo actuelle et les conditions de luminosité d’un lieu donné, puis l’affiche sur un écran Waveshare e-Paper connecté à un Raspberry Pi
  • Le script prend un lieu en entrée, récupère la météo, puis utilise un prompt créé par gpt-5-mini et gpt-image-1-mini pour produire une image de haute qualité ; un jeton d’API OpenAI est donc nécessaire
  • On peut saisir non seulement un lieu réel, mais aussi le lieu d’un ami ou un lieu fictif ; pour un lieu fictif, GPT transmet au service météo la latitude et la longitude du lieu réel le plus proche sur Terre
  • Le matériel est basé sur un Raspberry Pi 5 et un écran Waveshare e-Paper 7.3", et l’utilisation d’un écran d’une autre taille nécessite des modifications du code
  • control.py prend en charge l’affichage à l’écran, l’aperçu local et l’effacement de l’écran ; il faut aussi tenir compte de la recommandation de Waveshare de ne pas laisser la même image affichée trop longtemps ainsi que d’une possible hausse des coûts d’API

Ce que fait Sol Mate e-Paper Display

  • Sol Mate e-Paper Display est un ensemble de code permettant de générer et d’afficher des images de bulletin météo avec un Raspberry Pi et un écran Waveshare e-Paper
  • Le projet a d’abord été créé avec ☀️ Sol Mate GPT, puis il a donné envie de voir à quoi cela rendrait sur un écran e-Paper, d’où ce projet
  • Le lieu saisi peut être un endroit réel, le lieu d’un ami, ou même un lieu fictif
    • S’il pleut, l’illustration intègre par exemple des personnes tenant un parapluie, de sorte que la météo actuelle se reflète dans l’image
    • Si l’on saisit un lieu fictif, GPT transmet au service météo la latitude et la longitude du lieu réel le plus proche sur Terre qu’il a déterminé

Méthode de génération des images

  • Les illustrations sont rendues avec le modèle gpt-image-1-mini
  • Les prompts d’image sont générés par gpt-5-mini, avec des paramètres de haute qualité
  • En raison de ce flux de génération, l’exécution nécessite un jeton d’API OpenAI

Matériel nécessaire

Exécution et utilisation

  • Le projet part du principe qu’il s’exécute sur un Raspberry Pi
  • La gestion de l’environnement Python se fait avec uv
    • uv gère l’environnement virtuel, il n’est donc pas nécessaire de l’activer manuellement
uv sync
  • Sur une machine de développement qui n’est ni sous macOS ni sous Linux, la bibliothèque matérielle du Raspberry Pi est ignorée par défaut
  • Il faut définir la variable d’environnement OPENAI_API_KEY
    • Les variables d’environnement peuvent être lues depuis un fichier .env dans le répertoire de travail courant
OPENAI_API_KEY=... uv run python control.py show Barcelona
  • Pour une vérification rapide en local, on peut exécuter la commande preview, qui utilise l’affichage d’images d’iTerm2
    • Par défaut, l’image est enregistrée dans le répertoire temporaire du système sous le nom sol-mate-preview-<timestamp>.png
OPENAI_API_KEY=... uv run python control.py preview "Barcelona"

Gestion de l’écran et mises à jour automatiques

  • Waveshare recommande_Manual#Precautions) de ne pas laisser la même image affichée trop longtemps sur l’écran
  • Pour effacer l’écran, utilisez la commande clear
uv run python control.py clear
  • L’exemple de configuration met à jour l’image deux fois par jour avec cron et efface l’écran pendant la nuit
    • Les chemins doivent être adaptés à votre propre environnement d’installation
    • Des exécutions répétées peuvent entraîner un coût non négligeable
0 8 * * * cd ~/src/sol-mate-eink && OPENAI_API_KEY=... uv run python control.py show Barcelona
0 18 * * * cd ~/src/sol-mate-eink && OPENAI_API_KEY=... uv run python control.py show Barcelona
0 2 * * * cd ~/src/sol-mate-eink && uv run python control.py clear

Backend et ressources de référence

1 commentaires

 
GN⁺ 2024-06-09
Avis sur Hacker News
  • J’utilise un Inkplate 6Color pour un projet similaire
    Le contrôleur ESP32 est intégré, donc pas besoin de Pi, et il peut fonctionner uniquement sur batterie
    Avec une bonne planification du deep sleep/des réveils, il peut tenir plusieurs semaines sur une seule charge
    Ce que je préfère, c’est le panneau rouge On Air accroché à la porte de mon bureau : quand je lance un raccourci sur mon Mac pendant une réunion ou un enregistrement, l’état se met à jour automatiquement et les appareils se mettent en sourdine
    Il existe aussi des exemples open source pour l’affichage météo, les actualités et Google Calendar
    https://soldered.com/product/inkplate-6color-color-e-paper-b...
    Les projets e-ink bon marché sont vraiment amusants et utiles

    • J’ai fait un projet similaire
      Un écran e-ink connecté à un Pi Zero affiche simplement Yes/No pour indiquer s’il va pleuvoir dans les 3 prochaines heures
      Avec le recul, je n’ai peut-être pas besoin d’aller jusqu’à un écran 7 couleurs
      L’écran que j’utilise est celui-ci : https://shop.pimoroni.com/products/inky-impression-7-3?varia..., et il semble moins cher
    • L’usage est malin et sympa
      C’est assez amusant pour donner envie de coller ce genre d’écrans un peu partout dans la maison
    • J’ai été surpris que ce soit exactement l’objet qui coche toutes les cases nécessaires, puis à nouveau surpris par le prix
  • Indépendamment, j’ai fabriqué quasiment la même chose il y a une semaine avec le même écran
    https://imgz.org/iBLADkCU.jpg
    C’est un cadre photo qui récupère la météo actuelle et l’heure d’un lieu donné, puis utilise l’IA pour générer et afficher une image intégrant ce lieu
    C’est drôle de voir comment nous sommes arrivés tous les deux indépendamment au même résultat
    C’était probablement l’usage le plus évident

    • C’est le genre d’idée qui traîne partout
      C’est un bon exemple pour montrer à un nouvel entrepreneur que son idée n’est pas unique ; en réalité, les idées vraiment uniques sont rares
      Ce qui compte, c’est l’exécution
      Ça fait un peu Uber et Lyft du panneau météo e-ink ; j’avais déjà tagué des choses similaires sur HN
      Dès que j’aurai le temps, j’en fabriquerai un aussi, et tout cela me donne envie de faire du développement ESP32 et de l’automatisation domestique libre et open source
  • Le projet matériel et l’idée sont cool, mais je ne voudrais surtout pas toucher à l’API OpenAI pour un appareil allumé en permanence
    Si jamais je faisais ça pour m’amuser, je pourrais créer une version avec OpenStreetMap et Stable Diffusion hébergé sur le LAN, donc ça vaut le coup de le mettre en favori

    • Je me demande pourquoi l’association de l’API OpenAI avec un appareil allumé en permanence pose problème
  • J’ai acheté deux écrans identiques après avoir vu des projets similaires

    • « A WiFi color eInk picture frame » https://news.ycombinator.com/item?id=35689706
    • « Color E-Ink Display Photo Frame Pranks [Mom] » https://news.ycombinator.com/item?id=26977747
      À l’origine, je comptais en faire un affichage de photos couleur comme dans ces deux exemples, mais cette application a l’air intéressante aussi
    • J’aime bien le fait que le deuxième article contienne aussi un gros plan au microscope pendant le changement d’image
      Bon hacking, et j’espère voir bientôt ici le projet que tu auras réalisé
  • Sur l’image, Barcelona est affichée avec 26 °C et 2 °C
    Je suis allé plusieurs fois à Barcelona, mais j’ai du mal à imaginer ces deux températures le même jour
    Je me demande si les données météo sont fiables, ou si tout n’est qu’hallucination et qu’il faut juste profiter de l’animation
    Ou alors je connais moins bien la météo de Barcelona que je ne le pensais, et un maximum de 26 degrés avec un minimum de 2 degrés est possible

    • C’est un cas où Dall-E n’arrive pas à écrire le texte proprement
      Les 2 °C ne sont qu’une hallucination issue des 26 °C
      Comme c’est un projet perso, j’ai privilégié le fait que le texte ait un aspect unique à chaque fois, généralement plus artistique, plutôt que de le rendre de manière traditionnelle
      Mais pour en faire un produit sérieux, les modèles de génération d’images ne sont pas encore assez bons pour cet usage
  • Je me demande pourquoi il est dit de « ne pas laisser la même image trop longtemps à l’écran »
    Est-ce un problème propre à l’e-ink couleur ?

    • La recommandation de Waveshare est de « rafraîchir au moins une fois toutes les 24 heures »[1]
      En pratique, je ne pense pas que ce soit un si gros problème, mais il peut y avoir un risque de rémanence si les pixels restent activés trop longtemps
      [1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
    • Je me demande si c’est à cause du burn-in, ou plutôt parce que les couleurs se délavent
  • Contrairement à l’e-ink noir et blanc classique, je me demande s’il y a une différence dans la technologie d’affichage qui impose de faire attention à ne pas laisser la même image trop longtemps
    Si je me souviens bien, les écrans e-ink noir et blanc standard ne souffraient pas de burn-in

    • Je n’ai fait que reprendre les recommandations de Waveshare[1], et je pense que ce n’est probablement pas un problème très important
      Je vais ajouter le lien vers la documentation dans le README pour que les gens puissent se renseigner et juger par eux-mêmes
      [1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
  • Je me demande pourquoi ce genre de projets spécifie toujours un petit ordinateur basse consommation comme un Raspberry Pi pour piloter l’écran
    Il existe déjà beaucoup d’ordinateurs classiques faisant tourner Debian GNU/Linux
    Si je voulais utiliser ce code depuis l’un de ces ordinateurs pour piloter un écran e-paper avec un simple câble USB, ce ne serait pas possible ?
    Je ne vois pas de raison d’utiliser absolument quelque chose comme un Raspberry Pi

    • Les petits ordinateurs comme le Raspberry Pi permettent d’accéder facilement au GPIO et à des périphériques bas niveau comme SPI, utilisés par ce petit écran
      Sur un gros ordinateur, si le système d’exploitation permet d’utiliser ce genre de périphériques, on peut faire la même chose
      Avant que ces petits ordinateurs ne se généralisent, on pouvait utiliser un port parallèle et un petit programme pour envoyer les mêmes signaux bas niveau et communiquer directement avec des périphériques
    • Ce n’est pas du tout indispensable
      Le Raspberry Pi dispose de beaucoup de documentation et de code pour démarrer, ce qui le rend pratique pour quelqu’un qui a un peu touché à Linux : on l’allume, on installe des paquets, puis on fait quelque chose
      Avec du temps et des connaissances, on peut aussi le faire avec un tout petit microcontrôleur
      L’écran lui-même n’a rien de magique, à part parfois des tensions d’alimentation un peu étranges
      Le problème le plus courant, c’est que ces écrans ne communiquent pas directement en USB
      Pour définir les pixels, ils acceptent une interface numérique SPI ou parallèle ; il faut donc une interface intermédiaire et un logiciel qui dessine l’écran
      C’est pourquoi les gens branchent souvent simplement un Raspberry Pi et lui parlent via un protocole plus courant
    • Parce que c’est bon marché et que ça tient longtemps sur batterie
      Garder un ordinateur classique allumé en permanence juste pour alimenter cet écran serait inefficace
  • Comme toujours, un excellent projet donne envie à quelqu’un d’aller vers la personnalisation
    Au-delà des recommandations matérielles, rien que epaper.py[1] vaut le détour comme référence
    [1]: https://github.com/blixt/sol-mate-eink/blob/main/epaper.py

  • Je ne comprends pas bien pourquoi utiliser de l’IA pour récupérer la météo
    Il existe des dizaines d’API météo gratuites qu’on peut appeler directement

    • L’IA sert à quelques choses difficiles à faire avec des API gratuites
      Convertir le nom familier d’un quartier en latitude/longitude exactes, certaines API le font plus ou moins, mais je ne connais pas d’API gratuite aussi précise que GPT
      Et si on saisit « Hogwarts » ou « Tatooine », grâce à l’IA, elle invente aussi consciencieusement la météo de ces lieux[1]
      Surtout, elle rédige le prompt pour Dall-E qui générera une image reflétant les conditions météo réelles, le soleil, la lune, etc.
      [1]: https://x.com/blixt/status/1724099967361462714
    • Ça fait une très bonne ligne à mettre sur un CV
    • Sinon, on peut aussi simplement regarder par la fenêtre