概要
RaspberryPi2で赤外線受信してプログラム実行したくて色々しらべていたところ、どうもLIRCの古いver由来なのか情報に混乱があったので、自分の備忘録をかねて記録。
赤外線リモコンのボタンでWebカメラのシャッターを切ってみる。
想定環境
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.3 (stretch)
Release: 9.3
Codename: stretch
LIRC : 0.9.4c
受信機 : OSRB38C9AA
送信機 : 秋月電子でうっていた300円の13キーリモコン OE13KIR
ウェブカメラ: Logicool C920r
撮影用プログラム fswebcam : 20140113
インストールと初期設定
sudo apt install lirc
OSRB38C9AA は正面左から1:VOUT, 2:GND, 3: Vccなので、2,3をGNDおよび5Vに配線。
ブレッドボード用T型コネクタの位置関係的に使いやすかったので IO21 を VOUTとした。
config.txtへの設定記述
dtoverlay=lirc-rpi
dtparam=gpio_in_pin=21
/boot/config.txtに上記を追記し、lircの使用を宣言する。
※ググった際にconfig.txtの記述が「dtoverlay=lirc-rpi,gpio_in_pin=21」のようになっていたり、/etc/lirc/harware.confの記述のある記事はLIRC古いverやOSがRaspbian Jessie以前のものだとおもわれるので注意して読んだ方がいい
ここまで書いたところで一旦 reboot する。
再起動後に、mode2 -d /dev/lirc0 としてリモコンのボタンをおし、何らかの反応が返ってくれば、とりあえず動作しはじめているはず。
リモコンコマンドの登録
irrecordコマンドでリモコンボタンの内容を設定ファイルとして書き出せる。
こちらもverによって記述がちがうこと、押し方のタイミングなどで何度かのリトライが必要だった。
設定ファイル群は/etc/lirc内に点在しているが、最初に/etc/lirc/lircd.conf.d/のなかにあるdevinput.lircd.confを真っ先に使えない状態にしておくのがよい。
devinput.lircd.disableというファイル名にした。
lircd.confの中の記述で、/etc/lirc/lircd.conf.d/*.conf がincludeされるようになっているが、devinputセクションは1つしか許されてない様子(未検証)。
lircd.confへボタンのコードを追加する
irrecord -n -d /dev/lirc0 hoge.confなどとすることでインタラクティブに設定ファイルを作ってくれるが、手元ではできたファイルをコピーしただけでうまく動かなかったので先人の記録をもとに手修正した。
include "lircd.conf.d/*.conf"
begin remote
name OE13KIR
bits 32
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 9061 4474
one 603 1649
zero 603 528
ptrail 597
repeat 9071 2217
gap 108140
toggle_bit_mask 0x0
frequency 38000
begin codes
a 0x08F71FE0
b 0x08F71EE1
c 0x08F71AE5
#(ry
end codes
end remote
登録したボタンが正しく認識されているか確認
ここまでの設定をして、lircを再起動し irw を実行すると何ボタンを押したのかをコンソールで確認できるようになる。
~ $ irw
0000000008f71fe0 00 a OE13KIR
0000000008f71fe0 01 a OE13KIR
リモコンボタンにコマンドを割り当てる
lircrcなるファイルに記述するとあるが、どこで設定すればいいかわからないので調べたところ下記ファイルがあった。
$ ps aux|grep irexec
root 335 0.0 0.2 4208 2096 ? Ss 15:23 0:00 /usr/bin/irexec /etc/lirc/irexec.lircrc
というわけで /etc/lirc/irexec.lircrc に下記のような記述を追加。
```: /etc/lirc/irexec.lircrc
begin
prog = irexec
button = a
config = fswebcam -r 640 /images/1.jpg
end
begin
prog = irexec
button = b
config = fswebcam -r 1600 /images/2.jpg
end
```
再起動し、リモコンでボタンを押したら撮影できた。