家電を制御する方法
概要
WiFi経由でHTTPリクエストして家電を制御したい、と考えました。
Raspberry Piだと家電に組み込むには大きすぎるし、すでに持っていたArduino UnoではWiFi周りの設定が複雑そうでモチベーションが低かったのですが、たまたまESP-WROOM-02の存在を知ることになり、調査したところ、価格やサイズ面でぴったりだと分かり、早速作り込みを始めました。
ESP-WROOM-02のプログラミングはサンプルがしっかりしているので最低限の修正だけで非常に簡単にできました。逆に、回路部分は私が不慣れや知識不足の為に、長時間悩んだり、試行錯誤が多く、なかなかうまく動作しませんでした。
最終的には、HTTPリクエストによって家電の操作ボタンを押したり離したり相当の
操作ができるようになりました。つまり、操作ボタンを持っている家電であれば、実質どんな家電でも、curlコマンドで制御できるようになりました。
環境
ESP-WROOM-02開発ボード
Mac OS X 10.11
Arduino IDE 1.6.8
回路設計
制御信号を送る方法
最初にリレーを使う方法を採用したが、
やはり動作音が気になるし、サイズも大きい。
家電に組み込むことを考えると難があると考え
別方法を検討。
トランジスタを使ったスイッチ回路を考えたが、
家電の電圧を確認したところ、
家電の各スイッチの電位差がバラバラで、共通のGNDが無かった。
トランジスタのスイッチ回路は、各GNDが共通になる為。
また、家電から電源供給してもらうことを考えているので、
家電のスイッチと制御のGNDを共有するのは必須だった。
以上から、トランジスタのスイッチ回路は使えない判断。
最後に、フォトカプラを使った方法を検討。
フォトカプラリレーという200円強のものも有ったが、
目的は制御であって大電流を流すことではないので、
普通のフォトカプラという20円のものを購入。
フォトカプラは、入力と出力の間の信号の伝達方法が光で
電気的な接続がないので、
電位差が異なっていても信号を送ることが可能。
フォトカプラの型番
TLP785(GB F)
回路
+--------------------+ +-------------------------+
| ESP-WROOM-02 | +-------------+ | Consumer electronics |
| GPIO 2 |---------------|1 TLP785 4|--------|SW1+ Power on |
| | +---LED--|2 3|--------|SW1- |
| | | +-------------+ | |
| | | | |
| | | +-------------+ | |
| GPIO15 |---------------|1 TLP785 4|--------|SW2+ Power off |
| GND |--+ +---LED--|2 3|--------|SW2- |
+--------------------+ | | +-------------+ | |
| R=1K +-------------------------+
| |
+---+
|
GND
スイッチ1は電源ON、スイッチ2は電源OFFに対応しています。
プログラミング
HTTPリクエストをGPIOの出力に反映させる方法
プログラムは以下のページを参考にした。
http://deviceplus.jp/hobby/entry035/
なお、プログラムの書き込みには、以下のページを参考にした。
http://deviceplus.jp/hobby/entry034/
変更した箇所は以下。
・WiFiのSSIDとパスワード
・初期値の変更
// prepare GPIO2
pinMode(2, OUTPUT);
digitalWrite(2, 0);
pinMode(15, OUTPUT);
digitalWrite(15, 0);
pinMode(13, OUTPUT);
digitalWrite(13, 0);
pinMode(12, OUTPUT);
digitalWrite(12, 0);
・GPIOポートを4つ制御できるようにしました。2、15、13、12は隣に並んでいるので使いやすかった為です。
if (req.indexOf("/gpio2/0") != -1)
//val = 0;
digitalWrite(2, 0);
else if (req.indexOf("/gpio2/1") != -1)
//val = 1;
digitalWrite(2, 1);
else if (req.indexOf("/gpio15/0") != -1)
digitalWrite(15, 0);
else if (req.indexOf("/gpio15/1") != -1)
digitalWrite(15, 1);
else if (req.indexOf("/gpio13/0") != -1)
digitalWrite(13, 0);
else if (req.indexOf("/gpio13/1") != -1)
digitalWrite(13, 1);
else if (req.indexOf("/gpio12/0") != -1)
digitalWrite(12, 0);
else if (req.indexOf("/gpio12/1") != -1)
digitalWrite(12, 1);
面倒だったのでHTTPリクエストのレスポンスはちゃんと書かなかったです。
動作が不安定な時はちゃんと書いた方がどこまで動作しているのかを確認できるので良いと思います。
家電への組み込み
今回は、家電内部への組み込みはせず、一度家電を分解してスイッチの両端をリード線(合計4本)で引き出しておき、組み立て直したところで、動作確認を実施。
また、電源もUSB電源を使用した為、実際に家電の内部へ組み込む場合と異なった構成で実施。
実際に組み込む場合は、自分で5V電源を家電内部で確保が必要。この辺りは今後の課題。
家電
|(4本)
ブレッドボード
|
ESP-WROOM-02開発ボード
動作確認
スイッチONの確認。
$ curl 192.168.1.102/gpio2/0
$ sleep 0.5
$ curl 192.168.1.102/gpio2/1
スイッチOFFの確認。
$ curl 192.168.1.102/gpio15/0
$ sleep 0.5
$ curl 192.168.1.102/gpio15/1
実際に家電が動作すれば動作確認完了。
完成した構成
まとめ
家電をcurlで制御できるようになった。
IrKitのように制御できるし、赤外線みたいに見えるところに置かなくても良いのが嬉しい。
別の部屋や別の階にも置けますからね。
なお、家電を改造するときは自己責任でお願いします。
今後の課題
今回は電源をUSB電源にしてしまったので、電源を家電から取る方法の検討が必要。
今回の家電の内部には15Vが有ったので、そこから取ることを検討。
試しに直接レギュレーターで取ってみたところ、レギュレータは触れなくなるくらい高温になるし、
電流が多すぎなのか保護回路が動作したのかで、家電からの電源供給が止まってしまった。
ESP-WROOM-02は突入電流が多いらしく、やはり15Vから直接レギュレータはダメで、きちんとした電源回路を用意することにする。