Raspberry Piで赤外線リモコンを中継して他の機器を操作するには

家電製品を操作するリモコン。普段使わないボタンってありますでしょうか?

手元のチューナのリモコンは、「チューナー電源」「チューナー音量」のボタンの他に、「TV電源」「TV音量」といったボタンがありますが、普段は使っていません。

この普段使わないボタンで、TVではなく別の機器・・・・バースピーカーの電源や音量の操作ができれば便利かと思いまして。

その願いの実現のため。Raspberry Piを使って、任意のリモコンの赤外線を受信後、別のリモコンの信号をRaspberry Piから送信するようなシステムを構築してみたいと思います。


Raspberry Piの赤外線受信/送信、受信後のコマンド実行設定

使用する機器

Raspberry Pi

GPIO端子のピンヘッダがはんだ付け済みのRaspberry Pi Zero WHを使用しましたが、どの機種でも大丈夫かと思います。

赤外線受信/送信ユニット

リモコン信号の送受信にlircを使用しますが、基本的にGPIO端子に赤外線リモコン受信モジュールと赤外線LEDを取り付ければ大丈夫のようです。

上記のセンサーユニットは送信用の赤外線LEDを3つ搭載しているため、部屋の隅々まで赤外線が送信されます。さらに送信時に赤色のLEDが光るため、動作を目視で確認可能です。

また赤外線LED/受信モジュールの他に、汎用的なボタンやセンサー(温度、湿度、気圧、光(照度))が付いていますので、Raspberry Piを赤外線リモコン以外の目的、たとえばお部屋の温度の確認・記録等に併用が可能です。具体的にこちらの記事になります。

OS

Raspbianを使用させて頂きました。

初期設定は宜しければこちらの記事を御覧ください。


lircd, irexec設定手順

Raspberry Pi設定の全体的な流れは以下になります。

  1. Linux赤外線リモートコントロール・デーモンlircd(Linux Infrared Remote Control Daemon)をインストールします。
  2. リモコンのボタン(赤外線信号)に名前をつけながら記録、リモコンのconfファイルを作成します。
  3. 赤外線信号を受信した時の動作を決めて、irexecのconfファイルを作成、irexecデーモンを実行します。

lircインストール

  1. /boot/config.txtを変更して、lircドライバを有効にします。
    sudo vi /boot/config.txt

    51行目付近、dtoverlay=lirc-rpi行を有効にして、さらに送信/受信用のGPIOピンを指定します。

    dtoverlay=lirc-rpi
    dtparam=gpio_out_pin=13
    dtparam=gpio_in_pin=4

  2. lircをインストールします。
    sudo apt-get install lirc
  3. lirc_options.confを変更します。
    sudo vi /etc/lirc/lirc_options.conf

    driverをdefaultに変更、さらにdeviceを指定しました。

    #driver          = devinput
    driver          = default
    #device          = auto
    device          = /dev/lirc0

  4. lircdサービスを有効にします。
    sudo systemctl enable lircd
  5. 再起動して設定変更を反映します。
    sudo reboot
  6. lircdサービスが動作していることを確認します。
    sudo systemctl status lircd

driverがdevinputの場合、lircd実行時にエラーが表示されて、うまく動かない感じでした。defaultの場合、エラー表示無く動作しますが、赤外線データはraw形式で記録する必要がある感じです。(hex形式はエラーが出て記録できませんでした)


lircd(赤外線受信デーモン)設定

リモコンのconfファイルはこちらからダウンロードできるようです。

ダウンロードしたconfファイルは、/etc/lirc/lircd.conf.d/ディレクトリにコピー後、lircdサービスを再起動すると有効になるようです。

以下、自分でconfファイルを作成する手順になります。

リモコンを登録する際、ボタン(赤外線信号)に名前を付ける必要があります。あとでirexecサービスを使用する都合から、予め用意されているキー/ボタン名を付けようと思います。

次のコマンドで、キー/ボタン名の一覧を表示できます。

irrecord -l

たとえばチューナーのリモコンの場合、次のようにキー/ボタン名を割り当ててみました。ボタンは49個もあるのですね・・・。

チューナーリモコンのirrecordマッピングの例

No.ボタン名マッピング
1電源KEY_POWER
2画面切換KEY_SELECT
3TV電源KEY_POWER2
4TVチャンネル先KEY_NEXTSONG
5TVチャンネル前KEY_PREVIOUSSONG
6TV音量増KEY_VOLUMEUP
7TV音量減KEY_VOLUMEDOWN
8TV消音KEY_MUTE
9TV入力切換KEY_APPSELECT
10早戻しKEY_REWIND
11再生/一時停止KEY_PLAY
12早送りKEY_FORWARD
13KEY_PREVIOUS
14停止KEY_STOP
15KEY_NEXT
16ホーム/現在番組KEY_DASHBOARD
17情報KEY_INFO
18メニューKEY_MENU
19戻るKEY_ESC
20KEY_UP
21KEY_DOWN
22KEY_LEFT
23KEY_RIGHT
24決定KEY_ENTER
25AVeLKEY_TV2
26テレビKEY_TV
27番組表KEY_EPG
28データdKEY_DATABASE
29チャンネル先KEY_CHANNELUP
30チャンネル前KEY_CHANNELDOWN
31字幕KEY_SUBTITLE
32音声切換KEY_AUDIO
33番号入力KEY_NUMLOCK
341KEY_F1
352KEY_F2
363KEY_F3
374KEY_F4
385KEY_F5
396KEY_F6
407KEY_F7
418KEY_F8
429KEY_F9
4310KEY_F10
4411KEY_F11
4512KEY_F12
46KEY_F13
47KEY_F14
48KEY_F15
49KEY_F16

リモコンの登録手順

  1. lircdサービスを停止します。
    sudo systemctl stop lircd
  2. irrecordコマンドを実行します。-fオプション付き(Raw記録モード)で実行しました。
    irrecord -d /dev/lirc0 -f -H default

  3. Enterを押すと、環境光が測定されます。
  4. リモコンの名前を入力します。<メーカー名>_<リモコンに書いてある型番>を入力してみました。
  5. リモコン信号のギャップ測定の説明が表示されます。次のような内容です。
    • リモコンのボタンをランダムに押しますが、1つのボタンは1秒くらい押します。ドット(.)が10個でると押しすぎです。
    • ドット80個で1行、合計2行出るくらいまで、異なるボタンを押して下さい。
  6. エンターキーを押して、ギャップ測定を開始します。ドットが10個を超えない範囲で、リモコンのボタンを1つずつ変えながら押して行きます。
  7. ボタン名を入力します。電源ボタンとして、KEY_POWERを入力しました。
  8. 「Now hold down button “<ボタン名>”」が表示されたら、リモコンのボタンを押します。
  9. 13番~14番を繰り返して、ボタンを登録してゆきます。
  10. 最後にエンターキーのみ入力すると、10番で入力した<リモコン名>.confファイルが作成されます。
  11. 作成したconfファイルを/etc/lirc/lircd.conf.dディレクトリにコピーします。
    sudo cp <リモコン名>.conf /etc/lirc/lircd.conf.d/

  12. devinput用のconfファイルはリネームしておきました。
    sudo mv /etc/lirc/lircd.conf.d/devinput.lircd.conf /etc/lirc/lircd.conf.d/devinput.lircd.conf.bak
  13. lircdサービスを起動します。
    sudo systemctl restart lircd

以上でリモコンの登録が完了しました。


赤外線の受信確認

irwコマンドで、赤外線信号の受信確認が可能です。

irw


赤外線の送信

irsendコマンドで、登録した赤外線を送信できるようです。

irsend SEND_ONCE <リモコン名> <ボタン名>

Raspberry Piで家電製品を操作したい場合、こちらのコマンドを実行するかたちです。


irexec設定

ここからは、Raspberry Piで赤外線を受信して、コマンドを実行する設定になります。

/etc/lirc/irexec.lircrcファイルにリモコンのボタンとコマンドの対応を書いておき、irexecデーモンを実行することで、リモコンのボタンで好きなコマンドを実行することができるようです。

最初に~/.config/lircrcファイルを作成、irexecコマンドを実行しながら動作を確認し、設定が完成したら/etc/lirc/irexec.lircrcにコピーすれば、設定中のサービスの再起動は必要無さそうです。

  1. lircrcファイルを作成します。
    vi ~/.config/lircrc

    たとえば次のような内容です。

    begin
    prog = irexec
      button = KEY_POWER
      config = echo "Powerボタンが押されました"
    end
    
    begin
      prog = irexec
      button = KEY_F13
      config = echo "青ボタンが押されました"
    end
  2. irexecコマンドで動作を確認します。
    irexec

  3. Raspberry Pi起動時に、irexecが自動起動するようにする場合、/etc/lirc/irexec.lircrcファイルを作成します。
    sudo vi /etc/lirc/irexec.lircrc

    チューナーの「TV電源」ボタンが押されたら、バースピーカーの「電源」赤外線を送信するようにしました。

    begin
      prog = irexec
      button = KEY_POWER2
      config = /usr/bin/irsend SEND_ONCE yamaha_FSR77 KEY_SOUND
    end
  4. systemctlでirexecサービスを有効にします。
    sudo systemctl enable irexec --now


irexecサービスを有効にしましたので、Raspberry Piを再起動しても、リモコンの受信→コマンド実行が動作するかと思います。

普段使わないリモコンのボタンにRaspberry Piのシャットダウン(/sbin/halt)を割り当ててみましたが、リモコンを使ってちゃんとシャットダウンできました。

もしも使ってない余ったリモコンがありましたら、たとえばGPIOに接続した機器を動かしたり、カメラで撮影したり等、Raspberry Piのコントロール用として使用するのも面白いかもしれませんね。

スポンサーリンク

フォローする

スポンサーリンク