壁のスイッチをWi-Fi経由で操作する
これ何
- 2つの壁のスイッチを Wi-Fi経由で操作できます
- 部屋の 温度、湿度と照度 を送信します
- 別の部屋の 温度と湿度 を送信します
- ドアの状態を送信します
ESP8266 を使って Wi-Fi経由 で壁のスイッチを操作できるものを作った。
ESP8266内で Webサーバが起動していて、ブラウザから壁のスイッチを操作できる。
壁のスイッチはサーボモータを使ってオンオフしています。
また、いちいちブラウザを起動するは面倒なので、プッシュボタンも付けています。
温度などのデータは毎分送信され、ローカルにあるサーバの InfluxDB に格納しています。
ESP8266とは
ESP8266 は Espressif Systems が製造している小型で安価な Wi-Fiモジュールです。
3.3V で動作し、大きさは100円玉くらいでとても小型ながら、2.4GHz帯の Wi-Fi(b/g/n) に接続することができます。
また、Arduino と互換性があり Wi-Fi が付いた Arduino として使うことができます。
技適に通っている ESP8266 は ESP-WROOM-02(とその派生型) パッケージだけなので、これを使います。
この手の工作ではおなじみですね。
部品
- ESP-WROOM-02 / 400円
- ESP-WROOM-02ピッチ変換用基板 / 160円
- サーボ 2個 / 200円 (ZS-F135)
- LED付きプッシュボタン / 150円
- プッシュボタン / 30円
- リードスイッチ 2個 / 80円 (MKA-10110)
- 温湿度センサ 2個 / 1200円 (AM2320)
- 照度センサ / 50円 (NJL7302L-F5)
- 三端子レギュレータ / 100円 (TA48033S)
- 抵抗 (5.1KΩ, 10KΩ, 100KΩ, 220KΩ)
合計で大体 2500円。
リストに書いたもの以外にも、プログラムを書き込むための USBシリアル変換機、リード線、ピンヘッダ、ピンソケットなどが必要です。やってないですが、USBシリアル変換機は Arduino UNO などで代用できるようです。
元々持っていた物が多くて、今回買ったのは温湿度センサと三端子レギュレータだけ。
サーボは数年前に、ヴイストン ロボットセンタ 秋葉原店 で 1人 2個、1個 100円で安売りしてたやつ。
回路
初めて KiCad に挑戦してみました。(数時間でまぁまぁ使えるようになります)
温湿度センサ
今回使用した 2つの温湿度センサ(AM2320)は I2C (Inter-Integrated Circuit) に対応していましたが、同じデバイスを同じ I2C bus で使うと device address が重複してしまいます。
そのため、device address を変更する必要があるのですが、AM2320 の device address を変更する方法がわからなかったので、今回は I2C を諦めて 1-Wire で接続しています。
1-Wire だと読み取りに失敗することがあるので何回か試行するようにしています。
リードスイッチ
リードスイッチは近くに磁石があるとオンになるスイッチです。
今回使用したものはガラス管がむき出しで壊れそうだったので、ストローに入れてホットボンドで蓋をしています。
ユニバーサル基板でテスト中の回路 と ブレッドボードでテストした回路
電源
回路図には書いてませんが、電源は iPhone の 5W充電器 から 5V を供給し三端子レギュレータで 3.3V に降圧しています
とても素朴な基板ができた
接続
Device | PIN name | PIN name | Device | |
---|---|---|---|---|
3V | 3V | GND | GND | |
- | EN | IO16 | LED 1 | |
Button 2 | IO14 | TOUT | Illuminance | |
Button 1 | IO12 | RST | Writer RST | |
Servo 1 | IO13 | IO5 | ReadSW 1 | |
Servo 2 | IO15 | IO1(TXD) | Writer RX | |
Sensor 2 | IO2 | IO3(RXD) | Writer TX | |
Sensor 1 | IO0 | IO4 | ReadSW 2 |
- プログラムの書き込みには USBシリアル変換モジュール (FT232RL)を使用しました。
- 書き込み機とESP8266との接続はハードウェアのセットアップのページの接続表の項を参考にさせていただきました。
回路のパターンは Numbers.app で書いた
作業風景、マグカップ
ちなみに、回路とサーボを覆う筐体は Amazon で買ったスノコ を解体したものが余っていたので、それで箱を作りました。ヒノキの良い匂いがします。
参考URL
回路の作成にあたって大変お世話になりました。ありがとうございます。
コード
github.com
コードは 600行くらい。
web server や web client は ESP8266 の標準ライブラリがあるのでそれを使っています。
温湿度センサは以下のライブラリを使わせてもらいました。
github.com
Grafana
ESP8266 から InfluxDB に送られたデータを Grafana で可視化してみた。
かっこいい。
3つの ESP8266 と 3つの Raspberry Pi が、毎分データを送信してくる。
ちなみに Raspberry Pi には赤外線LED を繋げていて、部屋の照明やテレビなどのリモコン信号が出るようにしています。
センサーは BME280, HDC1000, AM2320 を使っています。
- FAQ · grafana/grafana Wiki
- 室温をデータベースに記録して可視化する(InfluxDB導入編) - house.blueclip
- 室温をデータベースに記録して可視化する(Grafana導入編) - house.blueclip
HomeKit
Apple HomeKit は ホームオートメーション機器と通信するためのフレームワークで、家電を macOS, iOS, watchOS のホームアプリとSiri、または iOSのコントロールセンタ から操作できます。影が薄いですが、ホームアプリは iOS8 から標準で入っていますね。
今回は、HomeKit 上でブリッジとして振る舞うOSSである Homebridge を使って HomeKit に対応しています。
ファンは動作中だと羽が回転するアニメーションがあったりして見てて楽しい。
壁のスイッチ操作は Wi-Fi経由で DB に送信されているので、Homebridge は DB を参照し家電のオンオフ状態を認識しています。
Homebridge のプラグインは homebridge-cmd4 を使っています。
温度と湿度が常にグレーでちょっと見づらいのが難点ですが、これは HomeKit の仕様っぽい。
- iOS - ホーム - Apple(日本)
- nfarina/homebridge: HomeKit support for the impatient
- ztalbot2000/homebridge-cmd4: CMD4 Plugin for Homebridge - Supports ~All Accessory Types!
- RaspberryPi3とhomekitとwebIOPiで家電操作する - Qiita
- ゆづあさんのツイート: "雨漏り… "
- ショーウィンドウ / さけハラス3号
- ランドリー / さけハラス3号
オートメーション
今回はお風呂の照明と換気扇のスイッチを操作しているので、DB を参照して以下の操作を自動で行うようにしました。
お風呂が使用中か非使用かはドアの状態を見ています。
- ライトを
点ける
: もし使用中
かつ暗い
なら - ライトを
止める
: もし非使用
かつ点灯中
なら - ファンを
点ける
: もし使用中
かつ暑い
なら - ファンを
止める
: もし使用中
かつ暑くない
なら - ファンを
点ける
: もし非使用
かつ湿ってる
なら - ファンを
止める
: もし非使用
かつ乾いてる
なら
以下を サーバ上で定期実行している
Automatically operate the bath light and fan
ハマりどころ
- プログラムの書き込みを MacBook Pro から行う際、Apple USB-C - USBアダプタを使うとうまくいかなかった
- 多分電流が足りてなくて、大きい電流を扱える USB Type-Cハブを使ったら書き込めました
- 他の方法としては、ESP8266 を iPhoneの充電器から給電して書き込み器とGNDを共通にしたら書き込めました
- ブレッドボード上で三端子レギュレータの足とコンデンサの足が接触し、三端子レギュレータが壊れて電流が仕様通り流れなくなってしまった
- それに気づかずに使っていたので、ESP8266 が多くの電流を消費する Wi-Fi に接続するタイミングで、電気不足で再起動してしまっていて、問題の特定に時間を取られた
- 照明のスイッチを操作する時、高確率で ESP8266 が再起動してしまった
- 原因が全然分からず困っていたが、照明の蛍光灯が点灯する瞬間に蛍光灯の消費電力が多くなり、ESP8266 に流れる電流が少なくなっているのが原因だった
- LED照明に交換して解決しました、教えてくれた方ありがとうございました
- 蛍光灯の磁気特性についての質問です Arduino(ESP8266)でお風呂… - 人力検索はてな
- 蛍光灯 - Wikipedia
- 椚座 くにゅくにゅ/// 淳介 on Twitter: "点灯管による蛍光灯の始動。960fps高速度撮影。… "
雑感
- 温湿度センサは設置する高さで結構数値が変わる
- 人がいない時、温度が下がったりしているのが見えて面白かった
- HomeKit対応製品でここまで機能てんこ盛りの製品はないのでとても満足した
- HomeKit対応の温度、湿度、気圧センサーが 8000円もするので、値段的にも優位
- 自分で作ると安くできて、好きに細かい機能を作り込めるし、何より楽しい
- Apple watch で心拍とか色々取ってきてリアルタイムに Grafana で表示してみたい
- 室温が体温にどれだけ影響するのかみたい
- ESP8266 の後継機 ESP32 では Bluetooth に対応しているので、分割キーボードを完全無線化してみたい (AirPods みたいに)
間違いなどがありましたら、コメントいただけるとありがたいです。
最後までお付き合いいただきありがとうございました。