スマートプラグはコンセントの器具でしか使えないがこれなら汎用的に使えるかも。
普通の天井照明の壁スイッチが壊れたのでマイコンボード(ESP8266の乗ったNodeMCU)でスマートにした話をお届けします。
参考になれば幸い。
免責事項
この記事を読んでそのまま真似するのは構いませんが機器破損またはその他の事故が起きても当ブログの管理者は責任を負わないのはもちろん、ちゃんと動かなくてもディープな質問等は受け付けないのでご承知おきください。
質問はわかることなら答えなくもないです。
巧くいったか結論
うまくいった!バッチリとAlexaにデバイス登録できてAlexaに声で「和室の電気をつけて」というような命令で照明をつけさせることができた。
あとは忘れないフレーズをちゃんと定形アクションとして登録しておくことが重要で、「アレクサ・・・」まで言って何ていうんだっけ?と絶句してしまっては意味がない。
これって声で操作できるスマートデバイスが増えてきたときの課題なんだよね。ここのデバイスはなんて名前で登録してあるんだっけといちいち考えるようではスマートじゃない。
「和室の電気(電灯だけど)」とか「リビングの電気」とかいちいち場所とデバイス名をいうとか特有の名前をつけておくとか、例えば「旧型電気」とか「蛍光灯(蛍光灯は1個しか登録していない場合に限る)」とか。
とにかくアレクサに指令するときにはユニークな名前を伝達する必要があるのがちょっと面倒。
では実際の取り付けについて話を進めていく。
まず壁スイッチが壊れた
ちょっと最初に経緯を述べておくと、我が家は新築で買ってからかれこれ築20年以上となってしまった。
20年も経ってくるとあちこちスイッチ類のバネが壊れ始める。最初に壊れたのは1階トイレのスイッチだった。1階トイレが一番使用頻度が高かったわけだ。
で、我が書斎兼寝室である2階和室が、壊れたトイレのスイッチと交換させられることになり、だましだまし使っていた。が、とうとう騙しきれなくなってきたわけだ。
ほたるスイッチだったがそれを取っ払って、さらに奥のカバーも取り払って裸の感電しないぎりぎりのなんかスイッチになっている。つまり使えなくはないがかなり不便な状態。
壁スイッチを買って治すのは簡単だが、つまらなすぎる。いまどきさて寝るかって思って部屋の入口に行ってスイッチを切るなんてスマートじゃない。
ルンバを声で動かせるようにした人間のするべきことじゃない。
玄関ドアホンをスマートにして外出中でも配達ドライバー氏と話ができる家に住んでいるのによっこらしょっと壁にスイッチを切りに行くなんて!
どうせなら寝ながらでも操作できるようにする。手ぶらでも。
スマート天井照明に改造する構想
天井照明の傘内に必要なものを仕込む
仕込むものは以下のもの。幸い蛍光灯が4本取り付けられているが天井のプラグ周辺には十分な設置スペースがあるとみられる。
- NodeMCUボード
NodeMCUをAlexa対応にはできることはわかっている。ルンバで実現した。 - SSR(ソリッドステートリレー)
- 埋め込みコンセント
- USBアダプター
これらについてはこのあと説明する。
Alexaにデバイス登録して声でONとOFF
上記の臓物を照明の傘の内側に仕込んだらあとはAlexaに認識させて「アレクサ、和室を明るくして」「アレクサ、和室を暗くして」などと定型文を何種類か登録して指令するだけだ。
スイッチを押しに1メートル自分が移動するのとどっちが簡単かって考えると多少微妙なところではあるが。
準備するハード
- マイコンボードESP8266の乗ったNodeMCUモジュール。またはESP32でも可と思われる
▼このへんのやつとか値段が手頃だが技適が不明なので強く推奨はしない。10Gtek ESP8266 ESP-12F NodeMcu Lua WIFIモジュール コネクタ 開発ボード, WiFi開発ボード, Arduino IDE Micropython用
¥950(2022/01/18 14:42時点の価格)
平均評価点:
>>楽天市場で探す
>>Yahoo!ショッピングで探す - SSR
マイコンボードから電圧がかかると別回路の100V回路がつながるというリレー。
ご存知秋月電子のSSRが安くて良いが送料がかかる。AliExpressでもイイのが売られてるので今度試してみるつもり。 - USBアダプター
マイコンボードNodeMCUに5V電源を供給して常時動かすために使う。
かつてはスマホを買ったら大概ついてきてたやつだが、昔のiPhone用が小さくていい。 - 壁コンセント
天井照明の電源からまずはこの壁コンセントに電力を供給しUSBアダプターを挿してマイコンボードに電力を供給する。壁コンセントには穴が2個ずつあるので分岐させて1本はSSRへ、1本は照明の電源へ挿す。
増設用の普通のコンセントボックスだと大きすぎるので埋め込み用の壁コンセントを使ってみた。パナソニック 埋込コンセント パック商品 WN1001P
¥102(2022/01/18 14:51時点の価格)
平均評価点: - 太めの電線
より線ではなく単線を使うべし - ヒューズホルダーとヒューズ
家庭用電源にはブレーカーがついているが念の為ヒューズも間に入れる。ELPA ヒューズホルダー 20mm用 ビス取付型 FH-K20H
¥85(2022/01/18 14:54時点の価格)
平均評価点: - 電線コネクター
カシメてもいいかなと思ったが分解のしやすさからいってコネクターを使ったほうがいいかなと思った。だが実際には分解もかなりしにくい。写真はAmazonより類似品。ニチフ 差込型コネクターQL2 10個
¥200(2022/01/18 14:56時点の価格)
平均評価点:
旧型照明をアレクサ対応にする実現手順
ArduinoIDEでプログラム作る
先日ルンバをアレクサから操作(といっても起動だけだが)できるようにしたのは、もともと照明をオンオフするプログラムを改造したわけで、今回が本来のプログラムの使い方なわけだ。
前回のルンバ&アレクサのプログラムでルンバに命令を出す部分だけSSRにつながったポートをハイにするとかローにするとか変えるだけだ。
NodeMCUに書き込む
これはArduinoIDEで書き込むだけでパソコンで認識できていて、対応ボードをしっかり設定していれば問題ない。
ボード電源入れたまま待機
ルンバのときもそうだったが、パソコンからプログラムを書き込んだらすぐNodeMCUボードが待機状態になる。
すぐアレクサアプリから登録できる。
Alexaアプリで機器登録
アレクサアプリを起動してデバイスの追加という手順を進めていくとちゃんと認識して現れる。
今回は前回のルンバのときと違って照明を照明としてデバイス登録するのだから気持ちがいい。
照明というデバイスカテゴリの中で今回登録できたのが和室電気で、先日登録したルンバも照明と認識されている。
実際の電線つなげかた
アレクサアプリでデバイス登録できたら一旦NodeMCUのボードをパソコンから外して実機(照明器具の元配線)に取り付けだ。
取り付けには建前上、第二種電気工事士免許が必要となる場合があるかもしれないのでその手の専門家に依頼しよう。
ソフトウェア
ルンバ&Alexaのコードを流用する。ていうかもともと電球用をルンバに流用したので本当の流用元のコードにより近くなる。
注意点というか留意点がいくつかある。
- このプログラムではデバイスを1個だけアレクサに登録できるようになっているがGPIOが許す限り登録できるかもしれない。現に流用元の参考プログラムでは4個のランプをデバイス登録できるようになっていた。
- プログラムでは調光できるようになっているので装置によっては調光できるかもしれない。今回自分がつける照明装置は蛍光灯なので調光機能はないし、秋月電子のSSRには調光機能はない。AliExpressで売ってるSSRでは調光できるかもしれない。いずれにしても調光機能のある照明とSSRの組み合わせでないとこのプログラムの機能は100%発揮できない。
/*
This is a basic example on how to use Espalexa and its device declaration methods.
This code is edited for controlling 4 Appliances by
Sachin Soni
for techiesms YouTube channel
You can visit the channel to see
complete tutorial on making this project
by yoursleves
YouTube Channel :- https://www.youtube.com/techiesms
参考↓
https://www.youtube.com/watch?v=JI0AE6BdHZc
techiesms
explore | learn | share
*/
#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#else #include <ESP8266.h> #endif #include < Espalexa.h> #define R1 15 // prototypes boolean connectWifi(); //callback functions void firstLightChanged(uint8_t brightness); // Change this!! // WiFi Credentials const char* ssid = "your_SSID"; const char* password = "Your_password"; // device names String Device_1_Name = "2階和室照明"; //Alexaに登録すると文字化けしているがAlexaアプリで名前を編集して直せる boolean wifiConnected = false; Espalexa espalexa; void setup() { Serial.begin(115200); pinMode(R1, OUTPUT); // Initialise wifi connection wifiConnected = connectWifi(); if (wifiConnected) { // Define your devices here. espalexa.addDevice(Device_1_Name, firstLightChanged); //simplest definition, default state off espalexa.begin(); } else { while (1) { Serial.println("Cannot connect to WiFi. Please check data and reset the ESP."); delay(2500); } } } void loop() { espalexa.loop(); delay(1); } //our callback functions void firstLightChanged(uint8_t brightness) { //Control the device if (brightness) { if (brightness == 255) { digitalWrite(R1, HIGH); Serial.println("Device1 ON"); } //Serial.print("ON, brightness "); //Serial.println(brightness); } else { digitalWrite(R1, LOW); Serial.println("Device1 OFF"); } } // connect to wifi – returns true if successful or false if not boolean connectWifi() { boolean state = true; int i = 0; WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.println(""); Serial.println("Connecting to WiFi"); // Wait for connection Serial.print("Connecting..."); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (i > 20) { state = false; break; } i++; } Serial.println(""); if (state) { Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } else { Serial.println("Connection failed."); } return state; }