「Alexa SDK for Node.js Ver2を使ったメール送信とJSONによるデータの受渡し」ではカスタムスキルを使用しましたが、自作のESP8266書き込みツールのオンボードLEDをスマートホームデバイスとするスマートホームスキルを作成します。スマートホームデバイス「LED」として登録し、「Alexa、LEDを点けて」「Alexa、LEDを消して」などのフレーズでLEDの点灯/消灯を制御します。自作のESP8266書き込みツールのスケッチにはesp8266-alexa-wemo-emulator-masterライブラリを使用し、WeMoエミュレーションを行います。esp8266-alexa-wemo-emulator-masterライブラリの詳細については、「witnessmenow/esp8266-alexa-wemo-emulator」を参照してください。
自作のESP8266書き込みツールについて
自作のESP8266書き込みツールは、ESP8266をスイッチサイエンスのESP-WROOM-02ピッチ変換用基板にはんだ付けし、タクトスイッチを用いてModeスイッチとResetスイッチを作成して、Arduino IDEでESP8266のスケッチを書き込めるようにしたツールです。パソコンとESP8266を接続するUSBのために、USB-シリアル変換モジュール「FT232RL」(秋月電子通商製)を使用しています。
Echo DotとWeMo Switch間のプロトコル
Echo DotとWeMo Switch間のプロトコルを次に示します。WeMo SwitchはEcho Dotと同一のWi-Fiネットワークに接続されている必要があり、UDPプロトコルによりWeMo Switchを検出します。
【参考】「Alexa – NodeMCU: WeMo Emulation Made Simple」から抜粋
依存ライブラリのセットアップ
ESP8266開発環境(Arduino IDE 1.8.5)に、「witnessmenow/esp8266-alexa-wemo-emulator」から取得したAlexa Wemo switch emulatorライブラリzipファイル「esp8266-alexa-wemo-emulator-master.zip」をインストールします。
ダウンロードしたzipファイル形式のライブラリをArduino IDEに登録する方法を次に示します。
Arduino IDEのスケッチメニューを選択し、順に「ライブラリをインクルード」「.zip形式のライブラリをインストール…」をクリックし、表示されたファイル選択ダイアログで、タウンロードしたライブラリを選択します。
ESP8266書き込みツールのスケッチの作成
ダウンロードした「esp8266-alexa-wemo-emulator-master\examples\SingleSwitch\SingleSwitch.ino」を基に次にようにスケッチを作成します。
- 15,16行目に、それぞれ、WiFiのSSIDとパスワードを設定します。
- 22目で、ESP8266書き込みツールのLEDのGPIO名「16」を設定します。
- 50行目で、WemoSwitchクラスのインスタンスを行います。パラメータは順に、Alexa スキルの呼び出し名, TCPポート番号, 点灯のコールバック, 消灯のコールバックとなります。
- 51行目で、addDeviceメソッドで作成したインスタンスをWemoManagerクラスに登録します。
wemoalexa.ino
#include <ESP8266WiFi.h> #include "WemoSwitch.h" #include "WemoManager.h" #include "CallbackFunction.h" // prototypes boolean connectWifi(); //on/off callbacks void lightOn(); void lightOff(); //------- Replace the following! ------ char ssid[] = "xxxxx"; // your network SSID (name) char password[] = "xxxxxx"; // your network key WemoManager wemoManager; WemoSwitch *light = NULL; //const int ledPin = BUILTIN_LED; const int ledPin = 16; void setup() { Serial.begin(115200); // Set WiFi to station mode and disconnect from an AP if it was Previously // connected WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); // Attempt to connect to Wifi network: Serial.print("Connecting Wifi: "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); IPAddress ip = WiFi.localIP(); Serial.println(ip); wemoManager.begin(); // Format: Alexa invocation name, local port no, on callback, off callback light = new WemoSwitch("LED", 80, lightOn, lightOff); wemoManager.addDevice(*light); pinMode(ledPin, OUTPUT); // initialize digital ledPin as an output. delay(10); digitalWrite(ledPin, HIGH); // Wemos BUILTIN_LED is active Low, so high is off } void loop() { wemoManager.serverLoop(); } void lightOn() { Serial.print("Switch 1 turn on ..."); digitalWrite(ledPin, LOW); } void lightOff() { Serial.print("Switch 1 turn off ..."); digitalWrite(ledPin, HIGH); }
Alexaスマートホームデバイスの検出
スケッチ「wemoalexa.ino」をESP8266に書き込んだ後、 Alexaにエミュレートしたスマートホームデバイスを検出させるために、パソコン上のデスクトップブラウザよりAlexaアプリをアクセスします。左側のメニューから「スマートホーム」を選択し、表示された画面の「デバイス」を選択し、検出ボタンを押して、スマートホームデバイスを検出します。検出が終了すると、次のように「LED WeMo Switch」と表示され、LEDがスマートホームデバイス名となります。
Echo DotでLチカ実施
Echo Dotに向かって「Alexa、豆電球を点けて」と言うと自作のESP8266書き込みツールのオンボードLEDが点灯し、「Alexa、豆電球を消して」と言うと自作のESP8266書き込みツールのオンボードLEDが消灯します。
【参考】ライブラリ「FauxMoESP」とその依存ライブラリ
スマートホームデバイスにするために別のライブラリ「FauxMoESP」を使ってみましたが、スマートホームスキルとしての動作が確認できませんでした。ここにメモ書きとして残しておきます。
ESP8266開発環境(Arduino IDE 1.8.5)に次のライブラリをインストールします。()内は今回使用したzipファイル名を示します。
- ESPAsyncTCPライブラリ(ESPAsyncTCP-master.zip)
- ESPAsyncUDPライブラリ(https://github.com/me-no-dev/ESPAsyncUDP/archive/master.zip)
- FauxMoESPライブラリ(xoseperez-fauxmoesp-3b05b7b7f111.zipをクリックして、「リポジトリをダウンロードする」を選択)