esp-matterというmatter SDKにはMatterデバイスのサンプルプロジェクトがいくつかあるのですが、その中からsensorsを試してみることにしました。これで温度・湿度センサー、人感センサーを使えば温度、湿度、人の検知状態が取得できるはずです。あと、できるだけ消費電力を小さくするため、WiFiではなくThreadで通信(Matter over Thread)させようと思います。
Threadで通信する場合、MattherデバイスとIPネットワーク(WiFi)を中継するためのボーダールーターが必要になりますが、今回はこちら(udemyの講座の教材)を参考にしてESP32H2をRCP(Radio Co-Processor)、ESP32C3をボーダールーターとして動作させることにしました。ちなみにRCPは、ThreadネットワークのIEEE 802.15.4無線通信を処理するためのものです。
ESP32C3はspeeed studioのXIAO ESP32C3、ESP32H2はM5StackのGateway H2を使用しました。接続するためのケーブルは、Gateway H2に付属のものを改造して用意しましたが、市販されているGroveコネクタを2.54mmデュポンコネクタのオスに変換するケーブルでも接続可能かと思います。なお、接続はフラッシュにイメージを書き込んだ後に行いました。Gateway H2のUSBコネクタにPCを接続するにはケースから基板を取り出すのですが、ケースを開けるために六角ドライバーが必要でした。

まずESP32H2にesp-idfのサンプルプロジェクトのot_rcpをビルドしてフラッシュに書き込みました。これはこちらに記載されている通りに行ったので、特にハマることなく作業完了しました。
次はこちらの手順を参考に、ESP32C3にot_brをビルド、フラッシュへの書き込みをしましたが、一部ソースの修正(ピン番号の変更)とmenuconfigによる設定変更・確認を行いました。
- ヘッダで定義されたUARTのRX、TXのピン番号をESP32C3に合わせて変更する(RX=20,TX=21)
- 使用するESP32C3に合わせてflashサイズを設定する。
idf.py menuconfig
→Serial Flasher config→Flash size
を4MBに変更 - コンソールの設定。
idf.py menuconfig
->Component config->ESP System Settings->Channel for console output
をUSB Serial/JTAG Controller
に変更 - 自動的にthreadを開始する。
idf.py menuconfig
->OpenThread Boarder Router Example->Enable the automatic start mode in Thread Border Router
をチェックする - Wifiの設定。
idf.py menuconfig
->Example Connection Configurtaion->WiFi SSID
とWiFi Password
を設定 - ボーダーエージェントを有効化するための設定。
idf.py menuconfig
->Component config->OpenThread->OpenThread->Thread Core Features->Enable border agent feature
をチェックする
ちなみに、何回かフラッシュ書き込みを行っている中で、idf.pyによるerase-flash、flashができなくなることがあったのですが、ESP32C3のBボタンを押しながらRボタンを押してダウンロードモードにしてからだとerase-flashできました。
ボーダールーターが起動したら、後でHome AssistantアプリからThreadネットワーク上にあるMatterデバイスとボーダールーター経由でペアリングする際に必要となるOperational Datasetという文字列を取得します。取得方法は、”idf.py monitor”、でボーダールーターのコンソールを立ち上げたあと、”dataset active -x”と入力すると出力されます(かなり長い文字列です)。
補足:こちらのページによるとESP32-S3とESP32-H2が一つのボードに一体化した製品である製品であるEspressif Thread Border Router向けのesp-thread-brというSDKではREST APIに対応しており、このAPIからボーダールーターの情報を取得できるようなのですが、今回の構成ではこのプロジェクトが使えないため、esp-idfに含まれているopenthreadのサンプルプロジェクトのot_br(REST APIは含んでいない)を使用しました。そのため、後述するHome AssistantでボーダールーターのThreadネットワークを優先ネットワークにするためには手動で情報(Operational Dataset)を入力する必要があり、上記の手順を行ってます。
Comments