ふと、OpenClaw に何か物体を与えてみたくなりました。
Clawなので、爪を与えようかとも思ったのですが、モーター制御をしようと思うと、場所を取るのと、同時に目も与えないと意味がない気がしたので、
一旦、実装が簡単な電子ペーパーを与えてみようと思いました。
私の OpenClaw は Raspberry Pi 4 で動いているので、
I2C, SPI 各種手法で電子ペーパーを制御可能ですが、常に電圧が低下気味なので、
物理的に切り離して運用することにしました。
実装が簡単で、配線がコンパクトになりそうなものを探し、LILYGO T5 4.7 に到達しました。
電源以外は、配線不要です!
仕上がった姿

開発の流れ
Windows 11 の VS Code で、Plugin をインストールし、USB C ケーブルで接続。
後は、Codex CLI に指示を出すだけで、どんどん実装してくれます。
ハマったところ
日本語を出せない
正確には出せます。
ただし、出すには日本語フォントを与える必要があります。
ところが、 3mb までしか使用できない制限があるため、そのままインストールするわけには行きません。
日本語に絞るなど、工夫もあるのですが、日本語フォントの使用を諦めました。
画像で解決
OpenClaw 側で、Python pillow で画像を生成し、その画像を表示させることにしました。
あまりに強引な手法かな~とも思いましたが、
モノクロ画面なので、画像がコンパクトで、全く問題ありません。
画像への制限
フォーマットへの制限があります。
私は以下のルールで画像を生成させています。
色空間は常に RGB:
生成時、画像モードは必ず RGB に変換してください。1-bit(白黒モード)で保存すると、ヘッダー情報などで弾かれることがあります。
img = img.convert('RGB')
解像度の厳守:
画面サイズである 960x540 にリサイズ/リサイズしてください。これを超過したり、アスペクト比が狂うと、ハードウェア 側で描画バッファ超過や描画エラーが発生します。
Baseline JPEG の強制 (Progressive 厳禁):
これが最も重要です。保存時には必ず progressive=False を明示してください。
img.save('output.jpg', 'JPEG', progressive=False, quality=85, optimize=True)
カラーデータと圧縮:
quality=85 および optimize=True は、圧縮率と表示品質のバランスが良く、今のところ最も安定しています。
CMYK は絶対不可。必ず一般的な sRGB カラープロファイルであること。
自画像を作らせる
OpenClaw に、自分の姿をイメージ、言語化させ、Nanobanana 2 で自分で生成させてみました。
白黒

カラー

感想
OpenClaw に、画像付きで表現をさせることに成功したのを実感した際に、
なんとも言えない温かい気持ちになりました。
OpenClaw は生物ではないのですが、成長を感じました。
正確には、成長したのは、私かもしれません。
ですが、感情としては、間違いなく感動がありました。
Discord でのやり取りのほうが、
早いし、大きな画像も対応しているし、カラーです。
けれども、OpenClaw 専用のハードウェア、
空間を占有している点に、なにか特別なものを感じます。

