Raspberry pi で赤外線リモコン送信

投稿者: | 2019/02/11

lircを使ってみる

Raspberry piで赤外線リモコンといえば、lirc。
お手軽にリモコンコードを送信することができました。しかし、受信側の機器によって(というか一般的に)は誤動作防止のために複数回同じコードを送信する必要があるあります。繰り返し送信するときには何も送信しない[GAP]期間を入れるのですが、これが上手く行きません。リモコンコードの最初のフレーム送信開始から次のフレームを送信する前までの期間を一定にする必要があるのに、どうしても長めに[GAP]が挿入されてしまいます。オプションの設定もしているのですが、上手く動作するときもあれば、いつの間にか動作しないようになっているとか…

また、lircは予め送信するコードを/etc/lirc/lircd.conf.d の中に設定ファイルとして書いておかなければなりません。ダイナミックにコードを生成して送信するのには向いていないようです。

pigpioを使ってみる

lircがうまくいかず、次に手を出したのがpigpioです。なかなか優れたライブラリで、pigpioのPWMを使えば意外と簡単にリモコン送信ができました。ただ、PWMだとある程度決まった周波数でしかPWMを生成してできないのですね。代わりに、wave_chain でgpio制御とディレイを組み合わせて思い通りにのコードパターンを作ることができました。pigpioは中々よく考えられています。便利に使えそうです。

しかしながら、作ったwave_chainを送信するとオーディオアウトから「ブー」という音がします。電源かGNDから乗っているのかなと思い、電源GNDを分離してみましたが改善しません。
また、Raspberry pi起動直後は正常に出力したリモコンコードで制御ができているのですが、しばらくすると動作しなくなってしまいます。

どうやら、一度でもオーディオ再生をすると、リモコンコードのパターン(周波数やパルス幅)が変化(周波数は低くなり、幅は延びる)してしまい、機器側でリモコンコードとして認識しなくなってしまうようです。
どうやらDMAに関係しているようです。

Raspberry piでGPIOを制御するならpigpioが使いやすいようです。オーディオを使わなければタイミングもしっかりしていそうですので、別の機会があればpigpioを使ってみようと思います。

lircではリモコンコードのパターンはオーディオの影響を受けていないようでしたが、ギャップはやはり延びていました。こちらも使えません。

色々試してみましたが、上手く行きません。Raspberry piで音声を出さなければ良いのですが、スマートスピーカーとして使おうとしたら音声出力は必要です。このためだけにもう一つRaspberry piを使うのもなんだかなぁということで、リモコン送信の部分はワンチップマイコンにすることにします。Raspberry piからUARTで制御することにします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください