Matter SDKのexamples/sensorsを試す その2 Matterデバイスの作成

今回作成したMatterデバイスは以下の製品で構築しました。

  • Speeed Studio XIAO ESP32C6(ESP32C3と違ってThreadで使用するIEEE 802.15.4にも対応している)
  • HW-416B(PIR人感センサー)
  • SHTC3(温湿度センサー)

ケーブルの接続は以下の画像のようにしました。左から、SHTC3、ESP32C6、HW-416Bです。ちなみにESP32C6についてるアンテナは、ESP32C3に付属していたものを流用しました。

使用したプロジェクトはesp-matter(Matter SDK)のサンプルプロジェクトの中にある、sensorsです。設定(menuconfig)の変更・確認は以下です(こちらのページを参考)。

  • 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に変更
  • OpenThreadの有効化。idf.py menuconfig->Component config->OpenThread->OpenThreadをチェックする
  • WIFI機能をオフ。idf.py menuconfig->Component config → CHIP Device Layer → WiFi Station Options → Enable CHIP WIFI STATIONのチェックを外す
  • mDNSの無効化。idf.py menuconfig->Component config → CHIP Core → General Options → Use the minimal mDNS implementation shipped in the CHIP libraryのチェックを外す
  • ピン番号の変更。SHTC3_I2C_SCL_PINを23、SHTC3_I2C_SDA_PINを22、PIR_DATA_PINを1。

この内容でビルドし、フラッシュに書き込んだところ、”Config is NULL or mandatory feature flags are missing.”というエラーがコンソールに出てリブートを繰り返しました。ソースコードを調べたところ、人感センサーの設定情報の一つであるfeature_flagsが設定されていないことが原因であることがわかりました。app_main.cppの200行目くらいに以下のように行を追加したところ、リブートしなくなりました。

    occupancy_sensor::config_t occupancy_sensor_config;

    occupancy_sensor_config.occupancy_sensing.occupancy_sensor_type =

        chip::to_underlying(OccupancySensing::OccupancySensorTypeEnum::kPir);

    occupancy_sensor_config.occupancy_sensing.occupancy_sensor_type_bitmap =

        chip::to_underlying(OccupancySensing::OccupancySensorTypeBitmap::kPir);

    occupancy_sensor_config.occupancy_sensing.feature_flags = cluster::occupancy_sensing::feature::passive_infrared::get_id();// 追加

ひとまずこれでリブートしなくなりましたが、温度・湿度はそれらしい値がログに出るものの、人感センサーは反応しません。HW-416Bの出力ピンの電圧をテスターで測定してみたところ、手をセンサーに近づけたり遠ざけたりしても3.3Vのまま変化してませんでした。こちらのページによると、この基板には「Sensitivity(感度=検出範囲)」と、「Time Delay(出力がHIGHを維持する時間)」を調整するボリュームがついているようなのですが、「Time Delay」の方が大きすぎたようで、小さめに調整したところ、手を離すと数秒間で0Vに変化するようになりました。
出力ピンをつなぎなおしてもう一回人感センサーに手を近づけたり離したりしたところ今度はログに値が出る(割り込みハンドラーで値が更新される)ことが確認できました。

このMatterデバイスをペアリングする際にQRコードを読み込ませる必要がありますので、”idf.py monitor”でコンソールを表示し、”matter onboardingcodes ble”と入力して、URLを取得しておきます。

Comments

Copied title and URL