上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
PC/RaspberryPi/WEBリモコン/学習リモコンを作る
のソース
資料室
PC
/
RaspberryPi
/
WEBリモコン
/
学習リモコンを作る
のソース
[
差分
|
バックアップ
|
リロード
]
[ ]
差分
を表示
PC/RaspberryPi/WEBリモコン/学習リモコンを作る
へ行く。
« Prev
* Raspberry Pi Zero WにRPZ-IR-Sensorを使って学習リモコンを作る [#rde78df1] Raspberry Pi Zero Wに,RPZ-IR-Sensorを使って学習リモコンを作ってみる。~ 手持ちのパーツで自作しても良かったが,今回は,温度,湿度,気圧センサーも搭載されている[[RPZ-IR-Sensor>http://indoor.lolipop.jp/IndoorCorgiElec/RPZ-IR-Sensor.php]]を[[Amazonから>https://amzn.to/3H1Spwc]]5000円ぐらいで購入して使ってみることに。 #ref("RPZ-IR-Sensor.png",50%) 以前使用していた[[LIRC>http://lirc.org/]]を使って,学習リモコン機能を作ってみる。~ Raspberry Pi Zero Wには,[[Raspbian Stretch>/PC/RaspberryPi/Linuxを動かしてみる/Raspbianのインストール]]が入っている。 ** LIRCのインストール [#lca85cfa] 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] *** デバイスドライバの設定 [#f0852cf5] LIRCが使用するデバイスドライバーを用意する。 /boot/config.txtを以下のように編集する。~ ''/boot/config.txt'' # Uncomment this to enable the lirc-rpi module dtoverlay=lirc-rpi dtparam=gpio_out_pin=13 dtparam=gpio_in_pin=4 ''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'' [lircd] nodaemon = False driver = default device = /dev/lirc0 output = /var/run/lirc/lircd pidfile = /var/run/lirc/lircd.pid plugindir = /usr/lib/arm-linux-gnueabihf/lirc/plugins permission = 666 allow-simulate = No repeat-max = 600 この設定で,LIRCの送受信にはデフォルトで''/dev/lirc0''を使用するようになる。 kernel 4.19以降では,受信の時(リモコン学習するときなど)に受信コマンドで使うデバイスを''/dev/lirc1''に指定しない場合は,このファイルのdeviceのところを,/dev/lirc1に書き換えるようにする。 ** リモコン信号の受信の確認 [#s1957bb3] リモコン信号を受信できるかどうか確認してみる。~ lircdデーモンを一旦停止する。 # systemctl stop lircd.service これしておかないと,mode2(リモコン信号をキャプチャするコマンド)実行時にデバイス使用中のエラーとなる。 リモコンの動作確認をする前に,mode2コマンドのバージョンを確認する。 $ mode2 -v mode2 0.9.4c リモコン信号受光部に向けて,適当なリモコンからなんかのボタンを押して信号を送信してみる。~ 注意:kernel 4.19以降では,デバイスに''/dev/lirc1''を指定する。また,lircを修正したものが必要。 $ mode2 -d /dev/lirc0 Using driver default on device /dev/lirc0 Trying device: /dev/lirc0 Using device: /dev/lirc0 space 2610664 <--- リモコン受光モジュールにリモコンを向けてボタンを押すと受信する pulse 1202 space 476 pulse 1201 space 452 pulse 368 space 1215 pulse 364 : このようなメッセージが表示されれば,リモコン信号が受信出来ている。 数字は,一つのパターンの長さ(時間)を表している。 ** irrecordでリモコンデータを学習する [#l8528e74] リモコンデータを学習するので,デーモンが動いている場合は停止しておく。 # systemctl stop lircd.service TVのリモコンを学習してみる。~ 注意:kernel 4.19以降では,デバイスに''/dev/lirc1''を指定する。また,lircを修正したものが必要。 $ irrecord -n -f -d /dev/lirc0 Using raw access on device /dev/lirc0 : Press RETURN to continue. <--- リターンを押す Checking for ambient light creating too much disturbances. Please don't press any buttons, just wait a few seconds... No significant noise (received 0 bytes) Enter name of remote (only ascii, no spaces) :TV <--- リモコン操作の名前(保存するファイル名)を入力 Using TV.lircd.conf as output filename Now start pressing buttons on your remote control. : Press RETURN now to start recording. <--- リターンを押す : Please enter the name for the next button (press <ENTER> to finish recording) power <--- リモコンのボタン名powerを学習させる Now hold down button "power". <--- リモコンの電源ボタンを押す Please enter the name for the next button (press <ENTER> to finish recording) volup <--- リモコンのボタン名volupを学習させる Now hold down button "volup". <--- リモコンのVolume↑ボタンを押す Please enter the name for the next button (press <ENTER> to finish recording) voldown <--- リモコンのボタン名voldownを学習させる Now hold down button "voldown". <--- リモコンのVolume↓ボタンを押す Please enter the name for the next button (press <ENTER> to finish recording) <--- 学習終了の場合はリターン。 Successfully written config file TV.lircd.conf このようにして学習したリモコンデータを,/etc/lirc/lircd.conf.d/ にコピーする。 $ sudo cp TV.lircd.conf /etc/lirc/lircd.conf.d/ エアコンのリモコンも一応学習できた。 リモコンの定義データを確認する。 $ irsend LIST "" "" devinput devinput TV のように,devinputが2個表示されたらdevinput.lircd.confファイルを削除する。 # rm /etc/lirc/lircd.conf.d/devinput.lircd.conf デーモンをリスタートする。 # systemctl restart lircd.service ** リモコン信号の送信 [#d1dc34d0] 学習したリモコンデータを使って,なにか送信してみる。 - テレビをつけるデータを送信~ $ irsend SEND_ONCE TV power うまく送信されれば,TVがONする。この時,リモコン送信中を示す赤色LEDが一瞬点灯する。 - テレビを切るデータを送信~ $ irsend SEND_ONCE TV power power信号は,テレビをOn/Offするトグル動作になる。(OnのためのリモコンデータやOffのためのリモコンデータは無い) ちなみに,リモコンデータを数回連続で送信したい場合は, $ 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に戻した方が良いかも。
« Prev
PC/RaspberryPi/WEBリモコン/学習リモコンを作る のバックアップ一覧
PC/RaspberryPi/WEBリモコン/学習リモコンを作る のバックアップソース(No. All)
1: 2018-04-05 (木) 06:40:06
yuji
現: 2020-12-26 (土) 16:08:03
yuji
Attached file: RPZ-IR-Sensor.png
Counter: 1532, today: 1, yesterday: 1
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
» 関連ページ
» Wikiソース
» 編集履歴
» バックアップ一覧
» 添付ファイル一覧
フォーラム
お問い合わせ