天井についてる蛍光灯照明の壁スイッチが壊れたのでNodeMCUマイコンボードでAlexa対応にした

旧型蛍光灯をアレクサ対応にしてみる

スマートプラグはコンセントの器具でしか使えないがこれなら汎用的に使えるかも。

普通の天井照明の壁スイッチが壊れたのでマイコンボード(ESP8266の乗ったNodeMCU)でスマートにした話をお届けします。

参考になれば幸い。

スポンサーリンク

免責事項

この記事を読んでそのまま真似するのは構いませんが機器破損またはその他の事故が起きても当ブログの管理者は責任を負わないのはもちろん、ちゃんと動かなくてもディープな質問等は受け付けないのでご承知おきください。

質問はわかることなら答えなくもないです。

巧くいったか結論

うまくいった!バッチリとAlexaにデバイス登録できてAlexaに声で「和室の電気をつけて」というような命令で照明をつけさせることができた。

あとは忘れないフレーズをちゃんと定形アクションとして登録しておくことが重要で、「アレクサ・・・」まで言って何ていうんだっけ?と絶句してしまっては意味がない。

これって声で操作できるスマートデバイスが増えてきたときの課題なんだよね。ここのデバイスはなんて名前で登録してあるんだっけといちいち考えるようではスマートじゃない。

「和室の電気(電灯だけど)」とか「リビングの電気」とかいちいち場所とデバイス名をいうとか特有の名前をつけておくとか、例えば「旧型電気」とか「蛍光灯(蛍光灯は1個しか登録していない場合に限る)」とか。

とにかくアレクサに指令するときにはユニークな名前を伝達する必要があるのがちょっと面倒。

では実際の取り付けについて話を進めていく。

まず壁スイッチが壊れた

ちょっと最初に経緯を述べておくと、我が家は新築で買ってからかれこれ築20年以上となってしまった。

20年も経ってくるとあちこちスイッチ類のバネが壊れ始める。最初に壊れたのは1階トイレのスイッチだった。1階トイレが一番使用頻度が高かったわけだ。

で、我が書斎兼寝室である2階和室が、壊れたトイレのスイッチと交換させられることになり、だましだまし使っていた。が、とうとう騙しきれなくなってきたわけだ。

ほたるスイッチだったがそれを取っ払って、さらに奥のカバーも取り払って裸の感電しないぎりぎりのなんかスイッチになっている。つまり使えなくはないがかなり不便な状態。

壁スイッチを買って治すのは簡単だが、つまらなすぎる。いまどきさて寝るかって思って部屋の入口に行ってスイッチを切るなんてスマートじゃない。

ルンバを声で動かせるようにした人間のするべきことじゃない。

玄関ドアホンをスマートにして外出中でも配達ドライバー氏と話ができる家に住んでいるのによっこらしょっと壁にスイッチを切りに行くなんて!

どうせなら寝ながらでも操作できるようにする。手ぶらでも。

スマート天井照明に改造する構想

天井照明の傘内に必要なものを仕込む

仕込むものは以下のもの。幸い蛍光灯が4本取り付けられているが天井のプラグ周辺には十分な設置スペースがあるとみられる。

  • NodeMCUボード
    NodeMCUをAlexa対応にはできることはわかっている。ルンバで実現した。
  • SSR(ソリッドステートリレー)
  • 埋め込みコンセント
  • USBアダプター

これらについてはこのあと説明する。

Alexaにデバイス登録して声でONとOFF

上記の臓物を照明の傘の内側に仕込んだらあとはAlexaに認識させて「アレクサ、和室を明るくして」「アレクサ、和室を暗くして」などと定型文を何種類か登録して指令するだけだ。

スイッチを押しに1メートル自分が移動するのとどっちが簡単かって考えると多少微妙なところではあるが。

準備するハード

旧型照明をアレクサ対応にする実現手順

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; 
}

参考サイト

タイトルとURLをコピーしました