LoginSignup
3
3

More than 5 years have passed since last update.

RaspberryPi2/3 Raspbian Stretchでlircを使って赤外線受信する

Last updated at Posted at 2018-03-21

概要

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への設定記述

/boot/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などとすることでインタラクティブに設定ファイルを作ってくれるが、手元ではできたファイルをコピーしただけでうまく動かなかったので先人の記録をもとに手修正した。

/etc/lirc/lircd.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
```

再起動し、リモコンでボタンを押したら撮影できた。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3