naoki86star

インターネットの片隅でなにかしら書いてみる

リモコン操作をraspberry piに伝えることができた

 raspberry piの助けを借りて部屋の中でリモコンを使った制御ができる準備をした話。~出来合いの、ボタンがいくつか並んでるような汎用のリモコンからraspberry piを通じて任意のコマンドを起動できる仕掛けまで、この話題でよく紹介されてる手順に今々必要だったプラスアルファをメモ。

 及ばずながら赤外線リモコンの基礎知識すらも持たない状態で、amazonでモノから探してみようとしてめぼし付けたのが、リモコンと受信デバイスのセットと思しきアイテム。Arduinoと互換 Raspberry Pi用とあり、リモコンの操作情報をRaspberry Piで受信して取り出せるのだろうと想像して購入してみた。
 届いたのはこういったもの(赤外線デバイスは基盤に差し込んだだけで接着とかしてない)

f:id:naoki86star:20201018160602j:plain
赤外線受信デバイスとリモコン

 赤外線受信デバイスは裏にVS1838Bと記してある。小さな基盤には、抵抗とVS1838Bを差し込むソケットと、(デバイスとは)独立したLEDが実装されてる。赤外線とかと関係なくこの基盤つないだら点灯する。

 このデバイスを利用する定番な手順の一つとして、lircdという赤外線デバイス管理デーモンを通じて、サードパーティのリモコンの信号を分析し(irrecordというのを使う)、分析した信号パターンを使って自分の用途に合うように赤外線送信機から信号を送って対象機器を任意に操作しよう、という感じと理解。
 自分の場合、すでに持っている製品を制御するのでなく、リモコンの信号を受信してraspberry piのGPIOを通じてデバイスの制御とかプログラムの制御を呼び出したいだけ。なので赤外線送信について自分で実装するのでなく、リモコンの形になっている今回の商品を選んでみた。

 lircdデーモンを中心にして、デバイスから/への信号をsocketデバイスで中継してくれているらしい。リモコン操作(ボタン押下)とその赤外線信号パターンに対するマッピングを作成するために、irrecordで分析対象のリモコン信号を実際に読み込む必要がある。

Raspbian GNU/Linux 10 (buster) on raspberry pi Zero WH
の環境で
lirc/stable 0.10.1-6.2~deb10u1 armhf
のパッケージを使った。

 最終的な結末としては、この環境でのlircパッケージに含まれるirrecordに問題があってが新しくなったgpio-irの出力を正しく読めなくなっていて、出力してくれるconfファイルの値が誤っているので(というかnull値)lircに対してパッチが必要とのこと。このForumがビンゴでここに記載ある方法で対処させてもらった。ただ今回このリモコンの場合、信号が32bitと出力してきたのに対し、begin codes - end codesのブロックすなわち入力アクションに対する信号値が64bit(32bitHEXが2個)ででてきたので、出力の.confのbegin codes - end codesのブロックの値を32bit・2番目の値を削除という編集してあげるということをした。ここまでして、今回購入したリモコンを通じてrasberry piにボタン操作を伝えるようになることができた。

 やっぱり、決まった操作ならキーボードとかタブレットよりもリモコン便利です。

 今回購入した受信デバイスは小さな基盤に実装されているけども、結局目的の機能はVB1838Bデバイスだけで実現できていると思う。市販汎用リモコンと、このVB1838Bデバイスを入手できればよいのだろうと考えた。(基盤のLEDは特に意味がなさそう)まあけれども今回の購入品に限ると汎用リモコン買ってくるよりもこっちが圧倒的に安かったんですよね。

参考)
[Stretch/Buster] Using LIRC with kernel 4.19.X and gpio-ir - Raspberry Pi Forums
Raspi3B+とLIRCでリモコン学習(irrecord)に困った話 - Qiita