LoginSignup
21
21

More than 5 years have passed since last update.

Raspberry PIでHDMI接続したテレビの電源をON/OFFしたりする

Posted at

Google Homeとかに話しかけてテレビのモニタつけて必要な情報を出したりするの憧れますよね?
というわけで、Docker経由でラズパイでHDMI接続したテレビの電源をON/OFFしてみたときのメモ。

そもそもどうやる?

Docker云々以前にそもそもどうやってやるのかですが、HDMIのCECって規格を使えばできるみたい。ChromeCastとかAppleTVも裏側はこれ使ってるみたいです。

cec-client を入れてやればラズパイからも簡単に操作できます。詳しくは下記記事が参考になったので参照

CECが使えるDocker環境の構築

さて、実機で動かす時はraspbian入れてればcec-utilsを入れるだけで動作するのですが、Docker上ではライブラリ不足で怒られます。
そのため、下記のようにlibraspberrypi-binも入れてやる必要があります。

FROM raspbian/stretch

MAINTAINER koduki

RUN set -x ¥¥
&& apt-get update -y ¥¥
&& apt-get install -y libraspberrypi-bin cec-utils

色々回り道したけど、普通にこれが楽でした。

権限を付与してDockerを起動

続いてDokcerの起動ですが普通に起動してcec-clientを実行しても下記のようなエラーが出ます。

root@88dadb99d05e:/app# echo "on 0" | cec-client -s
* failed to open vchiq instance

これは文字通りvchiqへの権限がないからです。vchiqってカメラモジュールじゃなかったけ? とそこはかとない疑問はあるのですがなんか共有してるんでしょう。HDMIだからビデオ機能の一部なのかな?

さておき

docker run -it --device=/dev/vchiq koduki/rpi-base /bin/bash

or

docker run -it --privileged koduki/rpi-base /bin/bash

で問題なく動作します。privileged付けるよりはdevice=/dev/vchiqのが正当ですかね。

テレビを操作してみる

では、準備するが整ったところで具体的な操作です。

電源ON

$ echo "on 0" | cec-client -s

電源OFF

$ echo "standby 0" | cec-client -s

HDMIに入力切替

$ echo 'as 0' | cec-client -s 

信号のチェックと送信

下記でリモコンとかで捜査した時にどんな信号が流れるかを確認できます。

cec-client -m -d 8 -b -r

信号を直接送るのはこちら。入力切替はこの手順で紹介してることが多いですね。

echo "tx 4F:82:10:00" | cec-client -s

私も最初は下記のコマンドでやってたんですが色々ガチャガチャやってるうちに何故か同じコマンドで受け付けなくなったので上記のasを使っています。

まとめ

とりあえずDocker経由でcec使ってテレビのオンオフができるようになりました。
これで、Google Homeとラズパイを連携させてやれば色々できそうですね!

それでは、Happy Hacking!

21
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
21