Edited at

Raspberry Pi/赤外線リモコンアドバンスをRaspPi Zero Wで使ってみる

More than 1 year has passed since last update.


はじめに

事の発端はラズベリー・パイ専用 学習リモコン基板が発売されたと聞いて絶対買わねばと思い東京出張のときにツクモロボット館に買いに行ったら売り切れててがっかりしてコンデンサーでもさがすかーと思って千石電商に行ったら偶然前バージョンのUSB赤外線リモコンアドバンスを発見した。

Windows用だけど要はシリアル通信だからなんとかすればラズパイで動くんじゃね?と思って衝動してやってみた。

結論、Linuxで動くCLIが用意されていたのでかなり簡単にできました。


できた図

IMG_20171229_203354.jpg

赤外線リモコンアドバンスはUSB Mini B メスでRaspberry Pi Zero WはUSB Micro B メス。

手持ちにMicro Bオス<->Aメスの変換ケーブルとAオス<->Mini Bオスの変換プラグがあったのでつなぎ合わせてこうなりました。


セットアップ

https://qiita.com/Kaz-su/items/93ec120b4bb90de7da2b

上記を参考にさせていただいた。ありがとうございます。

ざっくりいうと書いてあるとおりにすればOK。

sudo apt install libusb-1.0.0

git clone https://github.com/Drunkar/bto_ir_advanced_cmd.git
cd bto_ir_advanced_cmd
make
sudo make install
bto_advanced_USBIR_cmd --help

ヘルプが表示されたらインストール完了です。


リモコン信号を記憶させる

まず以下のコマンドを実行します。



bto_advanced_USBIR_cmd -r

受信を開始しました。

受信を開始しました。 が表示された後、赤外線リモコンアドバンスの受光部に向かってリモコンのボタンを押します。今回はエアコンのONスイッチを押してみました。ボタンを押すと同時に赤外線リモコンアドバンスの緑のLEDが光って受信したことがわかります。

受信できたら、

bto_advanced_USBIR_cmd -s

受信を停止しました。

で受信を終了します。


リモコン信号を送信する

以下のコマンドで data.txt に受信した信号を書き出します。

bto_advanced_USBIR_cmd -g | tee data.txt

以下のような出力で、 data.txtに信号が書き込まれます。

取得したbyte配列の要素数:424

0x00,0xe7,0x00,0x4e,0x00,0x12,0x00,0x4e,0x00,0x13,0x00,0x4e,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x4d,0x00,0x13,0x00,0x1d,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x4c,0x00,0x14,0x00,0x4e,0x00,0x13,0x00,0x1e,0x00,0x13,0x00,0x1d,0x00,0x15,0x00,0x1d,0x00,0x13,0x00,0x1f,0x00,0x13,0x00,0x1e,0x00,0x13,0x00,0x1d,0x00,0x14,0x00,0x4d,0x00,0x13,0x00,0x4d,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x4d,0x00,0x13,0x00,0x1d,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x4d,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x1d,0x00,0x14,0x00,0x4c,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x4c,0x00,0x15,0x00,0x1d,0x00,0x14,0x00,0x1d,0x00,0x14,0x00,0x1e,0x00,0x12,0x00,0x1f,0x00,0x14,0x00,0x1d,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x1e,0x00,0x12,0x00,0x1f,0x00,0x13,0x00,0x1e,0x00,0x13,0x00,0x1f,0x00,0x13,0x00,0x1d,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x1d,0x00,0x14,0x00,0x1e,0x00,0x14,0x00,0x1d,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x1d,0x00,0x13,0x00,0x1f,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x1d,0x00,0x13,0x00,0x1e,0x00,0x13,0x00,0x1f,0x00,0x13,0x00,0x1e,0x00,0x13,0x01,0x6a,0x00,0xe6,0x00,0x4e,0x00,0x13,0x00,0x4d,0x00,0x14,0x00,0x4c,0x00,0x13,0x00,0x1f,0x00,0x12,0x00,0x1f,0x00,0x13,0x00,0x4d,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x1e,0x00,0x14,0x00,0x4b,0x00,0x15,0x00,0x4d,0x00,0x13,0x00,0x1e,0x00,0x13,0x00,0x1d,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x1f,0x00,0x13,0x00,0x1d,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x4d,0x00,0x13,0x00,0x4d,0x00,0x13,0x00,0x1f,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x4c,0x00,0x14,0x00,0x1d,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x4d,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x1d,0x00,0x13,0x00,0x4d,0x00,0x13,0x00,0x1f,0x00,0x12,0x00,0x4d,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x1d,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x1e,0x00,0x12,0x00,0x1e,0x00,0x14,0x00,0x1d,0x00,0x14,0x00,0x1e,0x00,0x14,0x00,0x1d,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x1d,0x00,0x14,0x00,0x1e,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x1d,0x00,0x14,0x00,0x1d,0x00,0x13,0x00,0x1f,0x00,0x13,0x00,0x1e,0x00,0x14,0x00,0x1d,0x00,0x13,0x00,0x1e,0x00,0x13,0x00,0x1f,0x00,0x13,0x00,0x1d,0x00,0x14,0x1e,0x0d

以下のコマンドで、書き込んだ信号を赤外線リモコンアドバンスから発信できます。

bto_advanced_USBIR_cmd -d cat data.txt

エアコンが動きました。LEDが3つも付いてるせいか3mくらい離れたところからでも信号が届くみたい。これいい。

さて、これでシェルでも組めばOKなんだけど、バックグラウンドプロセスで動くプログラムを想定すると、 cat を使うことができないんで、システムコマンドで bto_advanced_USBIR_cmd を動かす想定でプログラムを組んでおくっていうか上記記事のコピペです。


ir_send.py

#!/usr/bin/python3

import os
import sys

def send(code):
os.system('/usr/local/bin/bto_advanced_USBIR_cmd -d ' + code)

if __name__ == '__main__':
argv = sys.argv
try:
filename = argv[1]
if os.path.isfile(filename) is True:
f = open(filename, 'r')
code = f.read()
send(code)
sys.exit(0)
else:
sys.stderr.write('File not found.\n')
sys.exit(-1)

except (OSError, IndexError):
sys.stderr.write('File not found.\n')
sys.exit(-1)


chmod +x send_ir

./send_ir data.txt

動いた。


まとめ

特にハマりどころなく動いてすごいなと思った。あとはアプリをつくってインターネット経由でON OFFできるようにすればIoT家電的な感じにできますね。学習リモコンって買おうと思って調べたらけっこう高いものだったので余ってるラズパイとこういうモジュールを組み合わせてできると安くできていいですね。Zero Wだと小さいし。