matter_switch.cpp
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
}
}