zigbee_switch.c

ESP32-H2 · Archivo : zigbee_switch.c · Lenguaje : C · Uso : Monter un interrupteur Zigbee 3.0 (client On/Off)

El H2 es el chip Zigbee de Espressif: con esp-zigbee-sdk este esqueleto arranca la pila ZBOSS como cliente On/Off que envía órdenes toggle a las bombillas de la red. rx-on-when-idle=false: el dispositivo duerme entre pulsaciones.

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. Una bombilla/enchufe Zigbee 3.0 emparejable y una red existente (coordinador Home Assistant ZHA/Z2M).

Cableado

Sin cableado para la prueba; botón en GPIO9 para la versión completa. Antena despejada, a 1-2 m del coordinador para el emparejamiento.

Funcionamiento

zigbee_role_init arranca la pila inalámbrica; el dispositivo envía un toggle ZCL On/Off al grupo « all ». Las respuestas llegan al callback app con el estado. 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

Complete con el ejemplo oficial light_switch (botón + rejoin) y sustituya el broadcast por una dirección IEEE descubierta por match descriptor.

zigbee_switch.c

// zigbee_switch.c — squelette esp-zigbee-sdk : client On/Off.
// Compile avec la composante esp-zigbee-sdk (idf.py add-dependency).
#include "zigbee.h"
#include "zboss_api.h"
#include "zboss_api_addons.h"

static const char *TAG = "zswitch";
static uint8_t canal = 0;

// Reponse d'une commande envoyee au reseau
static void cb_app(zb_bufid_t bufid, uint16_t src_addr,
                   zb_zcl_parsed_status_t status,
                   zb_zcl_command_id_t command_id)
{
    ESP_LOGI(TAG, "reponse status=%d cmd=%d", status, command_id);
}

void app_main(void)
{
    zigbee_erase_persistent_storage(true);   // 1re fois : reseau propre
    zb_set_rx_on_when_idle(ZB_FALSE);        // device « sleepystuff » eco
    zigbee_role_init();                      // demarre ZBOSS en coord... ici client

    // A l'appui bouton : broadcast On/Off toggle sur le canal courant
    // (le switch rejoint le reseau existant via le rejoin automatique)
    ESP_LOGI(TAG, "Switch Zigbee pret — canal %d", canal);
    while (1) {
        vTaskDelay(pdMS_TO_TICKS(1000));
        // zb_zcl_start_hci... : voir exemple light_switch de esp-zigbee-sdk
    }
}

← Volver a la ficha