1: 2018-04-05 (木) 06:40:06 yuji ソース 現: 2020-12-26 (土) 16:08:03 yuji ソース
Attached file: RPZ-IR-Sensor.png
Line 1: Line 1:
-#topicpath 
- 
* Raspberry Pi Zero WにRPZ-IR-Sensorを使って学習リモコンを作る [#rde78df1] * Raspberry Pi Zero WにRPZ-IR-Sensorを使って学習リモコンを作る [#rde78df1]
Raspberry Pi Zero Wに,RPZ-IR-Sensorを使って学習リモコンを作ってみる。~ Raspberry Pi Zero Wに,RPZ-IR-Sensorを使って学習リモコンを作ってみる。~
-手持ちのパーツで自作しても良かったが,今回は,温度,湿度,気圧センサーも搭載されている[[RPZ-IR-Sensor>http://indoor.lolipop.jp/IndoorCorgiElec/RPZ-IR-Sensor.php]]を購入して使ってみることに。+手持ちのパーツで自作しても良かったが,今回は,温度,湿度,気圧センサーも搭載されている[[RPZ-IR-Sensor>http://indoor.lolipop.jp/IndoorCorgiElec/RPZ-IR-Sensor.php]]を[[Amazonから>https://amzn.to/3H1Spwc]]5000円ぐらいで購入して使ってみることに。
-以前使用していた[[LIRC>http://lirc.org/]]を使って,学習リモコン機能を作ってみる。+#ref("RPZ-IR-Sensor.png",50%)
-[[Raspbian Stretch>/PC/RaspberryPi/Linuxを動かしてみる/Raspbianのインストール]]が入っているRaspberry Pi Zero Wで,作業を行った。 +以前使用していた[[LIRC>http://lirc.org/]]を使って,学習リモコン機能を作ってみる。~ 
- $ lsb_release -a + 
- No LSB modules are available. +Raspberry Pi Zero Wには,[[Raspbian Stretch>/PC/RaspberryPi/Linuxを動かしてみる/Raspbianのインストール]]が入っている。
- Distributor ID: Raspbian +
- Description:    Raspbian GNU/Linux 9.4 (stretch) +
- Release:        9.4 +
- Codename:      stretch+
** LIRCのインストール [#lca85cfa] ** LIRCのインストール [#lca85cfa]
-lircのPackageをインストールする。+lircをパッケージを使ってインストールする。
 # apt-get install lirc  # apt-get install lirc
 +
 +Raspbian Stretchの新しいものやBusterでは,Kernelが4.19以降が使われている。~
 +Kernel 4.19以降の場合,デバイスドライバが変更になったので,変更されたデバイスドライバを使う必要があるのだが,その場合lircパッケージをそのまま使用すると,リモコンの受信がタイムアウトでうまく行かなかったり,送信もデバイスドライバの問題で256個以上のpulse/spaceを送信出来なかったり,トータル500ms以上のデータが送信出来なくなってしまった。
 +
 +受信の問題は,''lircをパッケージでインストールするのではなく,lircのソースに修正パッチを当ててビルドしたものを使うことで回避できる。''~
 +しかし送信の問題は,Kernelのソースコードの修正が必要なため,簡単に修正できない。
 +
 +受信を改善するためにlircをビルドする場合は,[[kernel4.19用LIRCのビルド>../kernel4.19用LIRCのビルド]]を参照。
** LIRCの設定 [#eb919efe] ** LIRCの設定 [#eb919efe]
-/boot/config.txtを以下のように編集する。+*** デバイスドライバの設定 [#f0852cf5] 
 +LIRCが使用するデバイスドライバーを用意する。
 +/boot/config.txtを以下のように編集する。~
''/boot/config.txt'' ''/boot/config.txt''
 # Uncomment this to enable the lirc-rpi module  # Uncomment this to enable the lirc-rpi module
Line 29: Line 33:
 dtparam=gpio_in_pin=4  dtparam=gpio_in_pin=4
-/etc/lirc/lirc_options.confを以下のように編集する。+''Raspbian Stretchの新しいものやBusterではKernelが4.19以降に更新されていて,それによってlirc-rpiのDeviceTreeがサポートされなくなった。''~ 
 +このため上記の代わりに,/boot/config.txtを以下のように編集して,gpio-irとgpio-ir-txを使うようにする。 
 + dtoverlay=gpio-ir,gpio_pin=4 
 + dtoverlay=gpio-ir-tx,gpio_pin=13
 +編集が終わったらRaspberry Pi Zero Wを再起動する。
 +
 +lsmodでlircモジュールがロードされているか確認する。
 + $ lsmod | grep lirc
 + lirc_rpi                8001  2
 + lirc_dev                8313  1 lirc_rpi
 +
 +''Kernelが4.19以降では,以下のようになっているか確認する。''
 + $ lsmod | grep gpio_ir
 + gpio_ir_tx              3569  0
 + gpio_ir_recv            3095  0
 + 
 +/dev/lirc0が作成されているか確認する。
 + $ ls -l /dev/lirc*
 + crw-rw---- 1 root video 243, 0  4月  3 14:55 /dev/lirc0
 +送受信には,/dev/lirc0が使われる。
 +
 +''Kernelが4.19以降では,/dev/lirc0,/dev/lirc1が作成されているか確認する。''
 + $ ls -la /dev/lirc*
 + crw-rw---- 1 root video 252, 0 8月  2 05:51 /dev/lirc0
 + crw-rw---- 1 root video 252, 1 8月  2 05:51 /dev/lirc1
 +''/dev/lirc0が送信用のデバイスで,/dev/lirc1が受信用のデバイスになっていて,送信と受信で違うデバイスを使用するようになってしまった。''~
 +
 +*** LIRC設定ファイルの修正 [#o8a56fcf]
 +/etc/lirc/lirc_options.confを以下のように編集する。~
''/etc/lirc/lirc_options.conf'' ''/etc/lirc/lirc_options.conf''
 [lircd]  [lircd]
Line 42: Line 74:
 allow-simulate  = No  allow-simulate  = No
 repeat-max      = 600  repeat-max      = 600
 +この設定で,LIRCの送受信にはデフォルトで''/dev/lirc0''を使用するようになる。
-編集が終わったらRaspberry Pi Zero Wを再起動する。 +kernel 4.19以降では,受信の時(リモコン学習するときなど)に受信コマンドで使うデバイスを''/dev/lirc1''に指定しない場合は,このファイルのdeviceのところを,/dev/lirc1に書き換えるようにする。
- +
-lsmodでlircモジュールがロードされているか確認する。 +
- $ lsmod | grep lirc +
- lirc_rpi                8001  2 +
- lirc_dev                8313  1 lirc_rpi +
- +
-/dev/lirc0が作成されているか確認する。 +
- $ ls -l /dev/lirc* +
- crw-rw---- 1 root video 243, 0  4月  3 14:55 /dev/lirc0+
** リモコン信号の受信の確認 [#s1957bb3] ** リモコン信号の受信の確認 [#s1957bb3]
Line 59: Line 83:
lircdデーモンを一旦停止する。 lircdデーモンを一旦停止する。
 # systemctl stop lircd.service  # systemctl stop lircd.service
-これしておかないと,mode2実行時にデバイス使用中のエラーとなる。+これしておかないと,mode2(リモコン信号をキャプチャするコマンド)実行時にデバイス使用中のエラーとなる。
リモコンの動作確認をする前に,mode2コマンドのバージョンを確認する。 リモコンの動作確認をする前に,mode2コマンドのバージョンを確認する。
Line 66: Line 90:
リモコン信号受光部に向けて,適当なリモコンからなんかのボタンを押して信号を送信してみる。~ リモコン信号受光部に向けて,適当なリモコンからなんかのボタンを押して信号を送信してみる。~
 +注意:kernel 4.19以降では,デバイスに''/dev/lirc1''を指定する。また,lircを修正したものが必要。
 $ mode2 -d /dev/lirc0  $ mode2 -d /dev/lirc0
 Using driver default on device /dev/lirc0  Using driver default on device /dev/lirc0
 Trying device: /dev/lirc0  Trying device: /dev/lirc0
 Using device: /dev/lirc0  Using device: /dev/lirc0
 + 
 space 2610664                          <--- リモコン受光モジュールにリモコンを向けてボタンを押すと受信する  space 2610664                          <--- リモコン受光モジュールにリモコンを向けてボタンを押すと受信する
 pulse 1202  pulse 1202
Line 84: Line 109:
** irrecordでリモコンデータを学習する [#l8528e74] ** irrecordでリモコンデータを学習する [#l8528e74]
-リモコンデータを学習するので,デーモンを停止しておく。+リモコンデータを学習するので,デーモンが動いている場合は停止しておく。
 # systemctl stop lircd.service  # systemctl stop lircd.service
-TVのリモコンを学習してみる。+TVのリモコンを学習してみる。
 +注意:kernel 4.19以降では,デバイスに''/dev/lirc1''を指定する。また,lircを修正したものが必要。
 $ irrecord -n -f -d /dev/lirc0  $ irrecord -n -f -d /dev/lirc0
 Using raw access on device /dev/lirc0  Using raw access on device /dev/lirc0
  :   :
 Press RETURN to continue.                                    <--- リターンを押す  Press RETURN to continue.                                    <--- リターンを押す
 + 
 Checking for ambient light  creating too much disturbances.  Checking for ambient light  creating too much disturbances.
 Please don't press any buttons, just wait a few seconds...  Please don't press any buttons, just wait a few seconds...
 + 
 No significant noise (received 0 bytes)  No significant noise (received 0 bytes)
 + 
 Enter name of remote (only ascii, no spaces) :TV            <--- リモコン操作の名前(保存するファイル名)を入力  Enter name of remote (only ascii, no spaces) :TV            <--- リモコン操作の名前(保存するファイル名)を入力
 Using TV.lircd.conf as output filename  Using TV.lircd.conf as output filename
 + 
 Now start pressing buttons on your remote control.  Now start pressing buttons on your remote control.
  :   :
Line 107: Line 133:
 Please enter the name for the next button (press <ENTER> to finish recording)  Please enter the name for the next button (press <ENTER> to finish recording)
 power                                                        <--- リモコンのボタン名powerを学習させる  power                                                        <--- リモコンのボタン名powerを学習させる
 + 
 Now hold down button "power".                                <--- リモコンの電源ボタンを押す  Now hold down button "power".                                <--- リモコンの電源ボタンを押す
 + 
 Please enter the name for the next button (press <ENTER> to finish recording)  Please enter the name for the next button (press <ENTER> to finish recording)
 volup                                                        <--- リモコンのボタン名volupを学習させる  volup                                                        <--- リモコンのボタン名volupを学習させる
 + 
 Now hold down button "volup".                                <--- リモコンのVolume↑ボタンを押す  Now hold down button "volup".                                <--- リモコンのVolume↑ボタンを押す
 + 
 Please enter the name for the next button (press <ENTER> to finish recording)  Please enter the name for the next button (press <ENTER> to finish recording)
 voldown                                                      <--- リモコンのボタン名voldownを学習させる  voldown                                                      <--- リモコンのボタン名voldownを学習させる
 + 
 Now hold down button "voldown".                              <--- リモコンのVolume↓ボタンを押す  Now hold down button "voldown".                              <--- リモコンのVolume↓ボタンを押す
 + 
 Please enter the name for the next button (press <ENTER> to finish recording) <--- 学習終了の場合はリターン。  Please enter the name for the next button (press <ENTER> to finish recording) <--- 学習終了の場合はリターン。
 + 
 Successfully written config file TV.lircd.conf  Successfully written config file TV.lircd.conf
このようにして学習したリモコンデータを,/etc/lirc/lircd.conf.d/ にコピーする。 このようにして学習したリモコンデータを,/etc/lirc/lircd.conf.d/ にコピーする。
Line 133: Line 159:
 devinput  devinput
 TV  TV
-のように,devinputが2個表示された場合はうまくいかないので,devinput.lircd.confファイルを削除する。+のように,devinputが2個表示されたらdevinput.lircd.confファイルを削除する。
 # rm /etc/lirc/lircd.conf.d/devinput.lircd.conf  # rm /etc/lirc/lircd.conf.d/devinput.lircd.conf
デーモンをリスタートする。 デーモンをリスタートする。
Line 146: Line 172:
 $ irsend SEND_ONCE TV power  $ irsend SEND_ONCE TV power
-power信号は,テレビをOn/Offするトグル動作になる。(OnのためのデータやOffのためのデータは無い)+power信号は,テレビをOn/Offするトグル動作になる。(OnのためのリモコンデータやOffのためのリモコンデータは無い)
ちなみに,リモコンデータを数回連続で送信したい場合は, ちなみに,リモコンデータを数回連続で送信したい場合は,
- $ irsend -#5 SEND_ONCE TV volup+ $ irsend -#3 SEND_ONCE TV volup
のようにする。(#の後に回数を指定する) のようにする。(#の後に回数を指定する)
 +
 +Kernel 4.19以降の場合,デバイスドライバの問題で256個以上のpulse/spaceを送信出来なかったり,トータル500ms以上のデータが送信できなくなっている。~
 +これは,Kernelが修正されないと残念ながら解決できない。
 +
 +また,この場合,1回irsendしただけだと機器が反応しない事があるようになった。
 + $ irsend -#3 SEND_ONCE TV volup
 +しょうがないんで,3回ぐらい連続で送ってちゃんと反応するようにした。
 +
 +Kernelを4.14.98に戻した方が良いかも。


トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 1532, today: 1, yesterday: 1