Back to Arduino Esp32

Matter Temperature Sensor Example

libraries/Matter/examples/MatterTemperatureSensor/README.md

3.3.89.4 KB
Original Source

Matter Temperature Sensor Example

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.

Supported Targets

SoCWi-FiThreadBLE CommissioningStatus
ESP32Fully supported
ESP32-S2Fully supported
ESP32-S3Fully supported
ESP32-C3Fully supported
ESP32-C5Supported (Thread only)
ESP32-C6Fully supported
ESP32-H2Supported (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 temperature sensor device
  • Support for both Wi-Fi and Thread(*) connectivity
  • Temperature measurement reporting in Celsius
  • Automatic simulation of temperature readings (-10°C to 10°C range)
  • Periodic sensor updates every 5 seconds
  • Button control for factory reset (decommission)
  • Matter commissioning via QR code or manual pairing code
  • Integration with Apple HomeKit, Amazon Alexa, and Google Home (*) 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 factory reset (uses BOOT button by default)
  • Optional: Connect a real temperature sensor (DS18B20, DHT22, BMP280, BME280, etc.) and replace the simulation function

Pin Configuration

  • Button: Uses BOOT_PIN by default

Software Setup

Prerequisites

  1. Install the Arduino IDE (2.0 or newer recommended)
  2. Install ESP32 Arduino Core with Matter support
  3. ESP32 Arduino libraries:
    • Matter
    • Wi-Fi (only for ESP32 and ESP32-S2)

Configuration

Before uploading the sketch, configure the following:

  1. Wi-Fi credentials (if not using BLE commissioning - mandatory for ESP32 | ESP32-S2):

    cpp
    const char *ssid = "your-ssid";         // Change to your Wi-Fi SSID
    const char *password = "your-password"; // Change to your Wi-Fi password
    
  2. 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.

    cpp
    const uint8_t buttonPin = BOOT_PIN;  // Set your button pin here
    
  3. 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.

Building and Flashing

  1. Open the MatterTemperatureSensor.ino sketch in the Arduino IDE.
  2. Select your ESP32 board from the Tools > Board menu.
<!-- vale off -->
  1. Select "Huge APP (3MB No OTA/1MB SPIFFS)" from Tools > Partition Scheme menu.
<!-- vale on -->
  1. Enable "Erase All Flash Before Sketch Upload" option from Tools menu.
  2. Connect your ESP32 board to your computer via USB.
  3. 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.
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

Using the Device

Manual Control

The user button (BOOT button by default) provides factory reset functionality:

  • Long press (>5 seconds): Factory reset the device (decommission)

Sensor Simulation

The example includes a simulated temperature sensor that:

  • Starts at -25°C (initial value)
  • Cycles through -10°C to 10°C range
  • Increases in 0.5°C steps
  • Updates every 5 seconds
  • Resets to -10°C when reaching 10°C

To use a real temperature sensor, replace the getSimulatedTemperature() function with your sensor library code. For example, with a DS18B20:

cpp
#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:

cpp
#include <DHT.h>
DHT dht(DHT_PIN, DHT22);

float getSimulatedTemperature() {
  return dht.readTemperature();
}

Smart Home Integration

Use a Matter-compatible hub (like an Apple HomePod, Google Nest Hub, or Amazon Echo) to commission the device.

Apple Home

  1. Open the Home app on your iOS device
  2. Tap the "+" button > Add Accessory
  3. Scan the QR code displayed in the Serial Monitor, or
  4. Tap "I Don't Have a Code or Cannot Scan" and enter the manual pairing code
  5. Follow the prompts to complete setup
  6. The device will appear as a temperature sensor in your Home app
  7. You can monitor the temperature readings and set up automations based on temperature levels (e.g., turn on AC when temperature exceeds threshold)

Amazon Alexa

  1. Open the Alexa app
  2. Tap More > Add Device > Matter
  3. Select "Scan QR code" or "Enter code manually"
  4. Complete the setup process
  5. The temperature sensor will appear in your Alexa app
  6. You can monitor temperature readings and create routines based on temperature changes

Google Home

  1. Open the Google Home app
  2. Tap "+" > Set up device > New device
  3. Choose "Matter device"
  4. Scan the QR code or enter the manual pairing code
  5. Follow the prompts to complete setup
  6. You can monitor temperature readings and create automations based on temperature changes

Code Structure

The MatterTemperatureSensor example consists of the following main components:

  1. 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.

  2. 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.

  3. 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.

Troubleshooting

  • Device not visible during commissioning: Ensure Wi-Fi or Thread connectivity is properly configured
  • Temperature readings not updating: Check that the sensor simulation function is being called correctly. For real sensors, verify sensor wiring and library initialization
  • Temperature values out of range: Ensure temperature values are in Celsius. The Matter protocol stores values as int16_t internally (1/100th of a degree Celsius), so -273.15°C (absolute zero) to 327.67°C is the valid range
  • State not changing: The simulated sensor increases by 0.5°C every 5 seconds. If you're using a real sensor, ensure it's properly connected and reading correctly
  • 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 with esptool.py --port <PORT> erase_flash
  • No serial output: Check baudrate (115200) and USB connection

License

This example is licensed under the Apache License, Version 2.0.