目次
    1. はじめに
    2. 必要なもの
    3. 回路図
    4. ソフト側
      1. 赤外線送信
    5. Homebridge
    6. さいごに
  1. 参考リンク

はじめに

この記事はQiita Advent CalendarのRaspberry Piカレンダー1日目の記事です。このカレンダーは僕が作成したのですが、ガラ空きなので今からでも書いてくれる方がいたら嬉しいです!

この記事はRapberry PiのGPIOにつなげた赤外線LEDをHomebridge経由でGoogle Home(またはSiri)から操作しようというものです。

また、投稿者がテスト直前で時間がないので一部のスクリーンショットなどが欠けてますが、テスト終了後に修正します。

必要なもの

下記が必要なものです(Raspberry Piやブレッドボードなどは持っているものとします)

項目個数価格
赤外線リモコン受信モジュールOSRB38C9AA1個100
5mm赤外線LED 940nm OSI5LA5113A1~100
[MOSFET 2N7000](https://akizukidenshi.com/catalog/g/gI-09723/)1個20
[MOSFET 55V11A IRFU9024NPBF](http://akizukidenshi.com/catalog/g/gI-06026/)1個60
4.7kΩ 1/2W(x100)1個100
27Ω 1W(x100)1個200

回路図

黒色の線が受信部で、赤色の線が送信部です。

draw.ioで書いたら想像以上にぐちゃぐちゃになっちゃったので今度Fritzingで書き直します。抵抗は左が27Ω。右が4.7kΩ

ソフト側

ハード側は完成したので、続いてソフト側です。具体的にはGPIOで赤外線の送受信をできるようにしてHomebrdigeを入れます。

赤外線送信

まずはpigpioをインストールして起動

<code>$ sudo apt install pigpio python-pigpio python3-pigpio
# pigpioの自動起動
$ sudo systemctl enable pigpiod.service
# pigpioを起動
$ sudo pigpiod

続いてGPIOの設定をします。

GPIO17はOutput(w)、出力はlowに設定

GPIO18はInput(r)、pull up(u)に設定

$ echo 'm 17 w   w 17 0   m 18 r   pud 18 u' > /dev/pigpio
# 自動起動
$ crontab -e
# 最終行に追加
@reboot until echo 'm 17 w   w 17 0   m 18 r   pud 18 u' > /dev/pigpio; do sleep 1s; done

赤外線の送受信

$ python3 irrp.py -r -g18 -f codes LED:on --no-confirm --post 130

このように打つと受信待機状態になるのでリモコンなどの信号を受信部に向けて送信してください。ここではLEDを操作するために”LED:on”としていますが、LEDを他の名前に変えたりonのところをoffにして学習できます。

$ python3 irrp.py -p -g17 -f codes light:on

これで任意のデバイスが操作できたら成功です。

もしうまくいかなかったら参考元のサイトで詳しく対処法が書かれているので見てみてください。

シェルスクリプト化

ここまでで赤外線リモコンとして操作することは可能になりました。

$ mkdir data

学習用のコマンドを作ります。dataにpi-learn.shというファイルを作成。

$ cd data
$ nano pi-learn.sh

内容は以下の通り。

#!/bin/sh
name=$1
python3 ~/irrp.py -r -g18 -f ~/data/pigpio.json --no-confirm --post 130 "$name"

送信用のコマンドを作成。dataにpi-send.shを作成。

#!/bin/sh
name=$1
python3 /home/pi/irrp.py -p -g17 -f /home/pi/data/pigpio.json "$name"

実行権限を付与。

$ chmod 755 ~/data/pi-learn.sh ~/data/pi-send.sh

ここで動作確認してみましょう。

# 点灯コードを学習
$ bash ~/data/pi-learn.sh lighton
# 点灯コードを送信
$ bash ~/data/pi-send.sh lighton

Homebridge

ここまででターミナルから操作することが可能になりました。続いてHomebridgeを入れてスマートフォンや、スマートスピーカーから操作できるようにします。

Homebridgeのインストール

$ sudo apt install nodejs npm
$ sudo apt-get install libavahi-compat-libnssd-dev
$ sudo npm install -g -unsafe-perm homebridge

Homebridge CMD

$ sudo npm install -g homebridge-cmd

ブラウザから設定をしていきます。

RaspberryPiのIPアドレスの後に「:8581」を付けてアクセスします。すると、かっこいい画面が出てくるので、初期ユーザ/パスワードのadmin/adminを入力してログインします。

こんな感じのダッシュボードが出てくるので、コンフィグから設定を書いて行きます。コンフィグの内容はこんな感じ。”accessories”のなかにHomebridge CMD用のコンフィグを付け足します。

{
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:ED:CE:30",
        "port": 51826,
        "pin": "031-46-160"
    },
    "description": "HomeBridge Example",
    "accessories": [
        {
            "accessory": "CMD",
            "name": "シーリングライト",
            "on_cmd": "bash /home/pi/data/pi-send.sh lighton",
            "off_cmd": "bash /home/pi/data/pi-send.sh lightoff"
        }
    ]
}

iPhoneで左上の二次元コードを読み取ることでHomeアプリから操作が可能になります。

Homebridge Google Smart Home

ダッシュボードのプラグインでHomebridge Google Smart Homeをインストールします。

そのあと、プラグインの歯車アイコンから設定画面を開いてGoogle Accountと連携します。

次にGoogle Homeアプリを開き、左上のプラスを押します。そこで一番上の”Set up device”を選択後Work with GoogleからHomebridgeを探し出して登録すると使えるようになります。

さいごに

正直Raspberry Pi3を赤外線リモコンとして使うのはオーバースペックすぎますね。次秋葉原に行った時に消費電力の低いzeroを買ってきて載せ換えようと思います。また、やる人がいるかはわかりませんがRaspberry Pi3で作る場合USB(Ethernet)とHDMIへの電力供給は止めることをお勧めします。多少消費電力を落とせます。

また、これからもHomebrdigeなどを活用してスマートホーム化を進めたいと思います。

参考リンク

参考にさせてもらいました。ありがとうございます。