Echo DotやスマホアプリなどのAlexaからRaspberry Pi Pico W上のLEDやポートをコントロールできるようにしてみました。
Raspberry Pi Pico WをAlexa対応デバイスにして、音声やスマートフォンのアプリからコントロール可能です。
開発環境
開発環境は、ライブラリが豊富なArduinoIDEを使用します。ボード定義は、Raspberry Pi PicoのオフィシャルSDKベースで作られているarduino-picoを使用しました。
ライブラリ
M5StackやESP32のボード向けに作られたEspalexaをフォークし、Raspberry Pi Pico W向けに改版したPicoalexaを作りました。
ZIP形式でダウンロードして、Arduino IDEにインポートすれば使えます。
スケッチ
Raspberry Pi Pico WにつなげたLEDをAlexaからコントロールできるようにスケッチを書きました。Raspberry Pi Pico W上のLEDはPWMが使用できないため、外に付けてます。ON/OFFだけでしたらRaspberry Pi Pico W上のLEDで良いと思います。
※WiFiのSSID(ssid)とパスワード(password)は、自分の環境のものに変えて下さい。
#include <WiFi.h>
#include <Picoalexa.h>
#define STASSID "ssid"
#define STAPSK "password"
#define LED D20
const char *ssid = STASSID;
const char *pass = STAPSK;
WiFiMulti multi;
Picoalexa Picoalexa;
void LedChanged(uint8_t brightness) {
Serial.print("Device 1 changed to ");
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
analogWrite(LED, brightness);
}
else {
analogWrite(LED, 0);
Serial.println("OFF");
}
}
void setup()
{
Serial.begin(115200);
pinMode(LED,OUTPUT);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
multi.addAP(ssid, pass);
if (multi.run() != WL_CONNECTED) {
Serial.println("Unable to connect to network, rebooting in 10 seconds...");
delay(10000);
rp2040.reboot();
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Picoalexa.addDevice("Pico", LedChanged);
Picoalexa.begin();
}
void loop()
{
Picoalexa.loop();
delay(1);
}
動作確認
スケッチを書き込んだあとにRaspberry Pi Pico WがWi-Fiにつながれば準備OKです。
スマートフォンのAlexaアプリからデバイスを追加します。
デバイス一覧に設定したPicoが表示されるので、それを選べばコントロールできます。
スライドバーに従って、LEDの明るさが変化しました。動作OKです。
もちろん、音声でもコントロールできました!
(手持ちが初期の方のEcho Dotなので、そろそろ最近のに買い替えたい)
最後に
スケッチの中にデバイスを複数にすれば、Raspberry Pi Pico Wで複数のLEDやリレーなどをコントロールすることもできるので、音声やスマートフォンからデバイスをコントロールしたい場合はけっこう応用がききそうです。