海上忍のラズパイ・オーディオ通信(48)
ラズパイ・オーディオだって「普通の赤外線リモコン」で操作したい! 方法を教えます
■What's LIRC?
赤外線を利用したリモートコントロールは、そう単純な話ではない。Raspberry Piの場合、赤外線を送受信するためのハードウェア(赤外線モジュール)がないだけでなく、受信した赤外線を"料理"するためのソフトウェアも用意しなければならないからだ。
ソフトウェアといっても、なにかひとつ動作させればOKというわけではない。接続形式(ex. GPIO、USB)と搭載する赤外線ICに応じたドライバを用意しなければならないし、受信した信号がどのフォーマットなのかを解釈するプログラムを用意しなければならない。
「赤外線リモコン」とひと括りにされるが、リモコンの働きとはマイクロ秒単位で繰り返される点灯時間と消灯時間の長さの組み合わせによりビット値を表現することで、家電協フォーマットなどのプロトコルに従うことにより、どのボタンが押されたかを判定している。ソフトウェアの実装に関しては、プロファイルが整備されたBluetoothよりハードルが高いとさえいえる。
そのドライバの提供から各種フォーマットに沿った設定ファイルの提供までをパッケージ化したものが、前述した「LIRC」(http://www.lirc.org)だ。しかし、無数に存在する赤外線モジュールやリモコン子機すべてに対応しているわけではなく、その数は限られる。Bluetoothという競合面のある技術体系が登場してからは、外付け(PC用)赤外線リモコンキットのニーズが低下したこともあり、LIRCでの動作が確認された製品は入手が難しくなってきた。こちらに掲載された製品でRaspberry Piでも利用しやすいUSBタイプのものは、まず店頭ではお目にかかれないはずだ。
例外が、Windows Media Center対応のリモコンセット。このタイプのリモコンであれば、ドライバがLinuxカーネルに統合されているので導入に苦労はないはず。実はこのデバイスにたどり着くまで数種の製品を試しているが、LIRCでサポートされているリモコンでなければソフトの実装に時間がかかり過ぎてしまうため、諦めた経緯があるのだ。
そんなとき、互換ロゴはないがWindows Media Center対応と覚しきリモコンセット「RW-PCM37BK」をAmazonで偶然発見。千円程度と失敗しても諦めの付く価格だったこともあり、思い切って購入してみたところ、首尾よく事が進んだ。外観はイマイチだが、背に腹は代えられない。
RaspbianがベースのOSであればドライバは標準で有効(CONFIG_IR_MCEUSB=m)にされているはずなので、受信部をUSBポートに接続するだけでハードウェアの準備は完了。リモコン上のボタンはマウスに相当するボタンを除き一種のキーボードとして、「/dev/input/by-id/usb-○○○○_○○-event-kbd」というデバイスファイルの形で認識される。これを確認できたら、LIRCの設定ファイル(/etc/lirc/lirc_options.conf)にあるdriver行を「devinput」に、device行を/dev/input/by-id/usb-○○○○_○○-event-kbd」に書き換えれば、とりあえずの準備はOKだ。
システムを再起動すると、LIRCのサービスがリモコンの信号を受信できるようになるので、irwコマンドを実行してキーコードを取得する。LIRCを構成するサービスのひとつ「irexec」は、キーコードと対応するコマンドを設定ファイル(/etc/lirc/irexec.lircrc)に記載しておくと、該当のボタンが押された場合そのコマンドを実行してくれるのだ。つまり、再生/停止ボタンや曲送り/戻しボタンのキーコードを調べ、そのような動作をするmpcコマンドをこの設定ファイルに記述していけば、Windows Media Center対応リモコンで曲操作ができるようになるというわけだ。
- - - - -
リスト1:/etc/lirc/irexec.lircrcの記述例
begin
prog = irexec
button = KEY_POWER
config = sudo shutdown -h now
end
begin
prog = irexec
button = KEY_PLAYPAUSE
config = /usr/local/bin/mpc toggle
end
begin
prog = irexec
button = KEY_NEXTSONG
config = /usr/local/bin/mpc next
end
begin
prog = irexec
button = KEY_PREVIOUSSONG
config = /usr/local/bin/mpc cdprev
end
・
・
・
- - - - -