Google HomeとRaspberry Piで家電を操作
2018年末Google Homeを購入し、英語翻訳に重宝していますが、せっかくなので他のことにも使えないかとRaspberry Piを使った赤外線リモコンを作り、家電を操作できるようにしました。
下記記事をを参考にさせてもらいました。非常にわかりやすく順番に辿っていけば見事に作成できました。
格安スマートリモコンの作り方
私自身の回路の写真なども載せていますので参考なればと思います。
準備するもの
- Raspberry Pi Zero x 1個
- Raspberry Pi Zero用ユニバーサル基板 x 1個
- ピンソケット(メス)2 x 20(40P) x 1個
- 赤外線リモコン受信モジュールOSRB38C9AA x 1個
- 5mm赤外線LED 940nm OSl5LA5113A x 1個
- MOSFET 2N7000 x 1個
- PchパワーMOSFET(55V11A) IRFU9024NPBF x 1個
- カーボン抵抗(炭素皮膜抵抗) 1/2W 4.7kΩ x 1本
- カーボン抵抗(炭素皮膜抵抗) 1W27Ω x 4本
下記は試験確認用
- ブレッドボード x 1個
- ブレッドボード・ジャンパーワイヤ(オス-メス) x 10本程度
工具類
- はんだ
- 電圧計
- ニッパー
手順
1. Raspberry Pi Zeroの環境設定
Raspberry Piの設定を行います。ディスプレイ、キーボード、マウスが必要ない方法を各リンクにまとめています。
2. 赤外線送受信回路
赤外線リモコン受信モジュールの回路
赤外線リモコン受信モジュールは、家庭の電気機器の赤外線リモコンからの信号を受け、その信号パターンを保存する為に使用します。保存した信号パターンは、次に取り付ける赤外線LEDから出力する信号として使用します。
例えば、エアコンで「冷房」操作をRaspberry Piから行いたい場合、ラズパイの赤外線LEDからエアコンに「冷房」操作に対応する赤外線信号を出力する必要があります。その赤外線信号のパターンをRaspberry Piに保存するために、エアコンのリモコンで「冷房」操作をしたときに赤外線信号を、Raspberry Piの赤外線リモコン受信モジュールで読み取ります。
回路を接続する
赤外線リモコン受信モジュールは、電圧を入力するための3.3VとGND、そして受信した赤外線信号の出力端子の3端子からなります。3.3Vは物理番号1、GNDは物理番号6、そして信号出力はGPIO18(物理番号12)に接続します。
赤外線LEDの回路
赤外線LEDは流す電流を多いほど、強い赤外線を出力します。
赤外線LEDドライブ回路の決定版を参考にしました。
pigpioを使用したGPIOの制御
GPIOを制御するために、pigpioライブラリを使用します。次のリンクを参考にしてください。
pigpioのインストール
pigpioの設定
GPIO17をoutput(w)に、出力を low(0)に設定します。
GPIO18をinput(r)に、かつpull up(u)に設定します。
echo 'm 17 w w 17 0 m 18 r pud 18 u' > /dev/pigpio
Raspberry Piの起動時に、自動的にGPIOの設定を行うようにcrontab
を設定します。
crontab -e
@reboot until echo 'm 17 w w 17 0 m 18 r pud 18 u' > /dev/pigpio; do sleep 1s; done
赤外線を操作するためのスクリプトをダウンロードします。
curl http://abyz.me.uk/rpi/pigpio/code/irrp_py.zip | zcat > irrp.py
学習
例えば冷房のリモコンをONにする場合、
python3 irrp.py -r -g18 -f codes cooling:on
もし実行時にModuleNotFoundError: No module named 'pigpio'
のエラーが発生したら、pipでpigpioをインストールします。
pip install pigpio
python3 irrp.py -p -g17 codes cooling:on
で動作することを確認します。
他にも、シーリングライトで試してみました。シーリングライト の真下から半径2mほどの範囲にリモコンをおけば動作しましたが、その範囲外にリモコンを置くと、反応しませんでした。
赤外線の反応が弱い時の対策
下の写真のように、赤外線LEDに直列接続した27Ωを並列に2つ接続し、流れる電流を2倍にしました。また、赤外線LEDの回路は2セット接続することで反応が非常によくなりました。
ブレッドボードの配線はごちゃごちゃしていますが、最終的にはスッキリした回路になりました。
3. Hubotの設定
HubotをRaspberry Piで起動させる為に、Node.js
とRedis
のインストールが必要です。設定方法はこちら
hubot-broadlink-rmを導入
cd ~/homebot
$ npm install hubot-broadlink-rm # hubotを拡張するスクリプトをインストール
external-scripts.json
を編集します。
[
"hubot-broadlink-rm", // 追加
:
]
あとは参考サイトの手順で進めていけば...
$ cd
$ mv irrp.py ~/homebot/bin
$ cd ~/homebot
$ mkdir data
学習用のシェルスクリプトbin/pi-learn.sh
を作成。
#!/bin/sh
name=$1
python3 bin/irrp.py -r -g18 -f data/pigpio.json --no-confirm --post 130 "$name"
送信用のシェルスクリプトbin/pi-send.sh
を作成。
#!/bin/sh
name=$1
python3 bin/irrp.py -p -g17 -f data/pigpio.json "$name"
$ chmod 755 bin/pi-learn.sh bin/pi-send.sh
$ bin/pi-learn.sh coolingon
$ bin/pi-send.sh coolingon
これでシェルスクリプトでの学習と送信は完了。次にHubotのコマンドに紐づけます。
$ bin/hubot # hubotを起動 (20秒ほどかかるので、のんびり待つ)
homebot> homebot command pi:learn bin/pi-learn.sh '#' # 学習コマンドを登録
set !pi:learn to bin/pi-learn.sh '#'
homebot> homebot command pi bin/pi-send.sh '#' # 送信コマンドを登録
set !pi to bin/pi-send.sh '#'
homebotから赤外線コマンドを学習します。
homebot> homebot send pi:learn(coolingoff)
# リモコンの消灯ボタンを押して、コードを学習させます。
# 学習コマンドの実行が終わると、以下のメッセージが表示されます。
bin/pi-learn.sh 'coolingoff'
Recording
Press key for 'coolingoff'
Okay
登録したコマンドを送信します。
homebot> homebot send pi(coolingoff)
bin/pi-send.sh 'coolingoff'
これでhubot上のshell adapter
から動作ができることが確認できました。
4.Slackからの操作
https://slack.com/apps でhubotを検索して、hubotアプリをインストールします。
HUBOT_SLACK_TOKEN
を取得します。
$ cd ~/homebot
$ nano bin/hubot
:
export PATH= ...
export HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # tokenを追加する
slackと連携させるにはadapter
オプションにslack
を指定します。
$ bin/hubot --adapter slack
準備OKです。
slackからhomebotにコマンドを投げます。
5.Google Home からの操作
IFTTTを使用して、Google Homeからの命令とslackへのコマンドを紐づけます。