Matter Bouffalo Lab Contact Sensor Example#
This example demonstrates a Matter contact sensor device (Vendor ID: 0xFFF1, Product ID: 0x8005), supporting BooleanState cluster reporting via GPIO.
Supported Targets#
Board |
Chip |
Transport |
Build system |
|---|---|---|---|
|
BL704L |
Thread |
Matter GN ( |
|
BL616 |
Wi-Fi |
CMake ( |
BL704L + Thread#
Architecture#
BL704L
├── IEEE 802.15.4 radio → OpenThread (FTD or MTD)
│ └── Matter over Thread (UDP/IPv6)
├── BLE → BLE commissioning (PASE over BLE)
└── Application
├── CHIP_RESET_PIN (GPIO 16) — long press → factory reset
└── CHIP_CONTACT_PIN (GPIO 20) — rising edge = true, falling = false
CHIP_CONTACT_PINshould be pulled down to a low level; otherwise, the device may wake up unexpectedly.
Transport: Thread with IPv6 networking
Commissioning: BLE → Thread credential provisioning
Sleep: PDS (Power-Down Sleep) via
app_pds.cppBuild: Matter GN build system, managed by
build_examples.py
Build#
Activate the build environment first:
source scripts/activate.sh
Build with Thread MTD (Minimal Thread Device, lower power):
./scripts/build/build_examples.py \
--target bouffalolab-bl704ldk-contact-sensor-thread-mtd-littlefs \
build
The output binary is placed under
out/bouffalolab-bl704ldk-contact-sensor-thread-mtd-littlefs/.
Flash#
./out/bouffalolab-bl704ldk-contact-sensor-thread-mtd-littlefs-mfd/chip-bl702l-contact-sensor-example.flash.py --port <device port>
BL616 + Wi-Fi#
Architecture#
BL616 (RISC-V, Wi-Fi 6 + BLE)
├── Wi-Fi → Matter over IP (TCP/UDP)
├── BLE → BLE commissioning (PASE over BLE)
├── Low-power (PDS) → Wi-Fi + BLE coordinated sleep (app_lp.cpp)
└── Application
├── CHIP_RESET_PIN (GPIO 2) — long press → factory reset
└── CHIP_CONTACT_PIN (GPIO 20) — rising edge = true, falling = false
Transport: Wi-Fi with IPv4/IPv6 networking
Commissioning: BLE → Wi-Fi credential provisioning
Sleep: PDS (Power-Down Sleep) via
bflb/app_pds.cppBuild:
Bouffalo SDK+ Matter CMake hybrid build
Build#
Activate the build environment first:
source scripts/activate.sh
Build with Wi-Fi:
make -C examples/contact-sensor-app/bouffalolab
Clean#
make -C examples/contact-sensor-app/bouffalolab clean
Flash#
make -C examples/contact-sensor-app/bouffalolab flash COMX=<device port>
Commissioning#
BL704L (Thread)#
Commission over BLE with chip-tool, providing Thread credentials:
./out/linux-x64-chip-tool/chip-tool pairing ble-thread \
<device_node_id> hex:<thread_dataset_tlv> 20202021 3840
<thread_dataset_tlv>— active Thread dataset in hex TLV format.
BL616 (Wi-Fi)#
Commission over BLE with chip-tool, providing Wi-Fi credentials:
./out/linux-x64-chip-tool/chip-tool pairing ble-wifi \
<device_node_id> <wifi_ssid> <wifi_passwd> 20202021 3840
<device_node_id>— node ID assigned to the device;
><wifi_ssid>— Wi-Fi network SSID;
><wifi_passwd>— Wi-Fi network password.
Subscribe to BooleanState#
Start chip-tool in interactive mode:
./chip-tool interactive start
Subscribe to the BooleanState attribute:
booleanstate subscribe state-value <min-interval> <max-interval> <device_node_id> 1
<min-interval>— minimum reporting interval (seconds)<max-interval>— maximum reporting interval (seconds)<device_node_id>— node ID of the contact sensor
Trigger state changes by pressing the contact GPIO button.