Raspberry Pi Pico WをAlexa対応デバイス化

Echo DotやスマホアプリなどのAlexaからRaspberry Pi Pico W上のLEDやポートをコントロールできるようにしてみました。
Raspberry Pi Pico WをAlexa対応デバイスにして、音声やスマートフォンのアプリからコントロール可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/72b34f32-a1e0-e061-fd49-db09c26307d6.png)


## 開発環境
開発環境は、ライブラリが豊富な[ArduinoIDE](https://www.arduino.cc/en/software)を使用します。ボード定義は、Raspberry Pi PicoのオフィシャルSDKベースで作られている[arduino-pico](https://github.com/earlephilhower/arduino-pico)を使用しました。

## ライブラリ
M5StackやESP32のボード向けに作られた[Espalexa](https://github.com/Aircoookie/Espalexa)をフォークし、Raspberry Pi Pico W向けに改版した[Picoalexa](https://github.com/jksoft-main/Picoalexa)を作りました。

https://github.com/jksoft-main/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）は、自分の環境のものに変えて下さい。

```cpp
#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アプリからデバイスを追加します。

デバイスの種類は、その他を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/17730df4-7f04-d3c9-bfd7-e8d53d03db8e.png)

通信方式は、Wi-Fiを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/7a1f02fa-8228-5d0e-3663-106be022fe08.png)

次のように表示されれば、接続OKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/4007d12b-6f7e-21af-28c8-546c7706115e.png)


デバイス一覧に設定したPicoが表示されるので、それを選べばコントロールできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/f4aed4bf-f798-df43-c63b-8decdd2a4727.png)

スライドバーに従って、LEDの明るさが変化しました。動作OKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/79cf1beb-1fc1-72ac-e230-46ebb4a4eb11.png)

もちろん、音声でもコントロールできました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/d08bde8e-91da-bf95-9cbc-bf8179354680.png)
（手持ちが初期の方のEcho Dotなので、そろそろ最近のに買い替えたい）

## 最後に
スケッチの中にデバイスを複数にすれば、Raspberry Pi Pico Wで複数のLEDやリレーなどをコントロールすることもできるので、音声やスマートフォンからデバイスをコントロールしたい場合はけっこう応用がききそうです。