zigbee_switch.c

ESP32-H2 · Fichier : zigbee_switch.c · Langage : C · Usage : Monter un interrupteur Zigbee 3.0 (client On/Off)

Le H2 est la puce Zigbee d'Espressif : avec esp-zigbee-sdk, ce squelette démarre la pile ZBOSS en client On/Off qui envoie des ordres toggle vers les ampoules du réseau. rx-on-when-idle=false : le device dort entre deux appuis.

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. Une ampoule/prise Zigbee 3.0 appairable et un réseau existant (coordinateur type Home Assistant ZHA/Z2M).

Branchement

Aucun câblage pour le test ; bouton sur GPIO9 pour la version complète. Antenne dégagée, à 1-2 m du coordinateur pour l'appairage.

Fonctionnement

zigbee_role_init lance la pile sans fil ; le device envoie un toggle ZCL On/Off vers le groupe « all ». Les réponses arrivent au callback app avec le statut d'acquitter. 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

Complétez avec l'exemple officiel light_switch (bouton + rejoin), puis remplacez le broadcast par une adresse IEEE découverte par 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
    }
}

← Retour à la fiche