Matter SDKのexamples/sensorsを試す その1ボーダールーターの作成

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 outputUSB 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 SSIDWiFi 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

Copied title and URL