2015年2月2日月曜日

Volumio を赤外線リモコンでコントロールする (1) lircの導入

かなり手こずったので,細かく記録しておく.その (1) は lirc の導入まで.

とりあえず,システムを最新の状態にする.

# apt-get update

lirc をインストールする.

# apt-get install lirc

ここまでは問題なし.


Raspberry pi への導入事例を参考に,/etc/modules を編集.

lirc_dev
lirc_rpi gpio_in_pin=17

以上を追記し,reboot.

モジュールのロードを確認.

# lsmod | grep lirc
lirc_dev     10391     0
rc_core     17576     lirc_dev

あれ? 本当は lirc_rpi なんたらという行が見つからなくてはいけない.
/dev/lirc0 ができているかを調べると…

# ls /dev/lirc*

なにもない.
つまり,lirc の組み込みに失敗している.
あちこち調べると,firmwareを更新している事例がある.とりあえず更新しておこう.

# wget http://goo.gl/1B0fJ -O /usr/bin/rpi-update
# chmod +x /usr/bin/rpi-update
# rpi-update

firmware の更新はできた.

# reboot

しかし,/dev/lirc* はできない.
dmesg を調べる.

# dmesg | grep lirc

gpio chip not found! というメッセージが見つかる.

ここで悩んで,とりあえず,システムを upgrade しておこうと思った.

# apt-get upgrade

後になってみると,この,upgrade が話をややこしくしたようだ.なので,ここからはこれを実行した場合の記録なのだが,upgrade していないときはいろいろと違うかもしれない.

結局,upgrade しても同じエラーが出てしまう.
で,あちこちググってみると,あるバージョン以降の kernel では /boot/config.txt に記述しないとドライバが読み込まれないらしいことがわかった.つまり,/etc/modules に書いたり,modprobe ではだめらしい.upgrade 前でも出ていたので,おそらく 3.12.x でもこうする必要があるのだろう.

# nano /boot/config.txt

dtoverlay = lirc-rpi

という1行を追加.
reboot.

# dmesg | grep lirc

lirc_rpi: driver registered!
が見つかるので,読み込みには成功した模様.

# lsmod | grep lirc
lirc_rpi     8416   0
lirc_dev  11060   1   lirc_rpi
rc_core  23626   1   lirc_dev

# ls /dev/lirc* -la
crw-rw---T  1  root  video  247, 0  Jan  1  1970  /dev/lirc0

デバイスはできている.

先行事例を見ると,GPIOピンへの割り当てを以下のようにしてチェックしている.

# mount -t debugfs debugfs /sys/kernel/debug
# cat /sys/kernel/debug/gpio

すると,

gpio-16  (ACT     ) out hi
gpio-22  (sysfs    ) out lo
gpio-25  (sysfs    ) out lo

ここに,lirc の押さえた input 用と output 用のピンが表示されるはずなのだが,出ない.
/etc/modules の記述と /boot/config.txt の記述が矛盾してるとかのせいかもしれないと思い,/etc/modules の記述を削除して,reboot するも,特に変わらず.

/boot/config.txt にはピンへの割り当ても記述できるようなので,以下のように変更.

dtoverlay=lirc-rpi, gpio_in_pin=14, gpio_out_pin=22

デフォルトでは,17 を in,18 を out に割り当てる模様.

debugfs のマウントではやはり何も出ないが,とりあえず GPIO 14 (P8) に受光モジュールを接続してみる.

使用したモジュールは Rohm の RPM7138-R (マルツから通販で).これは 5 V 駆動タイプ.一方,Raspberry pi の GPIO は 3.3 V で,入力は 5 V-tolerant ではないとあるので,出力を少し抑えないとまずそう.図のように,出力に39kΩの抵抗を入れて分圧されるようにしてみた.


最初はブレッドボードで実験回路を接続.
この状態で,/dev/lirc0 を見てみることに.

# mode2 -d /dev/lirc0

リモコンから赤外線をモジュールに向けてみると,標準出力に信号パターンが返ってきている.つまり,デバイスとしては認識・動作していて,debugfs には mount できなくなっていたということのようだ.

以上で,lirc は導入でき,また,リモコンからの信号を Raspberry pi で捉えるところまではできた.
(続く)


0 件のコメント:

コメントを投稿