以前コラム「第7回 Raspberry Piで家電をリモートコントロールしよう」や「番外編 テレビのリモコンでRaspberry Piをコントロールしよう」でも紹介しましたが、Raspberry Piで赤外線の信号を送受信できるようにすれば、リモコンの信号を学習したり、Raspberry Piから赤外線の信号を送信して家電製品をコントロールしたり、リモコンでRaspberry Piをコントロールすることができるようになります。今回は実際にパーツを用意して、赤外線でリモコンの信号を送受信する実験をしてみたいと思います。

使用パーツ
・赤外線リモコン受信モジュール
・赤外線LED
・抵抗 220Ω
・ブレッドボード
・ジャンパーワイヤー(メス-オス)4本
・ジャンパーワイヤー(オス-オス)1本

※今回は簡易的にGPIOポートに直接赤外線LEDを接続します。流せる電流が小さく赤外線の光量も弱めのため、コントロールしたい家電製品の方向に向けて近くで使用してみてください。

配線図は以下のようになります。
赤外線リモコン配線図


 ◆ STEP1 セットアップ 

LIRCをインストールします。
$ sudo apt-get install lirc

/boot/config.txt ファイルに下の行を追加します。
dtoverlay=lirc-rpi,gpio_in_pin=17,gpio_out_pin=18
保存したらRaspberry Piを再起動します。


 ◆ STEP2 赤外線が受信できるかテスト 

まずはちゃんと赤外線の信号が取り込めるかテストします。一旦LIRCを終了させ、以下のコマンドを実行します。「space xxxx」「pulse xxx」と大量に表示されれば、何らかの信号が来ています。CTRL+Cで終了します。
$ sudo /etc/init.d/lirc stop
$ mode2 -d /dev/lirc0

 ◆ STEP3 リモコンを学習する 

問題無ければリモコンのボタンを学習していきましょう。以下のコマンドを実行したら、まずはじめにENTERキーを2回押します。
$ irrecord -n -d /dev/lirc0 lircd.conf

  :
Press RETURN now to start recording.
まずは無作為にリモコンのいろいろなボタンを それぞれ1秒以上 押し続けます。反応するとドット(.)が表示されます。
  :
Please keep on pressing buttons like described above.

途中でメッセージが出てきますが続けてください。かなり根気がいる作業です。
  :
以下のメッセージが出たら、ボタンを1個1個学習させていきます。
Please enter the name for the next button (press <ENTER> to finish recording)
これから押すボタンの名前を入力します。
Now hold down button "xxxxxx".
そのボタンを押してください。
  :
以降、この繰り返しです。学習させたいボタンを記録していきます。このループを抜けるにはボタン名を入力するところでENTERキーを押してください。
  :
Press RETURN to continue.
最後に任意の同じボタン連打します。ENTERキーを押したら、リモコンのボタンを連打してください。
  :
Successfully written config file.


これで設定ファイル lircd.conf が生成されました。テキストエディタなどで開いてみてください。nameのところを機器の名前に書き換えておくと便利です。
begin remote

  name  TV
  bits           16
  flags SPACE_ENC
  eps            30
  aeps          100

  header       3439  1769
  one           407  1324
  zero          407   458
  ptrail        408
  pre_data_bits   32
  pre_data       0x40040100
  gap          74639
  toggle_bit_mask 0x0

      begin codes
          power             0xBCBD
          up                0x0405
          down              0x8485
      end codes

end remote

このファイルを /etc/lirc/ にコピーします。
$ sudo cp lircd.conf /etc/lirc/.

続いてrootで設定ファイル /etc/lirc/hardware.conf を編集します。変更するのは以下の4行です。
LIRCD_ARGS="--uinput"
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

LIRCを再起動します。
$ sudo /etc/init.d/lirc restart

サンプルファイル
・17ボタンリモコンの設定ファイルの例 lircd-r17.conf
・21ボタンリモコンの設定ファイルの例 lircd-r21.conf
・20ボタンリモコンの設定ファイルの例 lircd-r20.conf


 ◆ STEP4 正常に学習できたか確認 

正常に学習できたか確認します。以下のコマンド(irw)を実行しリモコンのボタンを押すと、リモコン名やボタン名が表示されれば成功です。CTRL+Cで終了します。
$ irw
000040040100bcbd 00 power TV
0000400401000405 00 up TV
0000400401008485 00 down TV

 ◆ STEP5 Raspberry Piから家電製品をコントロール 

これで準備が整ったので、Raspberry Piから家電製品をコントロールしてみましょう。赤外線LEDをコントロールしたい機器に向けて、irsendコマンドを実行します。
irsend モード 機器名 ボタン名
実行例
$ irsend SEND_ONCE TV power  ←TVのpowerボタンの信号を1回送信する
$ irsend SEND_START TV up   ←TVのupボタンの信号の送信を開始する
$ irsend SEND_STOP TV up    ←TVのupボタンの信号の送信を終了する

 ◆ STEP6 リモコンでRaspberry Piをコントロール 

先ほどとは逆に、リモコンのボタンを押してRaspberry Piをコントロールすることもできます。リモコン操作で任意のコマンドを実行できるので、GPIOポートに接続した機器を操作したり、サウンドを鳴らしたり、電源ボタンでシャットダウンすることも可能です。

rootで /etc/lirc/lircrc ファイルを作成し保存します。以下はPOWERボタンでRaspberry Piをシャットダウンし、UP/DOWNボタンでサウンドを再生する例です。button=がボタン名、config=が実行するコマンドです。
begin
    remote = TV
    prog = irexec
    button = power
    config = sudo shutdown -h now
end
begin
    remote = TV
    prog = irexec
    button = up
    config = aplay -q /home/pi/python_games/match4.wav
end
begin
    remote = TV
    prog = irexec
    button = down
    config = aplay -q /home/pi/python_games/match5.wav
end

設定を反映させるためにLIRCを再起動します。(restartではなくstop/startで)
$ sudo /etc/init.d/lirc stop
$ sudo /etc/init.d/lirc start

これでRaspberry Pi(の赤外線リモコン受信モジュール)に向けてリモコンのボタンを押せば、そのボタンに応じてRaspberry Piをコントロールできます。コマンドを実行する方法ならば、いろいろと活用ができそうですね。ぜひRaspberry Piでリモコンを活用してみてください。


 ◆ 赤外線リモコン送受信実験キット販売中! 

この記事で紹介したパーツは、こちらのサイトで販売しております。ブレッドボードから電子パーツまで全て揃っていますので、Raspberry Piが動いている環境であれば、この実験キットだけで実験ができます。

商品ページ:赤外線リモコン送受信実験キット