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. Cet outil permet une configuration simple en 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
on_boot:
then:
- output.turn_on: rf_switch
- delay: 100ms
- output.turn_on: antenna_select
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
output:
- platform: gpio
pin: GPIO03
id: rf_switch
inverted: true # turn_on → set GPIO3 to LOW
- platform: gpio
pin: GPIO14
id: antenna_select
inverted: false # turn_on → set GPIO14 to HIGH
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’ESP32C6 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-upsConfiguration 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. 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.
- 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.
Voici la configuration à utiliser dans ESPHome pour activer l’antenne externe :
esphome:
name: capteur-temp-esp32c6
friendly_name: capteur-temp-esp32c6
on_boot:
priority: 600
then:
- output.turn_on: rf_switch
- delay: 100ms
- output.turn_on: antenna_select
output:
- platform: gpio
pin: GPIO03
id: rf_switch
inverted: true # turn_on → set GPIO3 to LOW
- platform: gpio
pin: GPIO14
id: antenna_select
inverted: false # turn_on → set GPIO14 to HIGHMesure 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 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
Lorsque le capteur est actif et qu’il communique ses données au serveur Home Assistant en Wi-Fi, sa consommation oscille entre 30-80 mA. Lorsque l’ESP32C6 est en veille profonde, sa consommation est de 15 μA.
La vidéo suivante illustre la consommation du capteur lorsqu’il sort de veille (t = 3 s), effectue les mesures, les transmet au serveur Home Assistant via le Wi-Fi, puis retourne en veille profonde (t = 10 s).
