LoginSignup
5
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-05-16

はじめに

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

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

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

できた図

IMG_20171229_203354.jpg

赤外線リモコンアドバンスはUSB Mini B メスでRaspberry Pi Zero WはUSB Micro B メス。
手持ちにMicro Bオス<->Aメスの変換ケーブルとAオス<->Mini Bオスの変換プラグがあったのでつなぎ合わせてこうなりました。

セットアップ

上記を参考にさせていただいた。ありがとうございます。
ざっくりいうと書いてあるとおりにすれば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だと小さいし。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6