ラズパイでテレビを操作する


前提

  • ラズベリーパイとTVをHDMIで繋いでいる
  • テレビがCECに対応している
  • テレビのCEC連動をONにしている(メーカーによって呼び方が違います。東芝のレグザリンク等)

config.txtの編集

以下のコマンドでconfig.txtを開き、hdmi_force_hotplug=1hdmi_ignore_cec_init=1を追記します。

sudo /boot/config.txt
/boot/config.txt
hdmi_force_hotplug=1
hdmi_ignore_cec_init=1

hdmi_force_hotplug=1はラズパイのHDMIがディスプレイ(テレビ)に接続されていない状態で起動すると、NTSC(コンポジット)に切り替わってしまうのを防ぐために、hdmi_ignore_cec_init=1はラズパイが起動時に勝手にディスプレイ(テレビ)がONになるのを防ぐための設定です。

cec-utilsのインストール

以下のコマンドでcec-utilsをインストールします。

sudo apt install cec-utils -y

テレビの操作

基本操作

以下のコマンドでテレビの電源のOn/Off、音量の操作が出来ます。
bash:電源ON
echo 'on 0' | cec-client -s

電源OFF
echo 'standby 0' | cec-client -s
音量を上げる
echo 'volup' | cec-client -s
音量を下げる
echo 'voldown' | cec-client -s

入力切り替え

以下のコマンドで入力機器の情報を取得します。

echo "scan" | cec-client -d 1 -s
出力結果
log level set to 1
opening a connection to the CEC adapter...
requesting CEC bus information ...
CEC bus information   
===================   
device #0: TV
address:       0.0.0.0  
active source: no     
vendor:        Toshiba
osd string:    TV     
CEC version:   1.4    
power status:  on     
language:      jpn


device #1: Recorder 1
address:       2.0.0.0
active source: no
vendor:        Toshiba
osd string:    CECTester ← ラズベリーパイ
CEC version:   1.4
power status:  on
language:      eng


device #5: Audio
address:       1.0.0.0
active source: no
vendor:        Onkyo
osd string:    TX-NR626
CEC version:   1.4
power status:  on
language:      ???


device #B: Playback 3
address:       3.0.0.0
active source: no
vendor:        Toshiba
osd string:    Fire TV Stick
CEC version:   1.4
power status:  on
language:      ???

以下のコマンドで入力を切り替えます。

echo "tx ff:82:30:00" | cec-client -s

ff:82:30.00の値の意味はffが全ての機器から全ての機器です、一桁目は数字かfなら何でも大丈夫です。82は入力切り替えのです。30:00は機器のアドレスになります。今回は上記出力結果のFire TV Stickのaddressが3.0.0.0だったのでドットを除外して二桁ずつに分けてセミコロンをつけて30:00になります。ラズベリーパイの場合だとaddressが2.0.0.0なので20:00です。私の環境ではテレビへの切り替えecho "tx ff:82:00:00" | cec-client -sが効きませんでした。

その他のコードはこちらのサイトで確認できます。

My Accounts