Open9

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

VanVan

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

VanVan

構成イメージ

①指定した漢字を表示する

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に表示

VanVan

むちゃくちゃ課題ある。

  • PythonのPillowライブラリで筆文字画像作成→Picoではきつい。GASからGoogle Fontsで筆文字の画像を生成する?

  • 画像をバイナリデータに変換→e-Paperに表示するためにはBMP形式にしないといけない。

  • BMP形式の画像はGyazoやImgBBにはアップロードできない。

VanVan

解決した。

  • PythonのPillowライブラリで筆文字画像作成
    Cloud Runにデプロイしたサーバで実行

  • 画像をバイナリデータに変換
    上記のサーバで処理

  • BMP形式の画像はGyazoやImgBBにはアップロードできない。
    GoogleのFirebaseのStorageにアップロード

VanVan

結局以下のようになった。

①. 自分の好きな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に頼ってなんとか制作することができました。