ESP32を使って、Amazon EchoのAlexaに、声で照明をつけたり消したり、明るさを調節したりできるか基礎実験をしてみました。「アレクサ、電気をつけて」「アレクサ、電気を消して」みたいなことができるでしょうか。
Espalexa
ESP32をAlexaのデバイスとして利用することができる、とっても便利なEspalexaというライブラリを使います。
ライブラリの追加
[スケッチ]→[ライブラリをインクルード]→[ライブラリを管理]
ライブラリマネージャで、「Espalexa」と検索するとライブラリが表示されるのでインストールします。
サンプルを修正
[ファイル]→[スケッチ例]→[Espalexa]→[EspalexaBasic]のサンプルプログラムをちょっと修正します。
今回は、明るさに応じて光るLEDの数が増えるプログラムに修正し、動作を確認します。
#include <WiFi.h> #include <Espalexa.h> // prototypes boolean connectWifi(); //callback functions void firstLightChanged(uint8_t brightness); // Change this!! const char* ssid = "ssid"; const char* password = "password"; boolean wifiConnected = false; Espalexa espalexa; const int LED_1 = 12; const int LED_2 = 27; const int LED_3 = 26; const int LED_4 = 25; const int LED_5 = 33; void setup() { Serial.begin(115200); pinMode(LED_1, OUTPUT); digitalWrite(LED_1, LOW); pinMode(LED_2, OUTPUT); digitalWrite(LED_2, LOW); pinMode(LED_3, OUTPUT); digitalWrite(LED_3, LOW); pinMode(LED_4, OUTPUT); digitalWrite(LED_4, LOW); pinMode(LED_5, OUTPUT); digitalWrite(LED_5, LOW); // Initialise wifi connection wifiConnected = connectWifi(); if(wifiConnected){ // Define your devices here. espalexa.addDevice("でんき", firstLightChanged,0); //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) { Serial.print("Device 1 changed to "); //do what you need to do here showLED( brightness ); //EXAMPLE if (brightness) { Serial.print("ON, brightness "); Serial.print(brightness); } else { Serial.println("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; } void showLED( int value ) { if( value == 0 ) { digitalWrite(LED_1, LOW); digitalWrite(LED_2, LOW); digitalWrite(LED_3, LOW); digitalWrite(LED_4, LOW); digitalWrite(LED_5, LOW); return; } int num = (value-3)/63; switch( num ){ case 0 : digitalWrite(LED_1, HIGH); digitalWrite(LED_2, LOW); digitalWrite(LED_3, LOW); digitalWrite(LED_4, LOW); digitalWrite(LED_5, LOW); break; case 1 : digitalWrite(LED_1, HIGH); digitalWrite(LED_2, HIGH); digitalWrite(LED_3, LOW); digitalWrite(LED_4, LOW); digitalWrite(LED_5, LOW); break; case 2 : digitalWrite(LED_1, HIGH); digitalWrite(LED_2, HIGH); digitalWrite(LED_3, HIGH); digitalWrite(LED_4, LOW); digitalWrite(LED_5, LOW); break; case 3 : digitalWrite(LED_1, HIGH); digitalWrite(LED_2, HIGH); digitalWrite(LED_3, HIGH); digitalWrite(LED_4, HIGH); digitalWrite(LED_5, LOW); break; case 4 : digitalWrite(LED_1, HIGH); digitalWrite(LED_2, HIGH); digitalWrite(LED_3, HIGH); digitalWrite(LED_4, HIGH); digitalWrite(LED_5, HIGH); break; default : digitalWrite(LED_1, LOW); digitalWrite(LED_2, LOW); digitalWrite(LED_3, LOW); digitalWrite(LED_4, LOW); digitalWrite(LED_5, LOW); break; } return; }
ESP32とLED
・ESP32-DevKitC
・ブレッドボード
・LED 5個
・抵抗 1kΩ
LEDのプラス極をESP32のポート12,27,26,25,33 に接続し、マイナス極をブレッドボードの左側の青いラインに刺します。
青いラインと、ESP32のGNDの間に、抵抗1kΩを接続し、配線は終了です。今回は実験として、LEDの点灯が確認できればよいので、抵抗はまとめて1個だけと回路を簡略化しています。
Arduinoのプログラムを書き込めば、回路側の準備は完了です。
Alexaアプリの設定
デバイスの追加
Alexaのアプリを開き、右上の+マークをタップします。
一番下までスライドして、「その他」をタップします。
「デバイスを検出」をタップします。
しばらく、周辺にあるデバイスを検索しています。
デバイス名が文字化けしてしまっていますが、ESP32のデバイスが検出されます。
とりあえず、「終了」をタップ。
名称の変更
「照明」が追加されているので、「照明」をタップ。
文字化けしているデバイスをタップ。
右上の歯車マークをタップ。
「名前の編集」をタップ。
「でんき」に変更します。これで設定は全て完了です。今回は「でんき」ですが、呼びたい名称を設定すれば、その名称で照明をつけたり消したりできます。
Alexaに声をかける
点灯と消灯
これで準備は全て完了です。Alexaに話しかけてみましょう。
「アレクサ、電気をつけて」
LEDが点灯します。
「アレクサ、電気を消して」
LEDが消えます。
どうでしょう。声に反応してLEDが点灯したり、消灯したりできました。
明るさを変えてみる
続いて、明るさを変える実験です。
「アレクサ、電気を暗くして」「アレクサ、電気を明るくして」
「暗くして」と言うとLEDの光が一つ減り、「明るくして」と言うとLEDの光が一つ増えます。明るさの調節もできることがわかりました。
実験は大成功
Alexaに声をかけることで、ESP32に接続したLEDをオンオフしたり明るさを調節したりできることがわかりました。
これで、Alexaでコントロールできるオリジナルの照明を作ることができます。
2020.07.19追加 つづきはこちら
追加終わり
コメント