Raspberry PiでSTBやDigital Signageを作る。

下記投稿をHDMI-CEC対応しTVリモコンでも操作できるように改良してみた。

AB Shutter 3 を使って Raspberry PI コンソール・アプリをリモート操作する。

HDMI-CEC対応によりセットトップボックス(STB)やデジタルサイネージなどを作ることもできる。

【画像表示】
我が家の場合、Raspberry Pi Zero 2Wにより最新の広報が公開されていたら自動でDL(DL後にLEDが点滅しておしえてくれる)していつでもTVで見れるようにしている。

Raspberry Pi Zero 2Wはメモリが512MなためGUIは無理だが画像表示ぐらいなら十分可能だ。fbiという画像表示コマンドが公開されていてフレームバッファを直接利用することで画像表示を可能としている。

[イントール]
sudo apt install fbi

[30秒間隔で画像を自動切替する例]
fbi -t 30 -noverbose -a *.png

【音声出力】
OpenJTalkなどで作成した音声ファイル(.wav)があればaplay -q xxx.wavでTVを喋らせることもできたりして面白い。帰宅したらTVを自動で電源オンし入力ソースを自動で切替して、

  ”おかえりなさいませ!ごしゅじんさまぁ~”

とか画像つきで...誰かがやりそう!(笑)

サウンドカードの設定はaplay -lで表示された[vc4-hdmi]のcard番号がalsa.confのdefault設定になっていることを確認し違っていたら書き換えるだけ。

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0

[/usr/share/alsa/alsa.conf]

defaults.ctl.card 0
defaults.pcm.card 0

【HDMI設定】
HDMI-CEC制御のためにRaspberry Pi側には次の設定が必要。希望の動作になるよう組み合わせて設定すれば良い。

【自動実行】
自動実行させる場合はリモコン操作がローカルコンソールのみ対応なので.profileなどから実行する必要がある。

【設定例】

各イベントは下記のように、標準入力へ出力する文字列、HDMI-CEC制御アクション名、コマンドラインの3種類のパラメタが複数同時に設定可能となっている。

専用リモコンではTVの電源を入れたり入力切替も可能であるがTVリモコンの場合は入力切替後にのみ操作可能となる。

AB Shutter 3は電池持ちが悪く不安定なのと2ボタンしかないのでBOXPUTなどのbluetoothリモコンがお勧め。

【HDMI-CEC制御】
HDMI-CEC制御はlibCECを利用しており下記ファイルについてはlibCECのファイルの一部であるが、version.hのみMakeでコンパイルできるよう若干の修正を入れている。インストールは下記のように行う。

sudo apt-get install cec-utils -y

Pulse-Eight/libcec

libcec/cec.h
libcec/cecloader.h
libcec/cectypes.h
libcec/version.h

【修正履歴】
2025-01-10
libcec.hにSetInactiveSource()を追加。

2023-05-09
BOXPUTリモコンのOKボタン(select=)に対応。AB Shutter 3 は不安定なのでお勧めではないがBOXPUTリモコンは動作も安定していてお勧めだ。

2023-05-06
AB Shutter 3 の小さいボタンのコードの規定値をKEY_ENTERからKEY_VOLUMEDOWNに変更。あとHDMIアクション名からremote.confの[control]の設定を参照&実行できるように改良。

2023-05-05
対応デバイス名をコードで固定設定していたのをremocon.confで定義できるよう変更。これでプログラムを変更することなくlinuxで扱える様々なinputデバイスに対応することが出来るようになった。

remocon.confのデバイス定義は次のように行う。

設定は、デバイスを接続した後、cat /proc/bus/input/devicesにより表示される N: Name=… の先頭文字と最終文字を’=’で分けて指定する。
例えば、Name=”AB Shutter3 Keyboard”の場合は、

のように設定すればOKだ。

2023-05-04
Aliexpressで購入可能なBOXPUTというbluetoothリモコンに対応。

ワイヤレスリモコン,5.0 GHz,2.4インチ,ジャイロスコープ付き,Android TV,ボックス,PC用

この対応に伴いremocon.confをより汎用的な記述方法へ変更。

2023-05-01
TVの入力切替時に表示される名前が設定できるように改良。

2023-04-30
libCECの使い方が正しくなかったため修正。

2023-04-25
Bluetoothデバイスの検索を一定間隔でポーリング処理していたがCPU使用率が若干高めであったためinotify-apiを使って効率よく処理できるように改良してみた。ちなみにダイソーのAB Shutter3は2個のデバイスが作成されるがinotify-apiではそのうちの1個の名前しか返さないためinotify-apiは同期をとるためだけに利用している。またスレッドの挙動によるタイミング・バグがあったため修正。

【プログラム】