目次
- 1 ラズパイ側にLIRCを入れる
- 1.1 手順
- 2 Pythonのプログラムから IRを出力する
構成
- Raspberry Pi Zero WH (USBから電源供給、WiFiでネットワークに接続)x 1
- 赤外線LED x 1
- 電流制限抵抗(100ホーム) x 1
- 赤外線受光モジュール x 1 (波形確認用)
環境
- OSは、Raspbian Strech Lite ($ lsb_release -aで表示できる)
- WiFiでの接続設定は済。TeraTermからSSHでログインして操作
- プログラム開発は、Windows上のVS Codeでソースコードを記述し、SSH File Systemでラズパイに接続してコピーする。(本当に便利!!)
- Blynkアプリをスマホにインストール
ラズパイ側にLIRCを入れる
ネット上の記事を検索すると、皆一様に LIRC (Linux Infrared Remote Control) を使っているので、素直に右にならえする。
参考にさせていただいたサイト
手順
-
LIRCを apt-getでインストールする
- $ sudo apt-get install lirc
-
デバイスとドライバーを設定する。
- Raspbianのバージョンによって、設定ファイルが異なるらしい。自分はstretchなので注意して検索すると、、
- 設定するファイルは、/etc/lirc/hardware.confでは無く、/etc/lirc/lirc_options.confらしい。下記2行を変更
-
モジュールとピンの設定を追加する
- /boot/config.txt ファイルにピンを設定する。ここでは、IR受信用入力ピン=22, 送信用出力ピン=23として設定する。config.txtファイルには、lirc設定が一行だけ、コメントアウトされて記述されているので、#を消して、二行を追加した。
-
Rebootする。(sudo reboot)
-
モジュールが有効になっているかどうかを確認する。
- 参考にしたサイトでは、この他に、rc_coreというのが表示されているが、自分の環境では表示されなかった。あと、librc_rpiの最後の数字が3で無く、2になっているが、これが問題なのかどうか分からない。とりあえず、次へ進んでみる。
-
lircがデバイスとして認識されているかどうかを確認する。
- OKっぽい。
-
リモコンコードの受信をしているかどうか確認する(mode2)。
- ここでは、手元にあった、ソニーのリモコンを操作してみた。ソニーのリモコンの、2.4msec、0.6msecの空白と0.6msecの「0」、0.6msecの空白と1.2msecの「1」・・・というパルス列が検出できているので大丈夫と思われる。
- mode2を実行するためには、lircdが停止している必要がある。socketとserviceの両方を一度に止めるには、$sudo systemctl stop lircd.socket lircd.service を実行すれば良い。
- mode2で –dを指定しない場合は、ディフォルトで /dev/lirc0が使われる。
波形で観測しようと思ったが、リモコンから直接出ている赤外線と、Raspberryが出力している赤外線の区別が出来ないのでやめた。(勘違い・・。このmode2コマンドでは、赤外線の出力がされている訳では無い。単純に、入力したパルスの幅を検出して、その検出した幅を 標準出力にprintしているだけ。早とちり・・・。)- このmode2とは何か? mode2 -vでバージョンを確認すると、lircと同じバージョン番号だ。これは、lircと一緒にインストールされたコマンドと思われる。他に、librcでインストールされたコマンドには何があるのか?本家のページを見ると、Daemons and toolsというページに以下のリストがある。これらが、librcで使えるツール群かな。確かにmode2がある。確かに入力されたパルスをそのまま出力するツールらしい。
-
リモコンを受信して、設定ファイルを作成する
- irrecordを試してみたが、エラーが出た。
- sudo service lircd stop あるいは、sudo /etc/init.d/lircd stop でデーモンを止めて、再度、irrecordをやってみたが同じエラーが続く。なぜだ。
- ネットで色々調べてみたが、このような症状の例は見つからない。lsmod の結果で rc_coreが表示されない事が、関連しているのかもしれない。なぜ、rc_coreが出てこないのか?について、要調査。
- lircdのソケットとサービス両方の止め方
- $ sudo systemctl stop lircd.socket lircd.servic
- 再開の仕方
- $ sudo systemctl start lircd.socket lircd.service
- なぜだ・・・ rc_coreがlsmodで表示されないことがそもそも問題なのかどうかが分からない。色々やっていたら、一度だけ、irrecordが動作してconfファイルも出来た。が、その後また出来ない。設定は変えていないのに・・・。
-
再度やってみる。
- reboot
- lircdのserviceとsocketを止める
- mode2でIR入力を確認する
- irrecord -n -d /dev/lirc0 hoge.conf を実行する。→ 出来た!
- この時点で、lsmod | grep lircを叩くと やはり lirc_rpiと、lirc_devしか無い。rc_coreは存在しないが、とりあえず、irrecordは出来た。違いは? 先程は書き込み権限の無いディレクトリで実行しようとしていたかも?
- 大丈夫っぽい。
- ちなみに、-d /dev/lirc0 は指定しなくても、defaultのドライバーが /dev/lirc0 になるので結果は同じ。
- $ irrecord –n test.conf を実行する。
- この指示に従って、ソニーのリモコンで configurationファイルを作成する。
- できた confファイルを、/etc/lirc/lircd.conf.d/ の中へ移動する。
- sudo mv sony.lircd.conf /etc/lirc/lircd.conf.d/
- もともと入っている、devinput.lircd.confを使わないように、ファイル名を変えておく。(拡張子が confで無ければ無視されるから)
- confファイルを変更したため、設定を再読込が必要。そのためには、lircdを再起動ればよい。(systemctl restartで試してみたが、エラーが出たので、stop して startするという形で二回に分けて実行した)
-
irwコマンドで、リモコンのキーが正しく検出されるかを確認→OK!
-
送信してみる
- irsendコマンドを使って、実際にIRを送信してみる。
- 波形を観測 (上:IR受光部の出力、下:GPIO-23からの出力)
1 2 |
driver = default device = /dev/lirc0 |
1 2 3 4 |
# Uncomment this to enable the lirc-rpi module dtoverlay=lirc-rpi dtparam=gpio_in_pin=22 dtparam=gpio_out_pin=23 |
1 2 3 |
$ lsmod | grep lirc lirc_rpi 8001 2 lirc_dev 8313 1 lirc_rpi |
1 2 |
$ ls -l /dev/lirc* crw-rw---- 1 root video 245, 0 Dec 24 16:09 /dev/lirc0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ sudo /etc/init.d/lircd stop [....] Stopping lircd (via systemctl): lircd.serviceWarning: Stopping lircd.service, but it can still be activated by: lircd.socket . ok $ sudo mode2 -d /dev/lirc0 ・・・sudoは無くてもOK) Using driver default on device /dev/lirc0 Trying device: /dev/lirc0 Using device: /dev/lirc0 Running as regular user yy space 16777215 pulse 2437 space 604 pulse 575 space 578 pulse 1249 ..... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Daemons and tools ircat irdb-get irexec irpty irrecord irsend irsimsend irtestcase irtext2udp irw irxevent lirc-config-tool lirc-lsplugins lirc-lsremotes lirc-setup lircd lircmd lircrcd mode2 pronto2lirc xmode2 |
1 2 3 4 |
$ irrecord -n -d /dev/librc0 Using driver default on device /dev/librc0 Could not init hardware (lircd running ? --> close it, check permissions) $ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Using driver default on device /dev/lirc0 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. A proper config file for lircd is maybe the most vital part of this package, so you should invest some time to create a working config file. Although I put a good deal of effort in this program it is often not possible to automatically recognize all features of a remote control. Often short-comings of the receiver hardware make it nearly impossible. If you have problems to create a config file READ THE DOCUMENTATION at https://sf.net/p/lirc-remotes/wiki If there already is a remote control of the same brand available at http://sf.net/p/lirc-remotes you might want to try using such a remote as a template. The config files already contains all parameters of the protocol used by remotes of a certain brand and knowing these parameters makes the job of this program much easier. There are also template files for the most common protocols available. Templates can be downloaded using irdb-get(1). You use a template file by providing the path of the file as a command line parameter. Please take the time to finish the file as described in https://sourceforge.net/p/lirc-remotes/wiki/Checklist/ an send it to <lirc@bartelmus.de> so it can be made available to others. Press RETURN to continue. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
begin remote name play bits 4 flags SPACE_ENC|CONST_LENGTH eps 30 aeps 100 header 2425 578 one 1229 572 zero 626 572 post_data_bits 8 post_data 0x9C gap 45084 toggle_bit_mask 0x0 frequency 38000 begin codes play 0x5 ff 0x3 rew 0xD stop 0x1 end codes end remote |
1 |
$ sudo mv /etc/lirc/lircd.conf.d/devinput.lircd.conf /etc/lirc/lircd.conf.d/devinput.lircd.conf.dist |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ irw 000000000000059c 00 Play sony-handycam 000000000000059c 01 Play sony-handycam 000000000000059c 02 Play sony-handycam 000000000000059c 03 Play sony-handycam 000000000000059c 04 Play sony-handycam 000000000000039c 00 FF sony-handycam 000000000000039c 01 FF sony-handycam 000000000000039c 02 FF sony-handycam 000000000000039c 03 FF sony-handycam 000000000000039c 04 FF sony-handycam 0000000000000d9c 00 REW sony-handycam 0000000000000d9c 01 REW sony-handycam 0000000000000d9c 02 REW sony-handycam 0000000000000d9c 03 REW sony-handycam 0000000000000d9c 04 REW sony-handycam 000000000000019c 00 Stop sony-handycam 000000000000019c 01 Stop sony-handycam 000000000000019c 02 Stop sony-handycam 000000000000019c 03 Stop sony-handycam 000000000000019c 04 Stop sony-handycam |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ irsend list "" "" sony-handycam $ irsend list sony-handycam "" 0000000000000005 Play 0000000000000003 FF 000000000000000d REW 0000000000000001 Stop $ irsend SEND_ONCE sony-handycam Play $ irsend SEND_ONCE sony-handycam Play $ irsend SEND_ONCE sony-handycam Play |
コメント
[…] Raspberry PiにLircをインストールして、シェルからの赤外線送信、受信が正常にできるように設定する。(この記事に詳細を記載) […]