libraries/Matter/examples/MatterThermostat/README.md
This example demonstrates how to create a Matter-compatible thermostat device using an ESP32 SoC microcontroller.
The application showcases Matter commissioning, thermostat control via smart home ecosystems, temperature setpoint management, and simulated heating/cooling systems with automatic temperature regulation.
| 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.
MatterThermostat.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.
Initial Setpoints are 23.0C to 20.0C with a minimum 2.5C difference
Auto mode is ON. Initial Temperature of 12.5C
Local Temperature Sensor will be simulated every 10 seconds and changed by a simulated heater and cooler to move in between setpoints.
Current Local Temperature is 12.5C
Thermostat Mode: AUTO >>> Heater is ON -- Cooler is OFF
Current Local Temperature is 13.0C
Thermostat Mode: AUTO >>> Heater is ON -- Cooler is OFF
...
Current Local Temperature is 20.0C
Thermostat Mode: AUTO >>> Heater is OFF -- Cooler is OFF
Current Local Temperature is 23.0C
Thermostat Mode: AUTO >>> Heater is OFF -- Cooler is ON
The user button (BOOT button by default) provides factory reset functionality:
You can manually set the temperature by typing a value in the Serial Monitor:
Example:
15.5
New Temperature is 15.5C
The thermostat supports four operating modes:
The example includes a simulated heating/cooling system:
Use a Matter-compatible hub (like an Apple HomePod, Google Nest Hub, or Amazon Echo) to commission the device.
The MatterThermostat example consists of the following main components:
setup(): Initializes hardware (button), configures Wi-Fi (if needed), sets up the Matter Thermostat endpoint with cooling/heating sequence of operation and AUTO mode enabled, sets initial setpoints (heating: 23.0°C, cooling: 20.0°C) and initial temperature (12.5°C), and waits for Matter commissioning.
loop(): Reads serial input for manual temperature setting, simulates heating/cooling systems and temperature changes every 10 seconds, controls heating/cooling based on thermostat mode and setpoints, handles button input for factory reset, and allows the Matter stack to process events.
getSimulatedTemperature(): Simulates temperature changes based on heating/cooling state. Temperature increases when heating is active, decreases when cooling is active. Replace this function with your actual sensor reading code.
readSerialForNewTemperature(): Reads temperature values from Serial Monitor input, validates the range (-50°C to 50°C), and updates the thermostat's local temperature.
Thermostat Control Logic:
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.