これにRaspberryPiをつなげて、framebuffer を使って描画してみる。
環境
- Raspberry Pi WH
- Raspberry Pi OS Lite (2024-07-04-raspios-bookworm-armhf-lite.img.xz)
- Elecrow 5 Inch 800x480 TFT Raspberry Pi Touch Display with GPIO Backlight Control
下準備
$ sudo apt install fbi
$ sudo apt install imagemagick
$ sudo apt install fbcat
操作
適当に作った heartbeatbg2.png を使って、
$ sudo fbi -d /dev/fb0 -a /home/pi/heartbeatbg2.png
とすると以下のようにエラーが出た。
using "Noto Sans Mono-16", pixelsize=16.67 file=/usr/share/fonts/truetype/noto/NotoSansMono-Regular.ttf
ioctl VT_GETSTATE: Inappropriate ioctl for device (not a linux console?)
これは ssh で操作していたので、以下のようにターミナルを指定すると問題なく表示された。
$ sudo fbi -T 7 -d /dev/fb0 -a /home/pi/heartbeatbg2.png
-T 7 の後ろの数字は1とか2とかでも問題ありませんでした。
HDMIケーブルを5inLCDに繋ぎ変えて表示。
以下のようにすると framebuffer に表示しているイメージを画像ファイルにキャプチャできる。
$ sudo fbgrab -c 1 -d /dev/fb0 -i image.png
キャプチャしたもの。
下に余計な情報がついているのでそれを表示しなくして、時刻のダミー文字列を合成してを表示してみる。
$ convert -font /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf -pointsize 130 -fill "#C00000" -draw "text 520,350'60'" heartbeatbg2.png image2.png ; convert -font /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf -pointsize 45 -fill "#FFAA00" -draw "text 60,450'2024/07/08'" image2.png image3.png ;convert -font /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf -pointsize 160 -fill "#FFFFAA" -draw "text 40,150'22:25:35'" image3.png image4.png ; sudo fbi -T 2 -d /dev/fb0 -noverbose image4.png
正しい時刻を取得するようにして、無限ループ。 なお HeartBeat は単にかっこつけるだけのランダム数字。
#!/bin/bash
while true
do
convert -font /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf -pointsize 130 -fill "#C00000" -draw "text 520,350'$((RANDOM % 50 + 30))'" heartbeatbg2.png image2.png
convert -font /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf -pointsize 45 -fill "#FFAA00" -draw "text 60,450'`date +"%Y/%m/%d %A"`'" image2.png image3.png
convert -font /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf -pointsize 160 -fill "#FFFFAA" -draw "text 40,150'`date +"%H:%M:%S"`'" image3.png image4.png
sudo pkill fbi
sudo fbi -T 1 -d /dev/fb0 -noverbose image4.png
done
2024/07/10 追記:
sudo pkill fbi
を追加しました。
fbi は起動すると終了せずずっとプロセスに残っており、これが無い状態だとしばらくすると fbi プロセスばっかりでシステムがハングしてしまいました。
RaspberryPi WH だとノーウェイトで2秒ぐらいでループ。まあこれでいいかな。
2024/7/10 追記:
ちらつきが激しかったり、convvert などの負荷が高かったりするので別のやり方で作り直しました。
「RaspberryPi で pygame で x11 を使わず(?) 遊ぶ」
https://qiita.com/nanbuwks/items/96538470dacd3fb217de