matter_switch.cpp

ESP32-H2 · Fichier : matter_switch.cpp · Langage : C++ · Usage : Allumer une LED depuis un contrôleur Matter/Thread

Autre cas d'école du 802.15.4 : Matter par-dessus Thread. Le H2 rejoint le réseau Thread d'un border router, expose un device On/Off, et un téléphone (Google Home/Apple Home) l'appaire avec le code QR imprimé dans le log.

Matériel requis

Une carte ESP32-H2 (RISC-V 96 MHz, radio IEEE 802.15.4 uniquement — pas de Wi-Fi) type DevKitM-1, alimentée par USB. Un border router Thread opérationnel (Raspberry Pi + OpenThread, Home Assistant, Apple TV…) et un smartphone Matter.

Branchement

Aucun câblage ; LED utilisateur sur GPIO8 comme actionneur. Antenne à portée du border router.

Fonctionnement

esp_matter::init monte la pile, on_off_light crée l'endpoint 1 avec son cluster OnOff, start lance le commissionnement BLE puis le join Thread. Les commandes Matter pilotent l'actionneur via app_driver. Programmez avec ESP-IDF (idf.py set-target esp32h2) ; le port USB-Serial/JTAG (GPIO26/27) sert de console et de port de flash. Maintenez Boot + Reset pour le mode download si besoin.

Pour aller plus loin

Remplacez la LED par un relais 230 V (via module relais 3,3 V) pour une prise connectée Matter complète.

matter_switch.cpp

// matter_switch.c — squelette esp-matter : device On/Over sur Thread.
// necessite esp-matter + un border router (OpenThread) deja operationnel.
#include "esp_matter.h"
#include "esp_matter_device_event.h"
#include "app_driver.h"

static const char *TAG = "matter";

extern "C" void app_main(void)
{
    ESP_LOGI(TAG, "Init Matter (mode Thread)");
    esp_matter::init();

    // Endpoint 1 : device On/Off avec un actionneur (la LED)
    esp_matter::endpoint::on_off_light::create(&esp_matter::endpoint::on_off_light::config_t);

    // Rejoint le reseau Thread via l'extended dataset (QR/ble provisioning)
    esp_matter::start([](esp_matter::Event_t *event, void *arg) {
        if (event->type == esp_matter::Event_t::Type::WIFI_CONNECTED ||
            event->type == esp_matter::Event_t::Type::THREAD_CONNECTED) {
            ESP_LOGI(TAG, "Rejoint ! Appairage via le code QR du log.");
        }
    });

    while (1) {
        vTaskDelay(pdMS_TO_TICKS(1000));
        // app_driver_toggle() sur bouton : voir exemple app_driver.c
    }
}

← Retour à la fiche