Raspberry Pi 2を赤外線リモコンで操作可能にする

2017年3月28日

用意するもの

  • Raspberry Pi 2 Model B
  • 赤外線リモコン受信モジュール PL-IRM2121 (38kHz)
    ※秋月電子で100円くらい。類似品でも可
  • ジャンパワイヤ(メス~メス) 色違いで3個
  • 赤外線リモコン
    ※学習させるので赤外線の出るリモコンなら何でもOK


動作確認環境

  • Raspbian GNU/Linux 8.0 Lite (Jessie)
  • lircd 0.9.0-pre1 ※今回導入します

1.LIRCを導入する

こちらの記事こちらの記事を参考にしました。
Raspberry Pi 2ではLIRCを使うと赤外線送信ができないらしいのですが、今回は受信だけできれば良いのでLIRCを採用しています。
はじめに、lircパッケージを導入します。

sudo aptitude install lirc

/etc/lirc/hardware.confを編集します。

sudo vi /etc/lirc/hardware.conf

hardware.confは以下の内容に変更します。

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"
#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false
#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false
#Try to load appropriate kernel modules
LOAD_MODULES=true
# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"
# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

/boot/config.txtを編集します。

sudo vi /boot/config.txt

以下の内容を追記します。

dtoverlay=lirc-rpi,gpio_in_pin=22

再起動します。

sudo reboot

動作確認です。

lsmod | grep lirc

以下の通りlirc_rpiやlirc_devが認識されていればOKです。

lirc_rpi                7355  3
lirc_dev               10391  1 lirc_rpi
rc_core                17576  1 lirc_dev
ls -l /dev/lirc*

以下の通り存在していればOKです。

crw-rw---T 1 root video 248, 0 Oct 25 22:19 /dev/lirc0

2.GPIOに赤外線センサを接続する

接続は以下のようにします。

ここでは
赤:5V(RasPi側)⇔Vcc(センサ側)
青:GND(RasPi側)⇔GND(センサ側)
黄:IO22(RasPi側)⇔Vout(センサ側)
で接続します。これはPL-IRM2121の場合です。他の赤外線センサを使う場合は仕様書で使用可能な電圧と端子の並びをよく確認してください。
Raspberry Pi側はこのような感じに。

赤外線センサ側はこのような感じに。
仮配線はブレッドボードを使う方が良いと思います。

実は私、電子工作の経験がないので動くには動くけどこの方法が正しいのかよく分かっていません。
配線を間違えるとセンサは簡単におシャカになりますので注意してください。
異常加熱して焦げ臭いニオイがします。
(試行錯誤中に何度かやらかして買い直しました)
では接続できているか確認します。
以下のコマンドで赤外線信号の待機状態になります。

sudo /etc/init.d/lirc stop
sudo mode2 -d /dev/lirc0

赤外線受信モジュールに向けて任意のリモコンのボタンを押すと、赤外線信号が認識されて以下のようなデータがずらずらと出力されます。連打するとどんどん出てきます。

$ sudo mode2 -d /dev/lirc0
space 2556471
pulse 1971
space 1000
pulse 5400
space 964
pulse 1542

リモコン信号の送信に合わせて出力されているようなら接続は成功です。
Ctrl+Cで終了します。

3.リモコンの学習

リモコンを用意して、Raspberry Piに学習させていきます。私は混乱したくなかったので秋月電子にたまたま売っていた300円のリモコンを使いましたが、ご家庭にある普通のリモコンの使わないボタンを流用しても良いと思います。

sudo irrecord -n -d /dev/lirc0 test.conf

使い方はMake:の記事から引用します。

  1. Enterキーを2回押して、リモコン学習を開始します。
  2. 学習したいリモコンのボタンを何度も押して学習します。複数のボタンを学習したい場合は、学習したいリモコンのボタンを何度も押してください。ボタンを押すたびに「.」が1個表示されるため、”Please keep on pressing buttons like described above.”と表示されるまで、ボタンを押し続けます。
  3. “Please keep on pressing buttons like described above.”が表示されたら、10秒間待ちます。
  4. “Please enter the name for the next button”が表示されたら、登録したいボタン名をを入力してEnterを押します。
  5. 登録したいリモコンボタンを押して、登録します。

irrecord – application for recording IR-codes for usage with lirc
Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de)
This program will record the signals from your remote control
and create a config file for lircd.
A proper config file for lircd is maybe the most vital part of this
package, so you should invest some time to create a working config
file. Although I put a good deal of effort in this program it is often
not possible to automatically recognize all features of a remote
control. Often short-comings of the receiver hardware make it nearly
impossible. If you have problems to create a config file READ THE
DOCUMENTATION of this package, especially section “Adding new remote
controls” for how to get help.
If there already is a remote control of the same brand available at
http://www.lirc.org/remotes/ you might also want to try using such a
remote as a template. The config files already contain all
parameters of the protocol used by remotes of a certain brand and
knowing these parameters makes the job of this program much
easier. There are also template files for the most common protocols
available in the remotes/generic/ directory of the source
distribution of this package. You can use a template files by
providing the path of the file as command line parameter.
Please send the finished config files to so that I
can make them available to others. Don’t forget to put all information
that you can get about the remote control in the header of the file.
Press RETURN to continue.
<>
Now start pressing buttons on your remote control.
It is very important that you press many different buttons and hold them
down for approximately one second. Each button should generate at least one
dot but in no case more than ten dots of output.
Don’t stop pressing buttons until two lines of dots (2×80) have been
generated.
Press RETURN now to start recording.
<>
<<学習したいリモコンキーを全て押す>>
……………………………………………………………………..
Found gap: 10239
Please keep on pressing buttons like described above.
<<ここで10秒待つ>>
.irrecord: no data for 10 secs, aborting
Creating config file in raw mode.
Now enter the names for the buttons.
Please enter the name for the next button (press to finish recording)
<<任意のボタン名を入力して、Enterキーを押す(ここではshutter)>>
Now hold down button “shutter”.
<<学習したいリモコンのボタンを押して確認します>>
Got it.
Signal length is 85
Please enter the name for the next button (press to finish recording)
<<追加で学習するボタンがない場合は、Enterキーを押して終了します>>
<<追加で学習するボタンがある場合は、名前を入力して、Enterキーを押します>>

登録が終了すると、test.confにはこのような内容が記録されます。

begin remote
  name  test.conf
  flags RAW_CODES
  eps            30
  aeps          100
  gap          9146
      begin raw_codes
          name power
             9119    4541     582     558     608     531
              608     532     609     531     635    1634
              609     531     608     533     607     540
              607    1662     608    1661     608    1660
              608    1662     607     533     607    1662
              608    1662     582    1696     607     533
              609     532     608     532     607    1672
              595    1664     604     530     621    1648
              607    1669     582    1687     607    1661
              607    1662     607     533     607     534
              616    1650     608     533     583     551
              583
      end raw_codes
end remote

複数の信号を登録した場合はこのようなパターンが複数個できます。
この内容をコピーし、/etc/lirc/lircd.confを編集します。

sudo vi /etc/lirc/lircd.conf

初期状態ではlircd.confの一番上に”#UNCONFIGURED”という行があります。この行は必ず消してください。
コピーした内容をlircd.confに追記します。
これで信号は記録されましたので、認識されるか確認します。
赤外線センサの動作確認の時にサービスを停止しているので、以下のコマンドで起動させます。

sudo /etc/init.d/lirc start

以下のコマンドで待機状態になります。

irw

学習させたボタンを押して、学習させた名前のものが表示されるか確認します。複数学習させた場合は全部試してみます。

$ irw
0000000000000009 00 enter test.conf
0000000000000008 00 left test.conf
000000000000000a 00 right test.conf
0000000000000002 00 buttonA test.conf
0000000000000001 00 power test.conf

確認が完了したらCtrl+Cで終了します。
lircを起動スクリプトに登録します。

sudo update-rc.d lirc defaults

ボタンを押したときに実行するコマンドを指定します。

sudo vi /etc/lirc/lircrc

/etc/lirc/lircrcの内容は以下のようにします。buttonには先ほどirrecordで指定した名前を、configにはコマンドを入力します。

begin
  prog = irexec
  button = sound
  config = mpg321 /home/pi/test_pattern.mp3
end
begin
  prog = irexec
  button = power
  config = shutdown -h now
end

再起動します。

sudo reboot

動作確認します。リモコンのボタンを押して、期待したとおりに実行されていれば成功です。おつかれさまでした。

4.おまけ

GPIOにただ接続しただけの赤外線センサですが、このままだと何か当たっただけで外れたりしそうなので一手間掛けます。

加工前


加工後

まずジャンパワイヤの接続部をメンディングテープでグルグル巻きにして固定します。つぎに赤外線センサの長すぎる足をニッパー(またはハサミ)で切断してジャンパワイヤの接続口にぴったり収まるようにします。これで外れにくくなりました。
続いてジャンパワイヤを針金でらせん状に巻いて束ねます。それをマジックテープのバンドでRaspberry Piごと固定して、赤外線センサを適当な方向に向ければ完成です。

関連

Raspberry Pi 2からBluetoothでスピーカーに音を飛ばす
Raspberry Pi 2でNFCタグを読み取って音を鳴らす
Raspberry Pi 2とnetatmoで室温を声でお知らせ
Raspberry Pi 2をリモコン操作してNHKラジオを聴く
Raspberry Pi 2で実現するスマートハウス

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です