【完成】新元号発表のアレをやりたい

平成レトロネタをChatGPTと議論していたら、新元号発表のアレをIoTしたいと思った。

以下の記事が参考になりそう。

予算1万円で10インチくらいのディスプレイを探す。
少しサイズが小さい(7.5インチ)が、上記記事で使用しているものを購入する。
一番の魅力はラズパイPicoが載るHATが付属している点。
自ずとラズパイPicoを使用することになった。

構成イメージ
①指定した漢字を表示する
LINE Botから漢字2文字を送信
↓
Node-REDでWebhookを受信
↓
テキストから漢字二文字を抽出
↓
PythonのPillowライブラリで筆文字画像作成
↓
画像をバイナリデータに変換
↓
バイナリデータをMQTTでラズパイに送信
↓
ラズパイでMQTT受信
↓
バイナリデータを画像に復元
↓
SPI通信でe-Paperに表示
②生成した漢字を表示する
LINE Botから"ランダム"という文字を送信もしくはラズパイのボタンを押下してWebhookを送信
↓
Node-REDでWebhookを受信
↓
OpenAIノードで元号っぽい漢字二文字を生成
↓
PythonのPillowライブラリで筆文字画像作成
↓
画像をバイナリデータに変換
↓
バイナリデータをMQTTでラズパイに送信
↓
ラズパイでMQTT受信
↓
バイナリデータを画像に復元
↓
SPI通信でe-Paperに表示

むちゃくちゃ課題ある。
-
PythonのPillowライブラリで筆文字画像作成→Picoではきつい。GASからGoogle Fontsで筆文字の画像を生成する?
-
画像をバイナリデータに変換→e-Paperに表示するためにはBMP形式にしないといけない。
-
BMP形式の画像はGyazoやImgBBにはアップロードできない。

解決した。
-
PythonのPillowライブラリで筆文字画像作成
→Cloud Runにデプロイしたサーバで実行 -
画像をバイナリデータに変換
→上記のサーバで処理 -
BMP形式の画像はGyazoやImgBBにはアップロードできない。
→GoogleのFirebaseのStorageにアップロード

結局以下のようになった。
①. 自分の好きな2文字をe-Paperで表示する。
(LINEのメッセージをもとにCloud Runで処理)
②. 「かっこいい」、「かわいい」など抽象的なイメージから元号をAIが考え、e-Paperで表示する。
(LINEのメッセージをChatGPTに入力し、出力結果をCloud Runで処理)
③. 入力画像をもとにイメージにあった元号をAIが考え、e-Paperに表示する。
(LINEからImgBBに画像をアップロードし、そのURLをChatGPTに入力し、出力結果をCloud Runで処理)
↓
Cloud Runでは入力された文字を、PythonのPILライブラリで筆文字画像に成形してモノクロのbmpファイルをFirebaseのStorageに保存します。
↓
FirebaseのStorageに保存したbmpファイルを同じくFirebaseのRealtime Databaseに流します。
↓
さらにFirebaseのREST APIを使ったストリーミング機能により、画像の更新があったタイミングでRaspberry Pi Pico WはFirebaseのRealtime Databaseの値を取得し、e-Paperに画像を表示します。
ざっとこんな感じの流れです。
Cloud RunもFirebaseも、そもそもPythonでコードを書くことも初めてだったのでChatGPTのOpenAI o1に頼ってなんとか制作することができました。

筆文字のフォントは以下を使用。
JIS第一水準漢字2965字が収録されているらしい。

小さなアウトプットあまりできなかった。
以下の記事にまとめました。