l Volumio2 Plugin 赤外線リモコン制御

Volumio2 Plugin 赤外線リモコン制御

 ボタンによるスタート/ストップ、ボリュームのアップ/ダウン等を試したが、ボタンは取り付けが難しく、又ラズパイに手が届くところまで移動しないといけないので、願わくば座ったままワイヤレスが望ましい。

 volumioのプラグインを見てみると赤外線リモコンによるコントロールが出来るプラグインがある事に気が付いた。

 volumioのHELPを見ると、

  FEATURES:

  3 profiles available (JustBoom IR Remote, Odroid Remote, Apple remote)
  Controls: Play, pause, mute, volume, next, previous, seek, repeat and random

ボタンで実現したスタート/ストップ、ボリュームのアップ/ダウンは出来そうである。
試してみることとした。

実施内容は

①プラグインの導入
②赤外線レシーバーの取り付け
③リモコンに対応したデータの読み込み

①プラグインの導入は、
 ボタンを設置した時と同じで「設定」「プラグイン」「Accessories」で「IR Remote Controller」を選択し、出てきた画面からインストールをクリックすればよい。  設定はリモコンの選択だけであるのでAppleを選択する。何れ置き換えることになるのでAppleのリモコンを使うわけではない。

 プラグイン組み込み後、SSHでログインし、lircの動作確認を行う。
volumio@volumio:~$ ps auxw | grep lirc
root      1592  0.0  0.1   3896  1484 ?        Ss   02:24   0:00 /usr/sbin/lircd --driver=default --device=/dev/lirc0 --uinput
root      1595  0.0  0.0   1804    68 ?        Ss   02:24   0:00 /usr/bin/irexec -d /etc/lirc/lircrc
volumio   2691  0.0  0.0   2588   528 pts/0    S+   02:33   0:00 grep lirc
動作している

②赤外線レシーバーの取り付け  使用したレシーバーは十個いくらで買ったCHQ1838、VS1838Bと同等のようである。


 接続したGPIO端子はvolumioの初期設定であるGPIO25。これは
/data/plugins/accessory/ir_controller/index.js
の最後のあたりにある
tartsWith('ir-receiver'); }) === undefined) {
            self.logger.info('HAT did not load /proc/device-tree/ir_receiver!');
            exec('/usr/bin/sudo /usr/bin/dtoverlay gpio-ir gpio_pin=25', { uid: 1000, gid: 1000 },                             ↑
で25番に設定されている。接続GPIO端子を変えたい場合は、ここを修正する。
変更した場合は一旦プラグインをディセーブルしてから、もう一度イネーブルすることで反映されるようである。

VCCは3.3Vを使った。

③使用リモコンに対応したデータの読み込み  ここでは相当苦労した。使ったリモコンがosoyooのキットに付いていたものだったのがさらに輪をかけた。volumioで使っているOSのバージョンはjessieであるがカーネルは、4.19で最新である。
 ネットを見てみるとカーネルが4.19以降のものは設定方法が変わったとか色々書き込みがあり、混乱してしまった。
 そこでvolumioとは関係なく赤外線コントロールのlircを動かそうとした。しかし、これは全く動かなかった。リモコンの信号は検知するものの学習が出来ない。何度試しても学習で失敗する。
 勘違いはプラグインだけでなくlircもインストールしないといけないと思い込み試行錯誤したのがいけなかった。

 もう無理と諦めかけた時、プラグインだけでやってみたらどうなるだろうと思い試してみた。
 何の事は無い、lircが動いているではないか。これで急に望みが出てきた。さらにリモコンも東芝のテレビで使っているものに変えてみると、見事成功しリモコンでのスタート/ストップと音量の上げ/下げが出来た。以下はその顛末である。

 リモコン信号を学習させるためにはまずlircを一旦停止させる。

volumio@volumio:~$ sudo /etc/init.d/lirc stop
[sudo] password for volumio:
[ ok ] Stopping lirc (via systemctl): lirc.service.

確認する。
volumio@volumio:~$ ps auxw | grep lirc
volumio   8345  0.0  0.0   2588   500 pts/0    S+   03:18   0:00 grep lirc
停止している。次に受光していることを確認するために mode2 -d /dev/lirc0 を入力
リモコンの適当なボタンを押して数字が表示されれば動いていることが確認できる。
volumio@volumio:~$ mode2 -d /dev/lirc0
space 16777215
space 4184481
pulse 10521
space 4490
pulse 736
space 492
pulse 682
space 558
動いているのでラズパイにリモコン信号を学習させる。
使用するリモコンはvolumioに設定されているものではないので、コードを学習させる。
IR受光部とリモコンの距離は10~20cmくらいで行なうと安定した学習ができるようである。

結局リモコンの相性なのか東芝のテレビリモコンは成功した。
volumio@volumio:~$ irrecord -n -d /dev/lirc0 test.conf

irrecord -  application for recording IR-codes for usage with lirc

Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de)

This program will record the signals from your remote control
and create a config file for lircd.


A proper config file for lircd is maybe the most vital part of this
package, so you should invest some time to create a working config
file. Although I put a good deal of effort in this program it is often
not possible to automatically recognize all features of a remote
control. Often short-comings of the receiver hardware make it nearly
impossible. If you have problems to create a config file READ THE
DOCUMENTATION of this package, especially section "Adding new remote
controls" for how to get help.

If there already is a remote control of the same brand available at
http://www.lirc.org/remotes/ you might also want to try using such a
remote as a template. The config files already contain all
parameters of the protocol used by remotes of a certain brand and
knowing these parameters makes the job of this program much
easier. There are also template files for the most common protocols
available in the remotes/generic/ directory of the source
distribution of this package. You can use a template files by
providing the path of the file as command line parameter.

Please send the finished config files to  so that I
can make them available to others. Don't forget to put all information
that you can get about the remote control in the header of the file.

Press RETURN to continue.
(エンターを押す)

Now start pressing buttons on your remote control.

It is very important that you press many different buttons and hold them
down for approximately one second. Each button should generate at least one
dot but in no case more than ten dots of output.
Don't stop pressing buttons until two lines of dots (2x80) have been
generated.

Press RETURN now to start recording.
(エンターを押すとともリモコンのキーをランダムに押す。一押しで1ドット点が増え80個まで続ける。)
................................................................................
Found const length: 107382
Please keep on pressing buttons like described above.
さらに同じ方法で80個続ける。
................................................................................
Space/pulse encoded remote control found.
Signal length is 65.
Found possible header: 628 503
Found trail pulse: 603
No repeat code found.
Signals are space encoded.
Removed header.
Signal length is 32
Now enter the names for the buttons.

Please enter the name for the next button (press  to finish recording)
キーの名前を入力後エンター
KEY_PLAY

Now hold down button "KEY_PLAY".
該当キーを長押しする
Please enter the name for the next button (press  to finish recording)
KEY_UP

Now hold down button "KEY_UP".

Please enter the name for the next button (press  to finish recording)
KEY_DOWN

Now hold down button "KEY_DOWN".

Please enter the name for the next button (press  to finish recording)
エンターのみで終了
Checking for toggle bit mask.
Please press an arbitrary button repeatedly as fast as possible.
Make sure you keep pressing the SAME button and that you DON'T HOLD
the button down!.
If you can't see any dots appear, then wait a bit between button presses.

Press RETURN to continue.
エンターを押し、適当なキーを連続入力。
No toggle bit mask found.
Successfully written config file.

学習状況を確認
volumio@volumio:~$ cat test.conf

# Please make this file available to others
# by sending it to 
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Mon Feb 10 05:29:22 2020
#
# contributed by
#
# brand:                       test.conf
# model no. of remote control:
# devices being controlled by this remote:
#

begin remote

  name  test.conf
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  one           605  1627
  zero          605   506
  ptrail        603
  pre_data_bits   16
  pre_data       0x2FD
  gap          107382
  toggle_bit_mask 0x0

      begin codes
          KEY_PLAY                 0x48B7
          KEY_UP                   0x58A7
          KEY_DOWN                 0x7887
      end codes

end remote
上手く出来なかった時は、パラメータが3個あった。原因は良く分からないが、失敗例で使ったリモコンはこの方法でも失敗

こんなメッセージが出る。
Please enter the name for the next button (press  to finish recording)
KEY_PLAY

Now hold down button "KEY_PLAY".
Something went wrong. Please try again. (9 retries left)
Something went wrong. Please try again. (8 retries left)
Something went wrong. Please try again. (7 retries left)
以上でtest.confに学習結果が作成されたのでこれで動作確認する。
方法は、このファイルの
begin remote name test.con  をlircd.confに修正する。
次にこのファイルを/etc/lirc/lircd.confにコピーする。

$ sudo cp test.conf /etc/lirc/lircd.conf

その後lircを起動する。

$ sudo /etc/init.d/lirc start

これでvolumioのコントロールをリモコンから出来るはずである。

なお、プラグイン画面でリモコンの機種をいじった場合lircd.confを書き換えるようになっているので $ sudo cp test.conf /data/plugins/accessory/ir_controller/configurations/Apple Remote A1294/lircd.conf

としておく方が望ましい。

 また、volumio起動時にも上記ファイルを上書きしていることが判明、やはり上記のコピーは必須である。

 しかし、実用にするには実機に赤外線レシーバーをどう取り付けるかを考えないといけない。何分ラズパイのGPIO端子はpHAT DACで見かけ上全部ふさがっているので、その上にはんだ付けでもしないと取りつけれない。また、悩みが増えてしまった。

ここに色んなリモコンの設定例がある
/data/plugins/accessory/ir_controller/configurations/
ここにあるlircd.conf とlircrcの両ファイルでコマンドを実行しているようである。