あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

壁掛けラズピッピに7色電子ペーパーをつけてcurlで書き換え対応にしてみた

先日壁掛けにしたラズピッピを、そのまま本体が見えるようにしていても良かったんですが、そういえば前に買った7色電子ペーパーが持て余し気味だったので、Mini HAT HackerでGPIOを増やした上で取り付けてみました。

akkiesoft.hatenablog.jp

akkiesoft.hatenablog.jp

結果はこちら。いいですね。

f:id:Akkiesoft:20211029203045j:plain

問題は何を表示させとくか……ですけど、Minecraft Overviewerのマップをランダムに表示させとくと地味におもろいということが前にわかっていたので、それをやることにします。

初期のスクリプトはこんな感じでした。

PX=$((($RANDOM % 10000) - 3000))
PY=$((($RANDOM % 1000) - 1000))
URL="https://teocraft.toshi-a.net/#/${PX}/${PY}/40/-2/teocraft%20-%20overworld/normalrender"
# echo $URL

chromium-browser --headless --disable-gpu --screenshot --window-size=600,448 --run-all-compositor-stages-before-draw --virtual-time-budget=10000 $URL

screenshot.pngが出力されるので、あとInky Impressionの画像出力のサンプルプログラムに食わせればOKです。

しかし、chromium-browserをLiteで動いているPi3A+に入れようとすると、X11やらなんやらが依存関係で含まれて大事になります。512MBしかメモリがない環境でやらせるにはちょっと重いですしローカルでやるのは良くないです。

そこで、自宅で適当に動いているDocker環境で生成してもらうことにします。Docker環境だとヘッドレスなChromiumのコンテナがあるっぽいので、これを使っていきます。まあ、これを3A+で動かすのも手かもですが、どうせまたアーキテクチャの違いとかなんとかでハメられるのがオチなので試してすらいません。

github.com

Dockerでやるときはこんな感じになりました。screenshot.pngがカレントディレクトリに吐かれるので、これを何らかの手段でラズピッピに送れば良さげです。なんとなくcurlで送りたいなと思ったので、先にcurlコマンドを書きました。

PX=$((($RANDOM % 10000) - 3000))
PY=$((($RANDOM % 1000) - 1000))
URL="https://teocraft.toshi-a.net/#/${PX}/${PY}/40/-2/teocraft%20-%20overworld/normalrender"
# echo $URL

docker container run -it --rm -v $(pwd):/usr/src/app zenika/alpine-chrome --no-sandbox --screenshot --window-size=600,448 --run-all-compositor-stages-before-draw --virtual-time-budget=10000 $URL

curl -X POST -F file=@./screenshot.png http://curtain.local:7777/upload

というわけで、curlで送られた画像ファイルを受け付けるスクリプトをFlask組んでみました。FlaskのドキュメントのサンプルとInkyのサンプルガッチャンコしただけですけど。ファイル保存しないのでSDカードにやさしそうでいいですね。

gist.github.com

そして出来上がったのはこちら。

www.youtube.com

日中適当にタイマーで更新して、ランダムなマップを見て面白いのを撮って上げたりとかして遊べたら楽しいかなーとか思っています。あと、夜はミク画像を手動で投げて鑑賞とかで。

以上、電子ペーパーの書き換えもAPI的にしたら使い勝手良くなるかも的な小ネタでした。