🏠

How to: esp32-arduino-matter+ESP32-C3を使ってAmazon Echoから操作するまで

2024/01/24に公開

みんな、こんにちは!みんなはスマートホームデバイスに興味はあるかな?ボクはとっても興味があるよ!スマートホームデバイスを制御するための規格は、今まではメーカーごとにバラバラで互換性が無かったんだけど、それだと不便だよね?ってことで、スマートホームデバイスを制御するための業界の標準が作られたよ。Matterっていうんだけど、この規格に準拠したデバイスはメーカーが異なっていてもお互いにデバイスの制御ができるようになっているよ。

https://csa-iot.org/all-solutions/matter/

このページでは、EspressifさんのESP32シリーズとMatterのArduinoライブラリ esp32-arduino-matter を使ってAmazon EchoからESP32を操作するまでの手順と、動作確認済みのESP32開発ボードを記録しているよ。これからMatter対応デバイスを作ってみたいみんなの参考になるといいな。

対象読者

  • Matterに興味がある
  • ESP32でMatterを使ってみたい
  • マイコンでスマートホームデバイス作りたい

やりたいこと

Amazon Echo (dot) をMatterのハブにして、ESP32-C3を遠隔で制御するよ。ESP32-C3のGPIOにLEDを接続して、Echo経由でLEDをOn/Offするよ。

https://twitter.com/nananauno/status/1749669276146086127

Matter対応のデバイスを制御するための条件として、Matterに対応したハブが必要になるよ。 Matter対応デバイスはスマホのスマートホームアプリから直接制御することはできなくて、必ずMatter対応のハブを経由して制御することになるよ。Matter対応のハブとして、このページではAmazon Echo dotを使用しているよ。

環境

必要なソフト、ライブラリ、デバイスを以下にまとめているよ。このページではArduino IDEのインストール方法、Amazon Echo dot のセットアップ方法、Amazon Alexaアプリのインストール方法は説明していないから、ネットで調べて使える状態にはしておいてね。

  • Arduino IDE 2.2.1
  • esp32-arduino-matter 2.0.11
  • esp32 2.0.11
  • Seeed XIAO ESP32-C3 or M5StampS3(M5Capsule)
  • Amazon Echo dot (3rd.Gen)
  • Amazon Alexa アプリ

Amazon Echoの代わりにApple HomePodやGoogle Nest シリーズでもOKだと思うけど、ボクは未確認だから、Matterに対応しているかどうかは事前に確認してね。

esp32-arduino-matterライブラリのインストール

まずはArduino用のMatterライブラリをインストールするよ。ライブラリはESP32専用のArduino用Matterライブラリ esp32-arduino-matter を使用するよ。このライブラリはライブラリがコンパイル済みの状態で配布されているから、ライブラリのバージョンとArduinoで使用しているesp32のボードのバージョンが一致していることが重要だよ。ライブラリとボードのバージョンが一致していない場合の動作は保証されていないよ。

https://github.com/Yacubane/esp32-arduino-matter

ESP32のバージョンを確認

Matterのライブラリをインストールする前に、Arduino IDEでESP32のボードのバージョンを確認してみてね。Board Managerでesp32と検索するとインストール済みのボードが確認できるよ。今回は2.0.11のバージョンを使うから、ESP32のボードのバージョンが2.0.11になっていることを確認するよ。

platform.txt変更

ESP32のボードの設定ファイルを修正して、C++17を有効にするよ。Githubの以下のチャプターに従ってplatform.txtを編集するよ。2.0.11の部分はインストールする(した)ライブラリのバージョンに合わせて読み替えてね。

https://github.com/Yacubane/esp32-arduino-matter?tab=readme-ov-file#enabling-c17-on-arduino-ide

Macの場合

~/Library/Arduino15/packages/esp32/hardware/esp32/2.0.11/platform.txt

Windowsの場合

C:\Users\<USER>\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\platform.txt

platform.txtの中にある以下の3つのセクションのそれぞれでcompiler.cpp.flags.esp32のキーを
-std=gnu++11 → -std=gnu++17
へ変更してファイルを保存するよ。変更後は一度Arduino IDEを再起動してね。

  • ESP32 Support Start
  • ESP32S3 Support Start
  • ESP32C3 Support Start

ライブラリのインストール

esp32-arduino-matterライブラリをArduino IDEにインストールするよ。下記のGithubページから先ほど確認したESP32のバージョンと同じバージョンのリリースをダウンロードするよ。

https://github.com/Yacubane/esp32-arduino-matter/releases


https://github.com/Yacubane/esp32-arduino-matter/releases から引用

Arduino IDE with ESP32 board at versionの箇所を良く確認して、このバージョンがESP32のバージョンと必ず一致していることを確認してね!

ダウンロードが完了したら、Arduino IDEのメニューからSketch>Include library>Add .ZIP library..を選択して、ダウンロードした esp32-arduino-matter.zip を選択してライブラリをインストールできたら準備完了だよ。

ボードの設定

Tools>Boards:でesp32(esp)>XIAO_ESP32C3 or STAMP-S3が選択されていることを確認してね。 正しいボードが選択されていることが確認できたら、サンプルコードを書き込む前にボードの設定を2つ変更するよ。

Partition scheme
開発ボードに合わせてTools>Partition scheme:の設定を以下のように変更するよ。

  • XIAO: Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS)
  • StampS3: 8M with spifffs (3MB APP/1.5MB SPIFFS)

これは、デフォルトのPartition scheme設定だとesp32-arduino-matterライブラリでビルドしたファームウェアのサイズがボードで割り当てられたAPP用の領域のサイズを超えてしまうから、できるだけAPP用の領域を確保するために設定しているよ。

Flash size (StampS3のみ)
Tools>Flash size:を8MB(64Mb)に変更するよ。デフォルト設定の4MBのままでもファームを書き込めてしまうけど、ファーム書き込み後にリブートを繰り返して正しく動作しないから、Flash sizeが8MBに設定されていることを確認してね。

Erase All Flash Before Sketch Upload
Tools>Erase All Flash Before Sketch Upload:でEnableを選択するよ。フラッシュに残った古いデータによって正しく動作しないことがあるから、ファームウェア書き込み前にフラッシュを消去するために設定しているよ。

サンプルコード

File>Examples>ESP32 Arduino Matter>Lightのサンプルを開いて、コードを以下のように修正するよ。ESP32 Arduino MatterはExamplesの中のExamples from Custom librariesのセクションに入っているよ。

ピンの設定はボクは以下のようにしたけど、空いているピンで適当に設定してね。

XIAO

// Please configure your PINs
const int LED_PIN = D0;
const int TOGGLE_BUTTON_PIN = D9; // Boot button

StampS3

// Please configure your PINs
const int LED_PIN = 3;
const int TOGGLE_BUTTON_PIN = 43;

動作確認

XIAO ESP32-C3/StampS3でサンプルコードで割り当てたピンに抵抗とLEDを適当に繋いで、サンプルコードを書き込んでみてね。Arduino IDEのシリアルモニタでたくさんログが表示されていればとりあえずはOKかな。例えば、XIAO ESP32-C3だと、XIAO上のBootボタンを押すたびにD0ピンに接続したLEDがOn/Offできることを確認してね。

ペアリング用のQRコードを取得する

MatterデバイスをMatterハブとペアリングするにはペアリング用のQRコードかペアリングコードが必要になるよ。サンプルコードだと最初の起動時にQRコードとペアリングコードがログに出力されるようになっているから、シリアルモニタからこれらの情報を取得するよ。

XIAO ESP32-C3/StampS3をリセットした直後のログに以下のようなログが出てくるから、project-chip.github.io..のURLをメモ帳にコピーしておいてね。Amazon Echoとペアリングするときに使用するよ。

I (1191) chip[SVR]: SetupQRCode: [MT:Y.K9042C00KA0648G00]
I (1204) chip[SVR]: Copy/paste the below URL in a browser to see the QR Code:
I (1211) chip[SVR]: https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3AY.K9042C00KA0648G00
I (1221) chip[SVR]: Manual pairing code: [34970112332]

デバイスをAmazon Echoとペアリングする

いよいよAmazon EchoとXIAO ESP32-C3/StampS3をペアリングするよ。先ほどのログからコピーしたURLをブラウザに貼り付けてアクセスするとQRコードが表示されるから、その画面を表示したままにしておいてね。

スマホのAmazon Alexaアプリを開いてデバイスの追加を行うよ。画面下のタブからデバイスを選択、右上の+をタップ、デバイスを追加と選択するよ。後は画面の指示に従ってペアリングするよ。↓のような感じで進むはずだよ!

https://twitter.com/nananauno/status/1749322418869706918

ペアリングが完了したら、XIAO ESP32-C3/StampS3は照明として追加されるよ。デフォルトではN番目の照明という名前になるよ。(Nはペアリング済みの照明の数によって番号が自動的に割り当て)

Amazon Alexaアプリでペアリングされた照明を選択して、照明のOn/Offを試してみてね。XIAO ESP32-C3/StampS3に接続されたLEDが点灯したり消灯したりしているかな?うまく動作していれば成功だよ!

もちろん、Echoでアレクサにお願いすることもできるよ。アレクサ、N番目の照明をつけて、みたいな感じでお願いしてみてね。

開発ボードごとの確認結果

今回、ボクは3つのESP32開発ボードを使って試したから、その結果を記録しておくよ。今回はXIAO ESP32-C3とM5StampS3で動作することを確認できたよ。バージョンとの組み合わせも関係あると思うから、もし、他のボードやバージョンで動いた!という情報があればコメントで教えてね。

開発ボード 結果 メモ
XIAO ESP32-C3 OK 特になし
M5StampS3 OK Flash sizeが8MBに設定されていることを確認
AtomS3 Lite OK 1.0.0beta7+platformio-espressif(6.5.0)
@michan06さん情報提供ありがとう!
Arduino Nano ESP32 NG Partition schemeが変更できずファームサイズがAPP領域サイズを超えているためファームを書き込めない

まとめ

今回はArduinoで使えるESP32専用のMatterライブラリ esp32-arduino-matter と Seeed XIAO ESP32-C3/StampS3を使って、Amazon Echo dotからESP32-C3を制御してLEDをOn/Offするところまでを確認したよ。esp32-arduino-matterはコンパイル済みのライブラリを配布しているから、ライブラリのバージョンとESP32のバージョンが確実に一致していることがとても重要になってくるよ。もし、正しく動かない場合はインストールしたライブラリのバージョンがESP32のバージョンと一致しているかどうかを再度確認してみてね。

今回はライブラリのサンプルコードをそのまま書き込んだだけだから、スマートホームデバイスとしてはまだまだ足らない部分がたくさんあるよね。このサンプルをベースに色々応用ができると思うから、自分だけのスマートホームデバイスを作ってアレクサから制御してみてね!

じゃあ、またね!

Discussion