LIRCで赤外線リモコン
ラズパイのGPIO端子に、赤外線センサーを赤外線LEDを接続して学習赤外線リモコンを作成します。
赤外線リモコンのハードウエア
ラズパイのGPIO端子から電源と2本の信号線を引き出します。既存の赤外線リモコンからどのようなデータが出力されているかを解析するために、赤外線センサーからの信号は、GPIO 18 に入力します。また、赤外線センサーには +3.3v の電源も供給します。
解析したリモコンデータを再出力するのは、GPIO 17 です。出力は470Ωの抵抗で流れる電流を 4mA程度に制限し、赤外線LEDを発光させます。
pin11: GPIO 17 | 赤外線LEDへのリモコン出力 |
pin12: GPIO 18 | 赤外線センサーからの学習用入力 |
pin14: GND | GND(他のグランド端子でも良い) |
pin17: +3.3v | +3.3v 電源(pin 1 でも良い) |
<使用部品>
- 抵抗;470Ω 1/4W
- 赤外線LED;OSI5LA5113A
- 赤外線センサー;OSRB38C9AA
- 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)を指定してコマンドを起動すると、以下の手順に沿ってパターンを解析し、各キーの信号一覧を示したファイルを作成します。
- lircdをstop
pi@raspberrypi:~ $ sudo /etc/init.d/lirc stop
- ファイル名を指定してコマンドを起動
pi@raspberrypi:~ $ sudo irrecord -n -d /dev/lirc0 ~/jvc_tv.conf
NOTE: default で指定されたボタン名称以外の名前を使用するために "-n" Option を付加します。
- 画面の指示に従い Enter キーを2回押した後、リモコンの全てのボタンを押す。
ボタンを押すと、画面に「.」が追記される。「.」が増えたのを確認したら次のボタンを押す。同じキーで10個を超える「.」が追記されないように素早く次のボタンに移る。「.」が2行(80x2)を超え新たな説明が表示するまで続ける。 - "Please enter the name for the next button"と表示されたら、登録したいボタン名を入力してEnterを押す。
- リモコンのボタンを押す。
- ボタンの登録が終わったら、ボタン名を入力せずに Enter だけを押す。
- 説明を読みEnterを押す。
- リモコンの任意のボタン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