matter_switch.cpp

ESP32-H2 · Archivo : matter_switch.cpp · Lenguaje : C++ · Uso : Allumer une LED depuis un contrôleur Matter/Thread

El otro caso estrella del 802.15.4: Matter sobre Thread. El H2 se une a la red Thread de un border router, expone un dispositivo On/Off y un teléfono (Google Home/Apple Home) lo empareja con el código QR impreso en el log.

Hardware necesario

Una placa ESP32-H2 (RISC-V a 96 MHz, radio IEEE 802.15.4 solo — sin Wi-Fi) tipo DevKitM-1, alimentada por USB. Un border router Thread operativo (Raspberry Pi + OpenThread, Home Assistant, Apple TV…) y un smartphone Matter.

Cableado

Sin cableado; LED de usuario en GPIO8 como accionador. Antena al alcance del border router.

Funcionamiento

esp_matter::init monta la pila, on_off_light crea el endpoint 1 con su cluster OnOff, start lanza el commissioning BLE y luego el join Thread. Los comandos Matter mueven el accionador via app_driver. Prográmelo con ESP-IDF (idf.py set-target esp32h2); el puerto USB-Serial/JTAG (GPIO26/27) sirve de consola y puerto de flash. Mantenga Boot + Reset para modo download si hace falta.

Para ir más lejos

Sustituya el LED por un relé de 230 V (vía módulo de relé a 3,3 V) para una enchufe inteligente Matter completo.

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
    }
}

← Volver a la ficha