libraries/Matter/examples/MatterTemperatureSensor/README.md
This example demonstrates how to create a Matter-compatible temperature sensor device using an ESP32 SoC microcontroller.
The application showcases Matter commissioning, sensor data reporting to smart home ecosystems, and automatic simulation of temperature readings.
| SoC | Wi-Fi | Thread | BLE Commissioning | Status |
|---|---|---|---|---|
| ESP32 | ✅ | ❌ | ❌ | Fully supported |
| ESP32-S2 | ✅ | ❌ | ❌ | Fully supported |
| ESP32-S3 | ✅ | ❌ | ✅ | Fully supported |
| ESP32-C3 | ✅ | ❌ | ✅ | Fully supported |
| ESP32-C5 | ❌ | ✅ | ✅ | Supported (Thread only) |
| ESP32-C6 | ✅ | ❌ | ✅ | Fully supported |
| ESP32-H2 | ❌ | ✅ | ✅ | Supported (Thread only) |
BOOT_PIN by defaultMatterWi-Fi (only for ESP32 and ESP32-S2)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 BOOT button (GPIO 0) is used for factory reset. You can change this to a different pin if needed.
const uint8_t buttonPin = BOOT_PIN; // Set your button pin here
Real sensor integration (optional):
To use a real temperature sensor, replace the getSimulatedTemperature() function with your sensor reading code. The function should return a float value representing temperature in Celsius.
MatterTemperatureSensor.ino sketch in the Arduino IDE.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.
Current Temperature is -25.00C
Current Temperature is -10.00C
Current Temperature is -9.50C
...
Current Temperature is 10.00C
Current Temperature is -10.00C
The user button (BOOT button by default) provides factory reset functionality:
The example includes a simulated temperature sensor that:
To use a real temperature sensor, replace the getSimulatedTemperature() function with your sensor library code. For example, with a DS18B20:
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(4); // GPIO pin connected to DS18B20
DallasTemperature sensors(&oneWire);
float getSimulatedTemperature() {
sensors.requestTemperatures();
return sensors.getTempCByIndex(0);
}
Or with a DHT22:
#include <DHT.h>
DHT dht(DHT_PIN, DHT22);
float getSimulatedTemperature() {
return dht.readTemperature();
}
Use a Matter-compatible hub (like an Apple HomePod, Google Nest Hub, or Amazon Echo) to commission the device.
The MatterTemperatureSensor example consists of the following main components:
setup(): Initializes hardware (button), configures Wi-Fi (if needed), sets up the Matter Temperature Sensor endpoint with initial value (-25°C), and waits for Matter commissioning.
loop(): Displays the current temperature value every 5 seconds, updates the sensor reading from the simulated hardware sensor, handles button input for factory reset, and allows the Matter stack to process events.
getSimulatedTemperature(): Simulates a hardware temperature sensor by cycling through values from -10°C to 10°C in 0.5°C steps. Replace this function with your actual sensor reading code.
Arduino IDE Menu -> Tools -> Erase All Flash Before Sketch Upload: "Enabled" or directly with esptool.py --port <PORT> erase_flashThis example is licensed under the Apache License, Version 2.0.