Créer un capteur Zigbee avec un ESP 32H2

Bonjour à tous,

Je sollicite votre aide pour finaliser une sonde de température et d’humidité maison. J’ai passé pas mal de temps avec une IA pour dégrossir le projet, mais nous butons sur l’intégration finale dans Zigbee2MQTT.

Ma configuration : Matériel :
ESP32-H2 (format Super Mini).
Capteur : SI7021 relié en I2C sur les GPIO 11 (SDA) et 10 (SCL).
Environnement : Arduino IDE avec le Core ESP32 v3.3.5 d’Espressif.
Bibliothèque : Utilisation de la stack native Zigbee.h (classe ZigbeeTempSensor).

Le problème : Le programme fonctionne : je vois les lectures de température et d’humidité dans le moniteur série. L’appareil est bien détecté par Zigbee2MQTT (adresse réseau OK), mais il reste en état Inconnu / Non pris en charge. L’interview semble incomplète ou la signature (fingerprint) n’est pas reconnue, ce qui empêche l’affichage correct des entités dans Home Assistant.

Ma question : Est-ce que l’un d’entre vous a réussi un projet similaire avec l’ESP32-H2 ? Existe-t-il un External Converter (.js) type pour ce genre de montage DIY avec la stack Espressif ? Ou existe-t-il une alternative logicielle plus stable pour l’H2 (ESPHome, Tasmota ou autre) qui gère nativement le Zigbee sur ce chip ?

Je joins mon code actuel ci-dessous. Je ne suis pas fermé à changer d’environnement de développement si cela permet d’avoir un capteur fiable sur batterie.

Merci d’avance pour votre expertise !

#include "Zigbee.h"
#include "Adafruit_Si7021.h"
#include <Wire.h>

Adafruit_Si7021 sensor = Adafruit_Si7021();

// ON CHANGE L'ID : On passe de 5 à 10 pour forcer une nouvelle interview
#define SENSOR_ENDPOINT 10
ZigbeeTempSensor zbSensor(SENSOR_ENDPOINT);

void setup() {
  Serial.begin(115200);
  delay(3000);
  
  // Éteindre la LED RGB qui te gêne
  #ifdef RGB_BUILTIN
    neopixelWrite(RGB_BUILTIN, 0, 0, 0); 
  #endif

  Wire.begin(11, 10); // SDA=11, SCL=10
  sensor.begin();

  // ORDRE CRUCIAL : On configure AVANT d'ajouter l'Endpoint
  zbSensor.addHumiditySensor(); 
  Zigbee.addEndpoint(&zbSensor);

  Serial.println("Démarrage Zigbee (Test Continu)...");
  Zigbee.begin();
}

void loop() {
  if (Zigbee.connected()) {
    float t = sensor.readTemperature();
    float h = sensor.readHumidity();

    if (!isnan(t) && !isnan(h)) {
      zbSensor.setTemperature(t);
      zbSensor.setHumidity(h);   
      Serial.printf("Envoyé -> T: %.2f | H: %.2f\n", t, h);
    }
  }
  delay(5000); 
}

Bonjour,

J’avais fait un converter pour un exemple de code avec un dht22:

GitHub - vdomos/ESP32-H2-Zigbee-device

Merci pour le lien,
je vais regarder ça tranquillement.
J’ai passé énormément de temps hier à essayer de faire fonctionner le système.
J’ai été plus freiné par l’utilisation de VS Code et les problèmes de dépendances ou de librairies incompatibles (qui généraient des erreurs étranges) qu’autre chose.
Aujourd’hui, c’est dimanche : petite pause, on verra plus tard. Sinon, je vais devenir fou !

J’ai aussi testé le Zigbee avec un module esp32-c6 et l’ide Arduino mais pas simple pour faire un montage en dehors des exemples donnés.

J’ai mis cela de cité pour l’instant

Bon, j’abandonne, je balance VS Code, j’en peux plus. J’ai passé deux heures à essayer de programmer la puce pour écrire « hello Word », mais j’ai systématiquement une erreur de transfert sur le port COM. Je ne vais pas me rendre malade pour ça. Salut.

T’es pas obligé de faire le transfert avec VScode. Si ça compile bien, (sortie d’un fichier .bin) tu peux très bien le flasher en utilisant un autre outil « Espressif Flash Download Tool » par exemple (qui ne m’a jamais fait defaut, même avec des ESP que je croyais « corompu »)

Ouais, c’est sympa, mais j’abandonne.
Même ton outil a l’air bien, mais ce n’est pas si simple : j’ai 9 fichiers .bin et je ne sais même pas comment les organiser dedans.
Je vais retourner sur l’IDE Arduino et je m’en contenterai, ce sera plus sage.

Bonjour,

J’ai 25 ESP32 (différents modèles mais pas de ESP32-H2), je n’ai jamais eu à manipuler de .bin, je fais tout depuis ESPHome Builder en Addon dans HA, je ne comprends pas ce que tu fais avec VS Code pour un ESP !
L’éditeur de ESPHome Builder fonctionne parfaitement.
Il me semble que le ESP32-H2 super mini n’a pas de WIFI, il faut donc le brancher en USB sur un PC et tu le trouveras depuis ESPHome.

Bob

1 « J'aime »

Oui pour faire un firmware ESPhome… mais sauf erreur ou évolution récente, le zigbee n’est pas supporté par ESPhome.
Donc si tu veux te faire un firmware qui gère le zigbee, t’es bien obligé de te palucher le code à la main, en C++ (et pas en yaml…) et pour ça VScode reste quand même un standard (avec l’add-on Platformio le plus souvent) mais c’est vrai que c’est souvent un peu lourd.

Merci pour la précision @Forhorse, comme indiqué je n’ai jamais utilisé l’ESP32-H2.
En espérant que ESPHome supporte prochainement le Zigbee alors :wink:
Pour avoir eu récemment un problème de Box, plus aucun ESP32 en ligne, en Zigbee ils seraient restés connectés :slight_smile:
Bob

Hello,

J’ai épluché les schémas et les datasheets des composants de ma carte de développement (LDO, LED, etc.) et rien ne justifie physiquement une consommation résiduelle de 6mA.

Mon analyse est que le problème vient directement du module ESP32-H2 : il semblerait que la pile Zigbee ou le bloc radio interne ne passe pas réellement en mode basse consommation, même en appelant le Deep Sleep. Cela enlève énormément d’intérêt à ce SoC pour des projets sur batterie.

Je vais donc abandonner cette piste et me diriger vers un modèle Wi-Fi/MQTT classique. Ce sera l’occasion de passer sous ESPHome, qui offre une gestion du Deep Sleep souvent plus robuste et documentée.

Merci à ceux qui ont répondu !

Bonjour @Marcus54
Je viens de tomber sur cette vidéo, balaise le jeune homme.

Bob

Oui, il semble bon, le jeune homme.

Je viens de faire un test sur un C6. super mini sur accu
Les soi-disant « le Wi-Fi, ça consomme des tonnes », c’est vraiment surfait !
Vous pouvez le voir sur le graphe ci-dessous.

J’ai fait un test où le C6 tourne à 100 % en recherchant du Wi-Fi.
Une deuxième phase où il est en idle et attend.
Une troisième phase où il est en sommeil profond.

Le H2, en pointe, consommait 40 mA.