- Sol Mate e-Paper Displayは、指定した場所の現在の天気と光の条件を反映したイラストを生成し、Raspberry Piに接続されたWaveshare e-Paper画面に表示するプロジェクト
- スクリプトは場所の入力を受け取って天気を取得し、gpt-5-miniが作成したプロンプトとgpt-image-1-miniを使って高品質な画像をレンダリングするため、OpenAI APIトークンが必要
- 実在する場所だけでなく、友人のいる場所や架空の場所も入力でき、架空の場所ではGPTが地球上で最も近い場所の緯度・経度を天気サービスに渡す
- ハードウェアはRaspberry Pi 5とWaveshare e-Paper 7.3" displayを前提としており、別サイズのディスプレイを使うにはコードの修正が必要
control.pyは画面表示、ローカルプレビュー、画面クリアをサポートしており、同じ画像を長時間表示しないようにというWaveshareの推奨と、APIコストが増える可能性の両方を考慮する必要がある
Sol Mate e-Paper Displayがすること
- Sol Mate e-Paper Displayは、Raspberry PiとWaveshare e-Paperディスプレイで天気レポート画像を生成・表示するコード集
- もともとは☀️ Sol Mate GPTとして作られ、その後e-Paperディスプレイでどう見えるかを試したくなってこのプロジェクトが生まれた
- 入力する場所は実在の場所、友人のいる場所、架空の場所まで対応
- 雨が降っていれば、絵の中に傘を差した人が登場するように、現在の天気がイラストに反映される
- 架空の場所を入力すると、GPTが判断した地球上で最も近い場所の緯度・経度を天気サービスに渡す
画像生成の仕組み
- イラストはgpt-image-1-miniモデルでレンダリングされる
- 画像プロンプトはgpt-5-miniが生成し、高品質な画像設定を使う
- この生成フローのため、実行にはOpenAI APIトークンが必要
必要なハードウェア
実行と使い方
- プロジェクトはRaspberry Pi上での実行を前提としている
- Python環境の管理にはuvを使用
uvが仮想環境を管理するため、手動で有効化する必要はない
uv sync
- macOSやLinuxではない開発マシンでは、Raspberry Pi用のハードウェアライブラリはデフォルトでスキップされる
OPENAI_API_KEY環境変数を設定する必要がある
- 現在の作業ディレクトリにある
.envファイルから環境変数を読み取れる
OPENAI_API_KEY=... uv run python control.py show Barcelona
- ローカルですばやく確認したい場合は、iTerm2の画像表示を使う
previewコマンドを実行できる
- デフォルトではシステムの一時ディレクトリに
sol-mate-preview-<timestamp>.pngとして保存される
OPENAI_API_KEY=... uv run python control.py preview "Barcelona"
画面管理と自動更新
- Waveshareは、同じ画像をディスプレイに長時間表示し続けないよう推奨_Manual#Precautions)している
- 画面を消去するには
clearコマンドを使う
uv run python control.py clear
- 設定例では、
cronで1日2回画像を更新し、深夜に画面をクリアする
- パスは各自のインストール環境に合わせて修正する必要がある
- 定期実行は無視できないコストになる可能性がある
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
バックエンドと参考資料
- 天気を取得するための非公開APIを使うことはできるが、過度に呼び出さないという条件がある
- 大量利用のアイデアがあるなら、自前でホスティングする方法が推奨される
- バックエンドのソースコードはblixt/sol-mateにある
- 追加写真と制作過程:
1件のコメント
Hacker Newsのコメント
似たようなプロジェクトで Inkplate 6Color を使っている
ESP32コントローラーが内蔵されているのでPiは不要で、バッテリーだけでも動かせる
ディープスリープ/ウェイクアップのスケジュールをうまく組めば、1回の充電で数週間は持つ
いちばん気に入っているのはオフィスのドアに掛けてある赤い On Airサインで、会議や録画のときにMacからショートカットを実行すると状態が自動更新され、デバイスがミュートされる
天気表示、ニュース、Google Calendar向けのオープンソース例もある
https://soldered.com/product/inkplate-6color-color-e-paper-b...
安価な電子ペーパーのプロジェクトは本当に楽しくて実用的
Pi Zeroにつないだ電子ペーパーディスプレイが、今後3時間以内に雨が降るかどうかを Yes/No だけで表示する
改めて考えると、7色ディスプレイまでは必要ないかもしれない
使っているディスプレイは https://shop.pimoroni.com/products/inky-impression-7-3?varia... で、こちらのほうが安そう
こういう画面を家のあちこちに貼りたくなるくらい楽しい
独立に、1週間前に 同じディスプレイ でほとんど同じものを作った
https://imgz.org/iBLADkCU.jpg
特定の場所の現在の天気と時刻を取得し、AIがその場所を含む写真を生成して表示する額縁
どうして自分たちが独立にここまで同じところへたどり着いたのか不思議
おそらくいちばん分かりやすい用途だったのだと思う
新しい起業家にとって、自分のアイデアが唯一無二ではないことを示す良い例で、実際に唯一のアイデアなどほとんどない
重要なのは実行力
電子ペーパー天気ボード界のUberとLyftのような感じで、HNでも似たものをさらにタグ付けしておいたことがある
時間さえあれば自分も1つ作るつもりで、どれもESP32開発と自由・オープンソースのホームオートメーションに刺激を与えてくれる
ハードウェアプロジェクトやアイデアは素晴らしいが、常時オンのデバイス にOpenAI APIを使うのは絶対に手を出したくない
遊びで作る機会があれば、OpenStreetMapとLAN上でホストするStable Diffusionを使う版を作るかもしれず、その意味でブックマークする価値はある
似たようなプロジェクトを見て、同じディスプレイを2つ買った
もともとはこの2つの例のようにカラー写真ディスプレイにする予定だったが、この応用もよさそう
ハックがうまくいくことを願っているし、近いうちに作ったプロジェクトをここで見られるとうれしい
画像ではBarcelonaが 26°Cと2°C と表示されている
Barcelonaには何度か行ったことがあるが、1日のうちにその両方の気温を記録するのは想像しにくい
天気データが信頼できるのか、それとも全部ハルシネーションでアニメーションだけを楽しめばいいのか気になる
あるいは自分がBarcelonaの天気を思ったほど分かっておらず、最高26度・最低2度があり得るのかもしれない
2°Cは26°Cから生まれたハルシネーションにすぎない
趣味プロジェクトなので、従来の方法でテキストをレンダリングするよりも、毎回テキストが独特に見え、たいていはよりアーティスティックに見えることを優先した
ただし本格的な製品にするなら、画像生成モデルはこの用途にはまだ十分ではない
「同じ画像をディスプレイに長時間残さないでください」という理由が気になる
カラー電子ペーパー 特有の問題なのか?
実際にはそれほど大きな問題ではなさそうだが、ピクセルが長時間アクティブな状態だと固着するリスクがあるのかもしれない
[1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
一般的な白黒電子ペーパーと違って、同じ画像を長時間置かない という注意が必要になる表示方式の違いがあるのか気になる
記憶が正しければ、標準的な白黒電子ペーパーディスプレイには焼き付きはなかった
みんなが詳しく知って判断できるよう、READMEにドキュメントへのリンクを入れるつもり
[1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
こういうプロジェクトで、ディスプレイ駆動用として Raspberry Pi のような小型で低消費電力のコンピューターをいつも指定して使うのはなぜなのか気になる
Debian GNU/Linux が動く普通のコンピューターはすでにたくさんある
そうしたコンピューターの一つでこのコードを使って、普通の USB ケーブルで電子ペーパーディスプレイを駆動したいなら、できるのでは?
Raspberry Pi みたいなものを必ず使わなければならない理由はなさそう
大きなコンピューターでも、OS からそうした周辺機器を使えるなら同じように使える
こういう小型コンピューターが普及する前は、パラレルポートと小さなプログラムで同じ低レベル信号を使い、周辺機器と直接通信できていた
Raspberry Pi はブートストラップ用のドキュメントやコードが多いので、Linux を少し触ったことがある人が起動してパッケージを入れ、何かをするには便利
時間と知識があれば、ごく小さなマイクロコントローラーでも可能
ディスプレイ自体には、たまに変わった電源電圧が必要になること以外、魔法のようなものはない
よくある問題は、こうしたディスプレイが USB で直接通信しないこと
ピクセルを設定するには SPI やパラレルのデジタルインターフェースを受けるため、中間インターフェースと画面を描画するソフトウェアが必要になる
だから人々はたいてい Raspberry Pi をつなぎ、より一般的なプロトコルでそこに話しかける
このディスプレイ一つを動かすために普通のコンピューターをずっと起動しておくのは非効率
優れたプロジェクトはいつもそうだが、誰かがカスタマイズへ進めるようにしてくれる
ハードウェアの推奨だけでなく、参考として epaper.py[1] を見るだけでもよい
[1]: https://github.com/blixt/sol-mate-eink/blob/main/epaper.py
天気を取得するのに、なぜ AI を使うのかよく分からない
直接呼び出せる無料の天気 API は何十個もある
地元で使われる口語的な地名を正確な緯度・経度に変換することは、ある程度やってくれる API もあるだろうが、GPT ほど正確な無料 API はよく知らない
それに「Hogwarts」や「Tatooine」と入力すると、AI のおかげでその場所の天気も律儀に作ってくれる[1]
最も重要なのは、実際の天候条件や太陽・月などを反映して画像を生成するための Dall-E 用プロンプトを書いてくれること
[1]: https://x.com/blixt/status/1724099967361462714