ミニマルなIRKitクローンを作ってiOSから家電を制御する
2016.09.20 · 1872 words · 4 minute read
どうも、お久しぶりです。生きてます。
さて、iOS 10が配信開始されて新たに登場した「ホーム」アプリのおかげで、日本ではあんまり注目されてなかったHomeKitが熱くなってるみたいです。(個人的感想)
HomeKitではPhilips Hueを操作できたりするのですが、そもそも対応していない家電を対応させるためのDIY的手法も色々存在しています。
例えば、HomebridgeとIRKitを組み合わせた方法。
Raspberry PiにHomebridgeを入れて、homebridge-irkitでIRKitを叩くみたいなお手軽スマートハウスのやり方は検索すれば山ほど出てきます。
そしてここで使われるIRKit、赤外線リモコンの信号を送受信できるオープンソースハードウェアなのですが、大人気なんですね。
在庫切れ入荷予定無しで手に入らないんだけど(キレ)という声も周囲にチラホラあったり。
というわけで、欲しいけど無いなら作りましょう。
自分で作ると安いし、面白いですし…
回路はこんな感じ。
必要な部品は以下の通り。
ESP-WROOM-02でミニマルなIRKitクローンを作る
もしESP-WROOM-02とかブレッドボードとか抵抗とか…持ってるなら、赤外線LEDと赤外線リモコン受信モジュールだけ買っちゃってください。
私はオリジナルのESP-WROOM-02搭載ボードとプロトタイプ・シールド基板を作っているので、これを使ってサクッと作りました。
中身のソフトウェアはIRremoteESP8266とaJSONを使って100行程度で実現しています。
コードはこちら。
9SQ/minIRum: A minimal implementation of infrared sender/receiver like IRKit by ESP8266
Arduino core for ESP8266をArduinoに入れて、コードをビルドしてESP-WROOM-02に書き込んであげてください。
あとは、IRKitみたいに GET /messages で最後に受信したリモコンのコードが取得できるので、これをメモしておいて…
POST /messages にこれを投げてあげれば、リモコンと同じように発光してくれます。
もし、エアコンなどの長めのコードを飛ばすリモコンの場合は、IRremoteESP8266/IRremoteESP8266.hの#define RAWBUF 100を200とかにしてあげれば取れるかも。
あとはHomebridgeと組み合わせれば、このようなことが出来ます。
とりあえずシーリングライトをON/OFFできるようにしてみた。Homebridge+ESP8266 pic.twitter.com/xnYNSa5BFn
— けーいち (@9SQ) 2016年9月14日
Raspberry PiにHomebridge諸々を入れるのは、検索すればいっぱい記事が出てくると思います。
ただ、Raspbianはapt-getで取れるnodeが古かったりするので、楽をしたいならArch Linux(RasPi2/RasPi3)をお勧めします…
pacman -S git python2 nodejs npm nss-mdns avahi
systemctl enable avahi-daemon
systemctl start avahi-daemon
npm install -g homebridge
npm install -g homebridge-irkit
mkdir .homebridge
cd .homebridge
nano config.json
config.jsonは以下のような感じで。
irkit_hostは適宜変更してください。
{
"bridge":
{
"name": "Homebridge",
"username": "B8:27:EB:4D:31:D7",
"port": 51826,
"pin": "031-45-154"
},
"accessories": [
{
"accessory": "IRKit",
"name": "ライト",
"irkit_host": "minirum-a492cd.local",
"on_form": {"format":"raw","freq":38,"data":[3550,1700,500,400,500,400,450,1300,500,1300,500,400,450,1300,500,400,500,400,450,450,450,1300,500,400,500,400,450,1300,450,450,450,1300,500,400,450,1300,500,450,500,400,500,1300,500,400,500,400,450,450,450,450,450,1300,500,400,500,1300,500,1300,450,450,500,1300,500,400,500,400,500,400,450,450,500,1300,500,400,500,450,450,1300,500,400,500,400,450]},
"off_form": {"format":"raw","freq":38,"data":[3550,1700,500,400,500,400,450,1300,500,1300,450,450,500,1300,500,400,500,400,500,400,500,1300,500,400,500,400,500,1300,500,400,450,1300,500,400,500,1300,450,450,500,400,450,1300,500,400,500,400,450,450,450,450,500,1300,450,1300,450,1300,450,1300,450,450,500,1300,450,450,450,450,450,450,450,1300,500,1300,500,400,500,400,450,1300,500,400,500,400,500]}
}
]
}
ちなみに、この赤外線コードはPanasonic製のシーリングライトのON/OFFです。
homebridgeを立ち上げて、iPhoneとペアリングします。
homebridge
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loaded plugin: homebridge-irkit
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Registering accessory 'homebridge-irkit.IRKit'
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] ---
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loaded config.json with 1 accessories and 0 platforms.
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] ---
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loading 1 accessories...
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] [ライト] Initializing IRKit accessory...
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
┌────────────┐
│ 031-45-154 │
└────────────┘
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Homebridge is running on port 51826.
iOS 10のデバイスで「ホーム」アプリを起動して「アクセサリを追加」、Homebridgeが表示されるのでコードを入力してペアリングを完了させます。
Homebridgeを追加したら、configに書いたアクセサリ(上記例では「ライト」)が表示されると思うので、これを追加すれば制御できるようになります。
Raspberry PiでのHomebridgeの自動起動は以下を読むと早いです。
Arch Linuxなら、Running Homebridge on Bootup (systemd)のセクションです。
https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi
homebridge-irkitではON/OFFの単純操作しかできないので、そのうち色々なコードを叩けるhomebridgeのプラグインでも書こうかな…
ちなみに、Raspberry Piにhomebridge-cmdを入れて、GPIOにSSRを繋いであげれば、リモコンの無いAC100Vの機器もON/OFFできます。