8.8 KiB
Matter Smart Button Example
This example demonstrates how to create a Matter-compatible smart button (generic switch) device using an ESP32 SoC microcontroller.
The application showcases Matter commissioning, sending button click events to smart home ecosystems, and triggering automations based on button presses.
Supported Targets
| SoC | Wi-Fi | Thread | BLE Commissioning | Status |
|---|---|---|---|---|
| ESP32 | ✅ | ❌ | ❌ | Fully supported |
| ESP32-S2 | ✅ | ❌ | ❌ | Fully supported |
| ESP32-S3 | ✅ | ❌ | ✅ | Fully supported |
| ESP32-C3 | ✅ | ❌ | ✅ | Fully supported |
| ESP32-C6 | ✅ | ❌ | ✅ | Fully supported |
| ESP32-C5 | ❌ | ✅ | ✅ | Supported (Thread only) |
| ESP32-H2 | ❌ | ✅ | ✅ | Supported (Thread only) |
Note on Commissioning:
- ESP32 & ESP32-S2 do not support commissioning over Bluetooth LE. For these chips, you must provide Wi-Fi credentials directly in the sketch code so they can connect to your network manually.
- ESP32-C6 Although it has Thread support, the ESP32 Arduino Matter Library has been pre compiled using Wi-Fi only. In order to configure it for Thread-only operation it is necessary to build the project using Arduino as an IDF Component and to disable the Matter Wi-Fi station feature.
- ESP32-C5 Although it has Wi-Fi 2.4 GHz and 5 GHz support, the ESP32 Arduino Matter Library has been pre compiled using Thread only. In order to configure it for Wi-Fi operation it is necessary to build the project using Arduino as an ESP-IDF component and disable Thread network, keeping only Wi-Fi station.
Features
- Matter protocol implementation for a smart button (generic switch) device
- Support for both Wi-Fi and Thread(*) connectivity
- Button click event reporting to Matter controller
- Button control for triggering events and factory reset
- Matter commissioning via QR code or manual pairing code
- Integration with Apple HomeKit, Amazon Alexa, and Google Home
- Automation trigger support - button presses can trigger actions in smart home apps (*) It is necessary to compile the project using Arduino as IDF Component.
Hardware Requirements
- ESP32 compatible development board (see supported targets table)
- User button for triggering events (uses BOOT button by default)
Pin Configuration
- Button: Uses
BOOT_PINby default
Software Setup
Prerequisites
- Install the Arduino IDE (2.0 or newer recommended)
- Install ESP32 Arduino Core with Matter support
- ESP32 Arduino libraries:
MatterWi-Fi(only for ESP32 and ESP32-S2)
Configuration
Before uploading the sketch, configure the following:
-
Wi-Fi credentials (if not using BLE commissioning - mandatory for ESP32 | ESP32-S2):
const char *ssid = "your-ssid"; // Change to your Wi-Fi SSID const char *password = "your-password"; // Change to your Wi-Fi password -
Button pin configuration (optional): By default, the
BOOTbutton (GPIO 0) is used for triggering click events and factory reset. You can change this to a different pin if needed.const uint8_t buttonPin = BOOT_PIN; // Set your button pin here
Building and Flashing
- Open the
MatterSmartButton.inosketch in the Arduino IDE. - Select your ESP32 board from the Tools > Board menu.
- Select "Huge APP (3MB No OTA/1MB SPIFFS)" from Tools > Partition Scheme menu.
- Enable "Erase All Flash Before Sketch Upload" option from Tools menu.
- Connect your ESP32 board to your computer via USB.
- Click the Upload button to compile and flash the sketch.
Expected Output
Once the sketch is running, open the Serial Monitor at a baud rate of 115200. The Wi-Fi connection messages will be displayed only for ESP32 and ESP32-S2. Other targets will use Matter CHIPoBLE to automatically setup the IP Network. You should see output similar to the following, which provides the necessary information for commissioning:
Connecting to your-wifi-ssid
.......
Wi-Fi connected
IP address: 192.168.1.100
Matter Node is not commissioned yet.
Initiate the device discovery in your Matter environment.
Commission it to your Matter hub with the manual pairing code or QR code
Manual pairing code: 34970112332
QR code URL: https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3A6FCJ142C00KA0648G00
Matter Node not commissioned yet. Waiting for commissioning.
Matter Node not commissioned yet. Waiting for commissioning.
...
Matter Node is commissioned and connected to the network. Ready for use.
User button released. Sending Click to the Matter Controller!
User button released. Sending Click to the Matter Controller!
Using the Device
Manual Control
The user button (BOOT button by default) provides the following functionality:
- Short press and release: Sends a click event to the Matter controller (triggers automations)
- Long press (>5 seconds): Factory reset the device (decommission)
Button Click Events
When you press and release the button:
- The button press is detected and debounced
- A click event is sent to the Matter controller via the Generic Switch cluster
- The Matter controller receives the event and can trigger programmed automations
- The event is logged to Serial Monitor for debugging
Smart Home Integration
Use a Matter-compatible hub (like an Apple HomePod, Google Nest Hub, or Amazon Echo) to commission the device. After commissioning, you can set up automations that trigger when the button is pressed.
Apple Home
- Open the Home app on your iOS device
- Tap the "+" button > Add Accessory
- Scan the QR code displayed in the Serial Monitor, or
- Tap "I Don't Have a Code or Cannot Scan" and enter the manual pairing code
- Follow the prompts to complete setup
- The device will appear as a switch/button in your Home app
- Set up automations: Go to Automation tab > Create Automation > When an accessory is controlled > Select the smart button > Choose the action (e.g., turn on lights, activate scene)
Amazon Alexa
- Open the Alexa app
- Tap More > Add Device > Matter
- Select "Scan QR code" or "Enter code manually"
- Complete the setup process
- The smart button will appear in your Alexa app
- Create routines: Tap More > Routines > Create Routine > When this happens > Select the smart button > Add action (e.g., turn on lights, control other devices)
Google Home
- Open the Google Home app
- Tap "+" > Set up device > New device
- Choose "Matter device"
- Scan the QR code or enter the manual pairing code
- Follow the prompts to complete setup
- Create automations: Tap Automations > Create Automation > When button is pressed > Choose action
Code Structure
The MatterSmartButton example consists of the following main components:
-
setup(): Initializes hardware (button), configures Wi-Fi (if needed), initializes the Matter Generic Switch endpoint, and starts the Matter stack. -
loop(): Checks the Matter commissioning state, handles button input for sending click events and factory reset, and allows the Matter stack to process events. -
Button Event Handling:
- Detects button press and release with debouncing (250 ms)
- Sends click event to Matter controller using
SmartButton.click()when button is released - Handles long press (>5 seconds) for factory reset
Troubleshooting
- Device not visible during commissioning: Ensure Wi-Fi or Thread connectivity is properly configured
- Button clicks not registering: Check Serial Monitor for "User button released" messages. Verify button wiring and that debounce time is appropriate
- Automations not triggering: Ensure the device is commissioned and that automations are properly configured in your Matter app. The button sends events, but automations must be set up in the app
- Button not responding: Verify button pin configuration and connections. Check that the button is properly connected with pull-up resistor (INPUT_PULLUP mode)
- Failed to commission: Try factory resetting the device by long-pressing the button. Other option would be to erase the SoC Flash Memory by using
Arduino IDE Menu->Tools->Erase All Flash Before Sketch Upload: "Enabled"or directly withesptool.py --port <PORT> erase_flash - No serial output: Check baudrate (115200) and USB connection
- Multiple clicks registered for single press: Increase the debounce time in the code if needed
Related Documentation
License
This example is licensed under the Apache License, Version 2.0.