Raspi用表示装置4種を試す -2.6-

 せっかくここまでやったので、技書博向けに簡単な電子POPを作って見たいところだ。

 とりあえず、keynoteでサイズを480x320にしてサンプル画像を作り、pngフォーマットで書き出して表示してみた。ご覧のようにパネルが名刺サイズより小さいので、小さい文字にするとほとんど読めない。表示できるものは、かなり限られてきそうだ。

 それ以外にも、RaspiとLCDパネルの組み合わせは、かなり電池を食いそうな構成なので、電源の用意されない同人誌即売会の会場で使うのは難しいかもしれない。かなり大容量のバッテリでの運用を行う必要がありそうだ。

 電子POP本体のほうは、簡単なシェルスクリプトを書いて、画面の左右のタッチで移動、タイムアウトで自動でスライドショウするものができるとよさそう。

 タッチイベントの情報は連続して出てくるので、それをシェルスクリプトで捕まえて操作するのは結構めんどくさい作業になる。

 今回は画面の左右のどちらが押されたかを見るので、Xの値が800以上だったら次へ、500以下だったら前へという程度の確認で良さそう。ただ、Xの値は、触れた時、ドラッグしている時、離した時の三回表示されてしまう。
 タッチだけ検出すればよいのなら、BTN_TOUCHのvalueが0になった時だけ拾えばいい。このイベントは、操作中に一回だけしか出てこない。

Event: time 1574233334.881715, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1574233334.881715, type 3 (EV_ABS), code 0 (ABS_X), value 1151
Event: time 1574233334.881715, type 3 (EV_ABS), code 1 (ABS_Y), value 272
Event: time 1574233334.881715, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 65351
Event: time 1574233334.881715, -------------- SYN_REPORT ------------
Event: time 1574233334.921721, type 3 (EV_ABS), code 0 (ABS_X), value 1144
Event: time 1574233334.921721, type 3 (EV_ABS), code 1 (ABS_Y), value 271
Event: time 1574233334.921721, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 65349
Event: time 1574233334.921721, -------------- SYN_REPORT ------------
Event: time 1574233334.939853, type 3 (EV_ABS), code 0 (ABS_X), value 1140
Event: time 1574233334.939853, type 3 (EV_ABS), code 1 (ABS_Y), value 270
Event: time 1574233334.939853, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 0
Event: time 1574233334.939853, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1574233334.939853, -------------- SYN_REPORT ------------

 これを利用して、Xの値を最初のものだけ拾い、後に続いて複数出る場合は、"(BTN_TOUCH), value 0"が出るまでバッファを捨てる処理を書いたらうまくいった。

 画像の表示に使っているfbiコマンドは、起動したらしっぱなしになってしまい、自動で終了しない。次に起動すると多重起動になってしまい、メモリを圧迫する。無限にやり続けると、システムの運用に問題が出てしまう。
 表示コンソールからqを送るとfbiは終了する。また、表示にタイムアウトを設定して一回きりの起動とするオプションを付けると表示後終了できる(例: -t 1 -1)。終了はするのだが、正常に終了するとフレームバッファをリフレッシュして黒くしてしまうので、表示していた画像が消えてしまう。
 なかなか、癖が強いコマンドだ。
 仕方がないので、次にfbiコマンドを呼び出す前に、既存のプロセスを強制終了することにする。プロセスを強制終了することで、フレームバッファはリセットされずに表示中の画像を残すことができる。

 $ pkill -2 -f fbi

 fbiでフレームバッファを更新すると、上書き時に画面がかなりチラチラして見にくい。更新前に黒い画面を1つはさむことで、だいぶ状態は緩和したがまだ十分とは言えない感じだ。

        fbi -T 1 -d /dev/fb0 -noverbose blank.png
        fbi -T 1 -d /dev/fb0 -noverbose ${img[0]}

 HDMIを一時的に停止してから画面をリフレッシュし、描画後に表示することでチラチラを抑えてみる。しかし、結果はほとんど変わりなかった。

        echo 1 > /sys/class/graphics/fb0/blank
        fbi -T 1 -d /dev/fb0 -noverbose ${img[0]}
        echo 0 > /sys/class/graphics/fb0/blank

 変則的なサイズで出力させているので、描画する時に画面がチラチラするのは解消できないかもしれない。
 画面のリフレッシュレートを60fpsに指定しているので、これを変更することで緩和できる可能性はある。

 タッチコントロールなしでfbiで紙芝居をさせと、画面もチラチラしないので、こちらのほうが見た目が良さそうだ。blendオプションを使うと、指定した時間で前の画像とブレンドして表示するので、まったくチラチラせずに見やすい表示になる。
 ループ設定もできるので、自動表示はこれだけでできてしまう。タッチコントロールは諦めるべきか。

 本番でfbiだけを使うとすると、こんな感じかな。

pi@raspberrypi:~ $ sudo fbi --noverbose -T 1 -a -t 5 --noonce --blend 1000 001.png 002.png blank.png suna.png

 これを、Raspiの起動時に自動起動しておけばよい。画像ファイルが多くなる場合は、別ファイルにリストしておくこともできる。
 fbiに、外部から表示画像名と操作タイミングが送れればいいのだけど、そこまで手を入れるのはちょっと難しい。

 fbiのマニュアルを見ると、j,kキーの入力でページ遷移ができる機能がある。そこで、別プロセスから、タッチイベントを拾ってコンソールにkey eventを送ってみたけれど、qを送ると終了はできるものの、jkを送ると終了してしまったり反応しなかったりした。

 qで正常終了はできる。

pi@raspberrypi:~ $ sudo perl -e '$chr="q"; require "sys/ioctl.ph";open($hTTY, ">", "/dev/tty1");ioctl($hTTY, TIOCSTI(), $chr)'

 kでは、フレームバッファに画像は表示したまま異常終了してしまう。

pi@raspberrypi:~ $ sudo perl -e '$chr="k"; require "sys/ioctl.ph";open($hTTY, ">", "/dev/tty1");ioctl($hTTY, TIOCSTI(), $chr)'
pi@raspberrypi:~ $ sudo killall fbi
fbi: no process found

 jでは、反応がない。再生は継続される。

pi@raspberrypi:~ $ sudo perl -e '$chr="j"; require "sys/ioctl.ph";open($hTTY, ">", "/dev/tty1");ioctl($hTTY, TIOCSTI(), $chr)'

 pでのポーズも異常終了。

pi@raspberrypi:~ $ sudo perl -e '$chr="p"; require "sys/ioctl.ph";open($hTTY, ">", "/dev/tty1");ioctl($hTTY, TIOCSTI(), $chr)'
pi@raspberrypi:~ $ sudo killall fbi
fbi: no process found

 他にもフレームバッファに描画できるツールがないかと探してみたが、これはというものは見つからなかった。もう、あとはフレームバッファへの直接描画をサポートしているQtで自分で書くとかしかないのかも。それは沼だな。

FIM: Fbi IMproved - Summary [Savannah]
http://savannah.nongnu.org/projects/fbi-improved/

kaihs/fbvs: Simple linux framebuffer image viewer (to be used with fhem)
https://github.com/kaihs/fbvs

jichu4n/jfbview: PDF and image viewer for the Linux framebuffer.
https://github.com/jichu4n/jfbview

aligrudi/fbpdf: A small framebuffer pdf, djvu, epub, xps, and cbz viewer
https://github.com/aligrudi/fbpdf

viu - crates.io: Rust Package Registry
https://crates.io/crates/viu


オリジナル投稿: Raspi用表示装置4種を試す -2.6-|kinneko|pixivFANBOX
https://www.fanbox.cc/@kinneko/posts/666821