はじめに
RaspberryPiのHDMI出力をTVに接続してTVの簡単な操作を行う方法をメモする
ハード関係の準備
- RaspberryPiの準備(おそらくどれでも使える。今回は2B(古い)を使った。OSはbuster)
- RaspberryPiのHDMI出力をTVのHDMI入力に接続どの入力でもOK)
- TV側のHDMI連動制御の設定が有効であることを確認(TVメーカで本機能の呼び方ががまちまち。”なんとかリンク”の機能を有効にする)
cec-utilsのインストール
sudo apt install cec-utils
CEC(Consumer Electronics Control)について超ざっくりの説明
CECはHDMIの規格の一部で、HDMIで接続した機器間でコマンドをやり取りしてシステム制御を行う機能を実現するもの。HDMI-IFにはCECのためのポートが1ピン用意されている。
CECには、定義済みのコマンドとリモコンコマンド・パススルーという二種類が存在する。TVの電源を入れたり、アクティブになったソースに自動的にTVの入力を切り替えたりすることは前者のコマンドで定義されているが、TVの入力ソースや放送受信CHを切り替える場合には、後者のコマンドを使う必要がある(前者にはこれらの機能がコマンド定義されていない)。
cec-utilsを用いた具体的な操作方法
おまじない(数字)の意味については機会があれば追記したいが、今回は割愛。
今回の条件に限ってのおまじないになっていることに注意
以下のコマンドをRaspberryPiのシェル上で入力するとTVが所定の動作をする(はず)
TVの電源操作(トグル)
# echo "txn 10:44:40"|cec-client -s
現在の電源状態と違う状態になる(現在ONならstandbyに、現在standbyならONに)
リモコンには電源ON/OFFを個別に指定するコマンド(ボタン)がない
TVのCH切替(番号指定)
# echo "txn 10:44:21"|cec-client -s #1chにする
# echo "txn 10:44:22"|cec-client -s #2chにする
# echo "txn 10:44:24"|cec-client -s #4chにする
# echo "txn 10:44:25"|cec-client -s #5chにする
TVのCH切替(UP/DOWN)
# echo "txn 10:44:30"|cec-client -s #CH-UPする
# echo "txn 10:44:31"|cec-client -s #CH-DOWNする
TVの入力切替(インクリメンタル・巡回)
# echo "txn 10:44:34"|cec-client -s #次の入力を選択する
TVの音量調整(UP/DOWN)
# echo "txn 10:44:41"|cec-client -s #音量1段Up
# echo "txn 10:44:42"|cec-client -s #音量1段Down
コマンド参考先
パラメータを選択するとCECのコマンド列(おなじない)を出力してくれるありがたいサイト
上記以外の機能・コマンドのおまじないを試してみたい場合はこのサイトがとても参考になる
CEC-O-MATIC
最後に
cec-clientをshell上から操作する方法は、とっつきやすいがオーバーヘッドが大きく、はっきり言って遅い。
cec-clientをインタプリタモードで動かして、その中でコマンドを打ち込めばそれなりに高速に動くが、
スクリプトで自動化するような用途には向かない。
より快適で使い勝手よく扱いたい場合は、Pulse-Eight社が公開しているlibCECを利用し、C/Python3でコードを書いたほうがよい(個人的見解)
なお、利用の際はライセンスをご確認のこと