もみあげあしめ

組み込みとかIoTとか、いろいろ

Raspberry Pi でリモコン送受信する #受信編

家電といえば、リモコン操作。リモコン操作といえば、家電といっても過言ではない。

f:id:shima_nigoro:20161106182257p:plain:w300

忙しいので適当に記事を書いているわけではない。(と自分に言い聞かせる)

用意するもの

ハードウェア

一般的なご家庭にある下記の材料を用意します。

  • Raspberry Pi 3 Model B * 1台
  • 赤外線受信モジュール * 1個
  • 赤外線LED * 1個
  • 抵抗 10kΩ * 1個
  • ジャンパワイヤ 少々
  • リモコン 少々

下記のページから購入するのが楽かもしれない。

ソフトウェア

apt コマンドを使ってインストールします

  • LIRC(Linux Infrared Remote Control)
    • sudo apt-get install lirc

その他

必ずしも必要ではありませんが、あるとより良いです。

  • やる気
  • 時間
  • 目的

LIRCを設定する

・「/etc/lirc/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"

・「/boot/config.txt」を編集する。

# Uncomment this to enable the lirc-rpi module
dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=24

※ポート番号は各自で使うポートを指定してください。

・設定を読み込ませるため、再起動します。

sudo reboot

・モジュールが使えるか確認します、下記 3つがあれば問題ありません。

pi@raspberrypi:~ $ lsmod | grep lirc
lirc_rpi                6478  0
lirc_dev                8310  1 lirc_rpi
rc_core                16468  1 lirc_dev

動作確認

・いったんデーモン(リモコン入力監視してくれる悪魔くん)を止めておきます。

sudo /etc/init.d/lirc stop

・下記コマンドを実行した後にリモコンを操作します。
なんかいっぱい出たら、正常に動作しています。やったぜ!#たまに勝手に反応します。なんでや!

pi@raspberrypi:~ $ mode2 -d /dev/lirc0
space 16777215
pulse 8412
space 4208
pulse 556
space 500
pulse 531
space 526
pulse 531
space 1578
(省略)

※終了するには「Crtl + C」

リモコンコードを覚えさせる

・下記コマンドを実行します。

pi@raspberrypi:~ $ irrecord -n -d /dev/lirc0 lircd.conf

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.

(省略)

Press RETURN to continue.

・Enter キーで次に進める

Now start pressing buttons on your remote control.

(省略)

Press RETURN now to start recording.

・Enter キーで次に進んで、覚えさせたいリモコンの色々なボタンを長押しする。
「.」が80個ほど表示されるので押し続ける。

Press RETURN now to start recording.
................................................................................
Found const length: 107157
Please keep on pressing buttons like described above.

・続けて色々なボタンを連打する。いろいろ出た末に解析が終わったっぽいメッセージが表示される。

...............................................................................
Space/pulse encoded remote control found.
Signal length is 67.
Found possible header: 8974 4423
Found trail pulse: 612
Found repeat code: 8983 2188
Signals are space encoded.
Signal length is 32
Now enter the names for the buttons.

・個々のボタンを覚えさせるため、「名前を決めてEnter キー」⇒「覚えさせたいボタン押下」する

Please enter the name for the next button (press <ENTER> to finish recording)
POWER

Now hold down button "POWER".

※電源ボタンを覚えさせる例

・最終的に設定ファイルは下記のようになる

begin remote

  name  lircd.conf
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  header       8974  4423
  one           602  1626
  zero          602   517
  ptrail        612
  repeat       8983  2188
  pre_data_bits   16
  pre_data       0xFF
  gap          107157
  toggle_bit_mask 0x0

      begin codes
          POWER                    0xA25D
          MENU                     0xE21D
          TEST                     0x22DD
          PLUS                     0x02FD
          RETURN                   0xC23D
          PREV                     0xE01F
          PLAY                     0xA857
          NEXT                     0x906F
          NUM_0                    0x6897
          MINUS                    0x9867
          CLEAR                    0xB04F
      end codes

end remote

・生成した設定ファイルは「/etc/lirc/lircd.conf」に上書きコピーする

sudo cp lircd.conf /etc/lirc/lircd.conf

・デーモンを再起動する

sudo /etc/init.d/lirc restart

・正しく設定できているか確認する

pi@raspberrypi:~ $ irw
0000000000ffa25d 00 POWER lircd.conf
0000000000ffa25d 01 POWER lircd.conf
0000000000ffe21d 00 MENU lircd.conf
0000000000ffe21d 01 MENU lircd.conf
0000000000ff22dd 00 TEST lircd.conf
0000000000ff22dd 01 TEST lircd.conf
0000000000ff02fd 00 PLUS lircd.conf
0000000000ff02fd 01 PLUS lircd.conf

※終了するには「Crtl + C」

おわりに

受信編はここまで。あとで設定ファイルを見たのだけど、設定できたのは11個までだった…なぜ?
最近はやる気はあれども時間がない。時間を作るほど目的が重要でなくなってきた。

Raspberry Piで遊ぼう! 改訂第4版

Raspberry Piで遊ぼう! 改訂第4版