Dans mon tutoriel précédent Créer un capteur de température Zigbee sur batterie avec un ESP32C6, j’explique en détail comment programmer un capteur de température, basé sur un microcontrôleur ESP32-C6 et un capteur BME280, communiquant via le protocole Zigbee avec son serveur Home Assistant.

Dans ce nouveau tutoriel, je vous montre comment configurer ce capteur avec ESPHome. ESPHome est un framework open-source qui permet de générer le firmware de microcontrôleur comme les ESP32 ou ESP8266 à partir de simples fichiers de configuration YAML, sans nécessiter la moindre compétence en programmation.
Comme la prise en charge de Zigbee n’est pas encore intégrée à ESPHome, le capteur communiquera avec le serveur Home Assistant via Wi-Fi.
Le capteur fonctionnant sur batterie, j’ai concentré mes efforts sur l’optimisation de sa consommation énergétique.
Voici la configuration permettant au capteur de relever la température, la pression et l’hygrométrie toutes les 15 minutes, puis de transmettre ces données au serveur Home Assistant via le Wi-Fi :
esphome:
name: capteur-temp-esp32c6
friendly_name: capteur-temp-esp32c6
esp32:
board: esp32-c6-devkitc-1
framework:
type: esp-idf
# Enable logging only for warnings
logger:
level: WARN
# Enable Home Assistant API
api:
encryption:
key: "your-key"
ota:
- platform: esphome
password: "your-pwd"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
fast_connect: true # Disable Wi-Fi scanning, direct connection to ssid
on_connect:
# Update sensors
- component.update: bme280_measure
- component.update: battery_voltage
- delay: 5s # Delay to ensure that data is sent to HA
- deep_sleep.enter: deep_sleep_1
switch:
- platform: gpio
pin: GPIO3
id: rf_switch
name: "RF Switch"
internal: true
restore_mode: ALWAYS_OFF
- platform: gpio
pin: GPIO14
id: antenna_select
name: "Antenna Select"
internal: true
restore_mode: ALWAYS_ON # Uses external antenna
i2c:
sda: GPIO22
scl: GPIO23
scan: False
sensor:
- platform: bme280_i2c
id: bme280_measure
temperature:
name: "Temperature BME280"
pressure:
name: "Pressure BME280"
humidity:
name: "Humidity BME280"
address: 0x76
update_interval: never
- platform: adc
pin: GPIO0
name: "Battery Voltage"
id: battery_voltage
update_interval: never
attenuation: 12db # For ADC inputs > 1.1V (extends range to ~2.45V)
filters:
- multiply: 2.0 # Voltage divider (div 2) compensation
# Deep sleep configuration to save power
deep_sleep:
id: deep_sleep_1
sleep_duration: 15min # Sleep duration between wake-ups
Optimisation de la configuration Wi-Fi
Dans cette configuration ESPHome, la définition de fast_connect sur true permet de désactiver le scan du réseau Wi-Fi et ainsi accélérer la connexion à votre réseau :
fast_connect: true # Disable Wi-Fi scanning, direct connection to ssid
Le bloc on_connect permet d’exécuter des actions dès que la connexion Wi-Fi est établie. L’instruction component.update déclenche la mise à jour du capteur concerné. Ainsi, les mesures du BME280 ainsi que la tension de la batterie sont actualisées automatiquement grâce à cette configuration :
on_connect:
# Update sensors
- component.update: bme280_measure
- component.update: battery_voltageCette mise à jour est suivie d’une temporisation de 5 secondes, le temps nécessaire pour que le capteur transmette ses données au serveur Home Assistant via le Wi-Fi. L’ESP32-C6 entre ensuite en veille profonde afin de minimiser au maximum la consommation de la batterie.
- delay: 5s # Delay to ensure that data is sent to HA
- deep_sleep.enter: deep_sleep_1 Configuration de la veille profonde
Généralement la veille profonde (deep_sleep) est configurée par deux paramètres :
- run_duration : Durée pendant laquelle l’ESP32C6 doit être actif, c’est-à-dire exécuter du code.
- sleep_duration : La durée pendant laquelle l’ESP32C6 reste en mode de sommeil profond.
Ici, seul le paramètre sleep_duration est configuré. En effet, la durée d’activité ne doit pas être définie si l’on souhaite que l’ESP32C6 passe en veille profonde via l’instruction deep_sleep.enter.
# Deep sleep configuration to save power
deep_sleep:
id: deep_sleep_1
sleep_duration: 15min # Sleep duration between wake-upsMesure de la puissance du signal Wi-Fi
Afin de valider la bonne réception du signal Wi-Fi par le capteur, il est utile de configurer la remontée du RSSI dans Home Assistant.
Cette information est fournie par ESPHome, et a pour unité le dBm, voir mon article “C’est quoi… un dBm ?” pour en savoir plus. Pour l’obtenir, il suffit de déclarer le capteur wifi_signal dans la configuration d’ESPHome :
sensor:
- platform: wifi_signal
name: "Signal WiFi"
id: wifi_signal_strength
update_interval: never Le rafraîchissement de la mesure est faite lorsque l’ESP32-C6 est connectée au réseau Wi-Fi :
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
fast_connect: true # Disable Wi-Fi scanning, direct connection to ssid
on_connect:
# Update sensors
- component.update: bme280_measure
- component.update: battery_voltage
- component.update: wifi_signal_strength
- delay: 5s # Delay to ensure that data is sent to HA
- deep_sleep.enter: deep_sleep_1 Configuration de l’antenne externe
Comme expliqué dans la Getting Started de l’ESP32C6, l’activation de l’antenne externe nécessite une configuration spécifique. Par défaut, l’ESP32C6 utilise son antenne céramique interne pour le Wi-Fi.
Le choix entre l’antenne interne et une antenne externe se fait via la broche GPIO14.
- GPIO14 à l’état bas (paramètre par défaut) : l’appareil utilise l’antenne céramique intégrée.
- GPIO14 à l’état haut : l’appareil bascule vers l’antenne externe.
Pour que cette sélection soit effective, il faut d’abord placer la broche GPIO3 à l’état bas, ce qui active le contrôle du commutateur RF.
Voici la configuration pour utiliser une antenne externe :
switch:
- platform: gpio
pin: GPIO3
id: rf_switch
name: "RF Switch"
internal: true
restore_mode: ALWAYS_OFF
- platform: gpio
pin: GPIO14
id: antenna_select
name: "Antenna Select"
internal: true
restore_mode: ALWAYS_ON # Uses external antennaPour utiliser l’antenne interne, il faut configurer restore_mode sur ALWAYS_OFF pour la GPIO14.
La remontée du RSSI vers Home Assistant permet de confirmer l’apport bénéfique de l’usage d’une antenne externe.


Consommation électrique
La capture suivante illustre la consommation du capteur lorsqu’il sort de veille, effectue les mesures, les transmet au serveur Home Assistant via le Wi-Fi, puis retourne en veille profonde.

On observe que lorsque le capteur est actif et qu’il communique ses données au serveur Home Assistant en Wi-Fi, sa consommation oscille entre 26-54 mA. Lorsque l’ESP32C6 est en veille profonde, sa consommation est réduite à 23 μA.
Je vous invite à consulter mes autres tutoriels ESPHome : Intégrer un reTerminal E1002 dans Home Assistant avec ESPHome et Home Assistant : Afficher les données Météo-France sur un reTerminal E1001 avec ESPHome.
J’espère que ce tutoriel vous a été utile. N’hésitez pas à me faire part de votre avis en cliquant sur les étoiles ci-dessous ou en laissant un commentaire.
