このサイトはMacを使って Raspberry Pi 3 の動作や活用法を学びます。

LIRCで赤外線リモコン

ラズパイのGPIO端子に、赤外線センサーを赤外線LEDを接続して学習赤外線リモコンを作成します。

赤外線リモコンのハードウエア

ラズパイのGPIO端子から電源と2本の信号線を引き出します。既存の赤外線リモコンからどのようなデータが出力されているかを解析するために、赤外線センサーからの信号は、GPIO 18 に入力します。また、赤外線センサーには +3.3v の電源も供給します。
解析したリモコンデータを再出力するのは、GPIO 17 です。出力は470Ωの抵抗で流れる電流を 4mA程度に制限し、赤外線LEDを発光させます。

pin11: GPIO 17赤外線LEDへのリモコン出力
pin12: GPIO 18赤外線センサーからの学習用入力
pin14: GNDGND(他のグランド端子でも良い)
pin17: +3.3v+3.3v 電源(pin 1 でも良い)

<使用部品>

  1. 抵抗;470Ω 1/4W
  2. 赤外線LED;OSI5LA5113A
  3. 赤外線センサー;OSRB38C9AA
  4. JVC RA-A225 赤外線リモコン
部品の接続
使用部品

LIRCのインストールと設定

ラズパイのターミナルソフトを立ち上げ、apt-getでLIRC(Linux Infrared Remote Control)をインストールします。以下のコマンド入力したらしばらく完了まで待ちます。

sudo apt-get install lirc

エディター nano を使い、LIRC の設定をラズパイのハードウエアに合わせます。

sudo nano /etc/lirc/hardware.conf

変更箇所は、以下の空色で示した4箇所です。

pi@raspberrypi:~ $ cat /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"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""
ラズパイの設定

ラズパイの起動時にLIRCを認識するように、/boot/config.txt の一部を nano で変更します。

sudo nano /boot/config.txt

変更箇所は、config.txt の最後から6行目、
#dtoverlay=lirc-rpi
のコメント(#)を外します。

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Uncomment this to enable the lirc-rpi module
dtoverlay=lirc-rpi   ← この行のコメントを外す

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

NOTE: 赤外線LED出力と赤外線センサー入力は、Default で、GPIO 17 と GPIO 18 です。Default 以外の GPIO Pin を使用する場合は、config.txt 最終行に、使用する GPIO Pin を指定します。
   例;gpio_in_pin=21,gpio_out_pin=20

変更を保存したら、ラズパイを再起動し変更を反映させます。

sudo reboot

ラズパイが再起動したら、ターミナルで、以下のコマンドを使いLIRCが正しく認識されているか確認します。LIRC関連のファイルが見つかれば正しく認識されています。

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

赤外線信号の受信確認

常駐しているLIRC機能を停止して、赤外線センサーで受信したデータを標準出力(画面)に表示する mode2 コマンドを実行します。赤外線信号待状態になるので、学習対象の赤外線リモコンから、ラズパイに接続した赤外線センサーに向け任意のキーを押し赤外線データを照射します。正しく動作すれば、信号の詳細時間間隔が画面に表示されます。
このコマンドは常に赤外線データを確認・待機しているため、終了するためにはキーボードから「CTL + c」を入力します。

pi@raspberrypi:~ $ sudo /etc/init.d/lirc stop
[ ok ] Stopping lirc (via systemctl): lirc.service.
pi@raspberrypi:~ $ mode2 -d /dev/lirc0  ← returnを押した後にリモコンの任意キーを押す
pulse 1550023
space 3358
pulse 1684
space 389
pulse 478
space 344
pulse 1303
space 452
pulse 371
  .    .   ← リモコンデータはかなり長く続く
  .    .   ← コマンド待ちに戻るには「CTL + c」

コピーするリモコン信号を学習する

使用する赤外線リモコンの信号パターンをラズパイで解析し、各キーを押した時に送信される信号パターンの一覧を作成します。解析には、LIRCソフトウエアパッケージに含まれている「irrecord」コマンドを使います。結果を保存するファイル名(〇〇.conf)を指定してコマンドを起動すると、以下の手順に沿ってパターンを解析し、各キーの信号一覧を示したファイルを作成します。

  1. lircdをstop
    pi@raspberrypi:~ $ sudo /etc/init.d/lirc stop
  2. ファイル名を指定してコマンドを起動
    pi@raspberrypi:~ $ sudo irrecord -n -d /dev/lirc0 ~/jvc_tv.conf

    NOTE: default で指定されたボタン名称以外の名前を使用するために "-n" Option を付加します。

  3. 画面の指示に従い Enter キーを2回押した後、リモコンの全てのボタンを押す。
    ボタンを押すと、画面に「.」が追記される。「.」が増えたのを確認したら次のボタンを押す。同じキーで10個を超える「.」が追記されないように素早く次のボタンに移る。「.」が2行(80x2)を超え新たな説明が表示するまで続ける。
  4. "Please enter the name for the next button"と表示されたら、登録したいボタン名を入力してEnterを押す。
  5. リモコンのボタンを押す。
  6. ボタンの登録が終わったら、ボタン名を入力せずに Enter だけを押す。
  7. 説明を読みEnterを押す。
  8. リモコンの任意のボタン1個を連打する。長押しをしないこと、1個押すたび画面に「.」が1個表示される。処理が終了するまで繰り返す。終了すると説明が表示されコマンド待ちに戻る。

作成されたファイルを /etc/lirc/lircd.conf と置き換えます。また、ファイルに記録されているリモコンの名称”name”が、ファイルパス名になっているため NANO でファイルを開き判りやすく短い名前に変更します。

pi@raspberrypi:~ $ sudo cp ~/jvc_tv.conf /etc/lirc/lircd.conf
pi@raspberrypi:~ $ sudo nano /etc/lirc/lircd.conf

NANO で変更したあとのファイル内容

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Thu Dec 29 21:30:01 2016
#
# contributed by
#
# brand:                       /home/pi/jvc_tv.conf
# model no. of remote control:
# devices being controlled by this remote:
#

begin remote

# name  /home/pi/jvc_tv.conf   ← 長い名前を判りやすく変更
  name  JVC_TV
  bits           16
  flags SPACE_ENC|NO_HEAD_REP|CONST_LENGTH
  eps            30
  aeps          100

  header       8437  4220
  one           524  1599
  zero          524   537
  ptrail        523
  gap          46718
  min_repeat      2
#  suppress_repeat 2
#  uncomment to suppress unwanted repeats
  toggle_bit_mask 0x0

      begin codes
          key_1                    0xC084
          key_2                    0xC044
          key_3                    0xC0C4
          key_4                    0xC024
          key_5                    0xC0A4
          key_6                    0xC064
          key_7                    0xC0E4
          key_8                    0xC014
          key_9                    0xC094
          key_10                   0xC054
          key_11                   0xC0D4
          key_12                   0xC034
          key_vol_up               0xC078
          key_vol_dn               0xC0F8
          key_mute                 0xC038
          key_ch-up                0xC098
          key_ch_dn                0xC018
          key_cg_input             0xC0C8
          key_power                0xC0E8
          key_timer                0xC0C0
          key_bs                   0xC030
          key_gnd_tv               0xF0A8
      end codes

end remote


学習した内容の確認

学習した赤外線リモコンの信号パターンを irw コマンド確認でします。コマンドを実行した後にセンサーに向けてリモコンのボタンを押します。押した key の名称が正しく表示されればOKです。 CTL + c で終了。

pi@raspberrypi:~ $ sudo /etc/init.d/lirc start
pi@raspberrypi:~ $ irw
000000000000c084 00 key_1 JVC_TV   ← key_1 を押す
000000000000c084 01 key_1 JVC_TV
000000000000c084 02 key_1 JVC_TV
000000000000c084 03 key_1 JVC_TV
000000000000c084 04 key_1 JVC_TV
000000000000c044 00 key_2 JVC_TV   ← key_2 を押す
000000000000c044 01 key_2 JVC_TV
000000000000c044 02 key_2 JVC_TV
000000000000c044 03 key_2 JVC_TV
000000000000c0c4 00 key_3 JVC_TV   ← key_3 を押す
000000000000c0c4 01 key_3 JVC_TV
000000000000c0c4 02 key_3 JVC_TV
^C

JVC_TV として LIRC に登録した全てのコマンドをリスト表示させるには、"irsend LIST" を使用します。

pi@raspberrypi:~ $ irsend LIST JVC_TV ""
登録コマンドの赤外線出力

GPIO 17 pin に接続した赤外線LEDを点灯し、登録したコマンドを実際にラズパイ柄出力するには、以下のコマンドを実行します。

#   key_1 コマンドを送信する
pi@raspberrypi:~ $ irsend SEND_ONCE JVC_TV key_1

#   key_power コマンドを送信する
pi@raspberrypi:~ $ irsend SEND_ONCE JVC_TV key_power