今回作成した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 output
をUSB 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