Capteur de température ESP32-C6 avec ESPHome

0
(0)

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.

Capteur de température sur batterie basé sur un BME280 et un ESP32C6

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 :

YAML
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 :

YAML
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 :

YAML
on_connect:
  # Update sensors
  - component.update: bme280_measure
  - component.update: battery_voltage

Cette 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.

YAML
   
- 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.

YAML
# Deep sleep configuration to save power
deep_sleep:
  id: deep_sleep_1
  sleep_duration: 15min  # Sleep duration between wake-ups

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. 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 :

YAML
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 HIGH

Mesure 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 :

YAML
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 :

YAML
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.

Avec l’utilisation de l’antenne interne, le RSSI est de –69 dBm.
Avec l’utilisation d’une antenne externe, le RSSI atteint -54 dBm.

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).

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?