Raspberry piでリモコン操作1
前回の記事でRaspberry piにOSを入れてセットアップしました.
今回は前々からやりたいなーと思っていたRaspberry piでリモコン操作に挑戦したいと思います.
目的
Raspberry piでリモコンを実現
結果
結果的にはテレビのリモコンなら動作できましたが,エアコンや照明のリモコンはデータ長が長くうまくできませんでした.
作った回路
回路
回路はこちらを参考にしました.
以下が今回作った回路です.左が発光部,右が受光部です.発光部はGPIO 18pin,受光部はGPIO 17pinにつながっています.
使用部品
- Raspberry pi B+
- 赤外線リモコン受光モジュール:PL-IRM2161-XD1
- 赤外線LED:OSI5LA5113A
- 抵抗:1kΩ
手元に何ら電子部品はなかったので秋月電子とスイッチサイエンスで調達しました.
特にスイッチサイエンスでは抵抗詰め合わせパックというのがあるので助かりました.
feijoa.jp様では赤外線LEDを3つ使われてましたが,今回は実験的なので1つだけ.
電子回路の知識は殆ど無いので,抵抗値などは適当です.最終的にとりあえず動作はしました.
注意したいのは,
一方、GPIOは5V耐圧ではありませんので、受信モジュールは3.3Vで駆動します。
http://d.hatena.ne.jp/penkoba/20131228/1388243358
とのことで3.3Vで受光モジュールは動作させています.
Lircのインストール・設定
まず調べるとLircというソフトでできそうなことが分かりました.
ということでインストールします.
$ sudo apt-get install lirc
GPIOピンを設定しますがサイトによって設定する項目が異なりました.動作したものを説明します.
参考:Raspberry Piで赤外線リモコンを学習し発信する (r271-635)
$ sudo modprobe lirc-rpi gpio_in_pin=17 gpio_out_pin=18
※自動動作させるために,以下で/etc/modprobe.d/lirc.confを作成
options lirc-rpi gpio_in_pin=17 gpio_out_pin=18
デバイスが作成されたか確認
$ ls -l /dev/lirc* crw-rw---- 1 root video 245, 0 2月 22 10:32 /dev/lirc0 lrwxrwxrwx 1 root root 21 2月 22 10:32 /dev/lircd -> ../var/run/lirc/lircd
/dev/lirc0がありますね(大丈夫そう)
$ sudo mount -t debugfs debugfs /sys/kernel/debug mount: debugfs is already mounted or /sys/kernel/debug busy debugfs is already mounted on /sys/kernel/debug $ sudo cat /sys/kernel/debug/gpio GPIOs 0-53, bcm2708_gpio: gpio-17 (lirc_rpi ir/in ) in hi gpio-18 (lirc_rpi ir/out ) in lo gpio-47 (led0 ) out lo
lirc_rpi ir/in ir/outがありますね(大丈夫そう)
/etc/lirc/hardware.confの設定を編集しておきます.(編集する項目のみ)
LIRCD_ARGS="--uinput" LOAD_MODULES=true DRIVER="default" DEVICE="/dev/lirc0" MODULES="lirc_rpi"
赤外線受信を確認
mode2でとりあえず赤外線が受信できるか確認します.さきほどの設定されたデバイスを指定して実行…
$ mode2 -d /dev/lirc0 mode2: could not open /dev/lirc0 mode2: default_init(): Device or resource busy
…失敗です.どうやらlircが動作していたらダメのようです.
$ sudo killall lircd
サービスを止めてもう一度.実行して,リモコンを受光部に向けボタンを押すと
$ mode2 -d /dev/lirc0 space 16777215 pulse 8956 space 4475 pulse 575 space 556 ︰
うまくいきました.
リモコンの学習
ではリモコンを学習してみましょう.今回は日立のテレビのリモコンです.
学習した結果をtv.confファイルに保存します.
$irrecord -n -d /dev/lirc0 tv.conf Press RETURN to continue. //Enter押す Press RETURN now to start recording. //Enter押す //学習させるリモコンの様々なボタンを1秒ずつくらい押し続ける ................................................................................ Found const length: 107411 Please keep on pressing buttons like described above. Please enter the name for the next button (press <ENTER> to finish recording) power //ボタンのラベルを入力(ここではpower) Now hold down button "power". //リモコンの電源ボタンを押す Got it. Signal length is 67 Please enter the name for the next button (press <ENTER> to finish recording) ︰ //学習させたいボタンの数だけ繰り返す.空文でEnterを押すと終了する.
終わると先ほどのファイルに記録されます
# 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 Sun Feb 21 20:39:43 2016 # # contributed by # # brand: tv.conf # model no. of remote control: # devices being controlled by this remote: # begin remote name hitachi_tv bits 16 flags SPACE_ENC|CONST_LENGTH eps 30 aeps 100 header 8933 4501 one 540 1702 zero 540 594 ptrail 539 repeat 8933 2260 pre_data_bits 16 pre_data 0xAF5 gap 107402 toggle_bit_mask 0x0 begin codes power 0xE817 volup 0x48B7 voldown 0xA857 channelup 0x9867 channeldown 0x18E7 change_source 0x906F end codes end remote
nameは初期でファイル名になっていますがわかりやすい名前に書き換えておきます.
このファイルを/etc/lirc/lircd.confに追記します.
$ sudo cat tv.conf /etc/lirc/lircd.conf > /etc/lirc/tmp.conf $ sudo rm /etc/lirc/lircd.conf $ sudo mv /etc/lirc/tmp.conf /etc/lirc/lircd.conf
lircサービスをスタートさせる
$ sudo /etc/init.d/lirc restart [ ok ] Restarting lirc (via systemctl): lirc.service.
リモコン操作してみる
お待たせしました.
登録されているリモコンを確認します.
$ irsend LIST '' '' irsend: hitachi_tv
指定したリモコンの登録されているボタンを確認します.
$ irsend LIST hitachi_tv '' irsend: 000000000000e817 power irsend: 00000000000048b7 volup irsend: 000000000000a857 voldown irsend: 0000000000009867 channelup irsend: 00000000000018e7 channeldown irsend: 000000000000906f change_source
送りたい機能を選び赤外線送信(hitachi_tvのpower)
$ irsend SEND_ONCE hitachi_tv power
赤外線LEDをテレビに向ければリモコンの機能が実現できました.