用意するもの
- 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:の記事から引用します。
- Enterキーを2回押して、リモコン学習を開始します。
- 学習したいリモコンのボタンを何度も押して学習します。複数のボタンを学習したい場合は、学習したいリモコンのボタンを何度も押してください。ボタンを押すたびに「.」が1個表示されるため、”Please keep on pressing buttons like described above.”と表示されるまで、ボタンを押し続けます。
- “Please keep on pressing buttons like described above.”が表示されたら、10秒間待ちます。
- “Please enter the name for the next button”が表示されたら、登録したいボタン名をを入力してEnterを押します。
- 登録したいリモコンボタンを押して、登録します。
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 toso 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 (pressto finish recording)
<<任意のボタン名を入力して、Enterキーを押す(ここではshutter)>>
Now hold down button “shutter”.
<<学習したいリモコンのボタンを押して確認します>>
Got it.
Signal length is 85
Please enter the name for the next button (pressto 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で実現するスマートハウス