Versatile weather station - Station météo à mini prix avec ESPHome

Bonjour !
J’ai créé une nouvelle vidéo qui est différente des précédentes. Ici, j’explique pas à pas comment créer un projet de petite station météo de A à Z.

Cette station a les fonctionnalités suivante :

  • Relevé des températures, de pression et d’humidité
  • Affichage des valeurs sur l’écran (ainsi que de l’adresse IP du serveur WEB)
  • Affichage sur serveur Web
  • Mise en veille pour économiser l’énergie
  • Sortie de la mise en veille grâce à un touch pad et affichage des valeurs
  • Stockage des températures min et max relevées
  • Remise à zéro des min et max

Voilà, le but est de pouvoir en parler ici. J’ai déjà quelques questions :

  • Est-ce que pour la mise en veille vous éteignez les écrans électriquement ou alors, comme moi, vous mettez toutes les pixels à 0 ?
  • Est-ce que vous pourriez faire des écrans plus sympas (avec icônes, etc).
  • Savez vous comment sauvegarder des objets time en mémoire flash et les restaurer pour affichage sur le display ?
  • Savez vous vous servir du composant Graph de display ?
  • Avez-vous d’autres idées ou des choses à corriger ?

Voici le code Yaml du tuto :

web_server:

text_sensor:
  - platform: wifi_info
    ip_address:
      name: ESP IP Address
      id: ip_address

# Example configuration entry for ESP32
i2c:
  - id: bus_a
    sda: GPIO21
    scl: GPIO22
    scan: true
  - id: bus_b
    sda: GPIO27
    scl: GPIO13
    scan: true
  

# BME280
sensor:
  - platform: bme280
    temperature:
      name: "BME280 Temperature"
      oversampling: 16x
      id: bme280_temperature
      on_value:
        then:
          - lambda: |-
              if (id(bme280_temperature).state < id(min_temp)) {
                id(min_temp) = id(bme280_temperature).state; 
              }
                
              if (id(bme280_temperature).state > id(max_temp)) {
                id(max_temp) = id(bme280_temperature).state;    
              }      
    pressure:
      name: "BME280 Pressure"
      id: bme280_pressure
    humidity:
      name: "BME280 Humidity"
      id: bme280_humidity
    address: 0x76
    update_interval: 15s
    i2c_id: bus_a

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    update_interval: 0.2s
    i2c_id: bus_b
    pages:
      - id: temp_big
        lambda: |-
          it.printf(0, 0, id(quicksand_big), "%.1f°", id(bme280_temperature).state);    
      - id: datas
        lambda: |-
          it.printf(0, 0, id(quicksand), "%.1f°", id(bme280_temperature).state);
          it.printf(0, 18, id(quicksand), "%.0f hPa", id(bme280_pressure).state);
          it.printf(0, 36, id(quicksand), "%.0f%%", id(bme280_humidity).state);
      - id: min_max
        lambda: |-
          it.printf(0, 0, id(quicksand), "Min : %.1f°", id(min_temp));
          it.printf(0, 14, id(quicksand), "Max : %.1f°", id(max_temp));
          std::string ip = id(ip_address).state;  
          it.printf(0, 40, id(quicksand), "IP : %s", ip.c_str());                    
      - id: clear
        lambda: |-
          it.fill(COLOR_OFF);  

font:
  - file: "gfonts://Quicksand"
    id: quicksand_big
    size: 48    
  - file: "gfonts://Quicksand"
    id: quicksand
    size: 16  

script:
  - id: script_roll
    then:
      repeat:
        count: 3
        then:
          - display.page.show: temp_big
          - delay: 2s          
          - display.page.show: datas
          - delay: 2s    
          - display.page.show: min_max
          - delay: 2s                          
          - display.page.show: clear

#touch pad
esp32_touch:

binary_sensor:
  #touch pad
  - platform: esp32_touch
    name: "ESP32 Touch Pad GPIO33"
    pin: GPIO33
    threshold: 1000
    wakeup_threshold: 2000
    on_press:
      then:
        - script.execute: script_roll    

globals: 
  - id: min_temp
    type: float
    restore_value: yes
    initial_value: "100"
  - id: max_temp
    type: float
    restore_value: yes
    initial_value: "-100"

# Reset globals
button:
  - platform: factory_reset
    name: Restart with Factory Default Settings

deep_sleep:
  run_duration: 30s
  sleep_duration: 10min 
  touch_wakeup: true 
5 « J'aime »

Merci pour ce tuto
Le code présenté est pas entier par contre il me semple
Par exemple, je ne vois pas le deep sleep

quoiqu’il en soit, je vais pouvoir optimiser un peu mon code

Ah mince ! Merci, je viens de l’ajouter :slight_smile:

pas de soucis, la vidéo est explicite donc suffisante en soi

Bonjour , merci pour la vidéo qui est très claire et explicite
J’utilise ce montage sur batterie pour monitorer la température de ma piscine avec une sonde Dallas ça fonctionne très bien sauf la remonté dans HA
Tous les paramètres de l’esp remonte dans HA mais pas la température …
Peut être que le deep sleep est pas étranger au phénomène
Sinon l affichage sur l écran OLED fonctionne au top

J’ ai cependant une interrogation car l affichage OLED reste allumé même quand l esp est en deep sleep , peut être une tension résiduelle est suffisante pour l’écran ?

Bonjour !
Cela est surprenant que ça ne remonte pas dans HA, désactive le deep sleep pour voir si c’est à l’origine du problème.

J’ ai cependant une interrogation car l affichage OLED reste allumé même quand l esp est en deep sleep , peut être une tension résiduelle est suffisante pour l’écran ?

L’autre jour j’ai essayé de refaire le montage avec un autre écran et, pareil, il ne s’éteint pas ! Il faudrait vérifier pour voir si cela consomme plus…

Merci pour ta réponse , pour la remonté dans HA j’ ai essayé avec un DTH11 et ça fonctionne bien Il semble qu’il y ait une problématique avec l adressage et les ids des sondes Dallas J ai vu qu’il y a des cas mais j’ ai pas eu le temps de m en occuper encore . ESPHome temperature DS18B20 entities unavailable, but works just fine in logs - #16 by RonnieLast - ESPHome - Home Assistant Community
Pour l’ écran j ai le 1106 , dans mon cas il semble que le deep sleep fonctionne quand même , la batterie se met en veille mais l écran et quand même allumé
Merci pour tes vidéos en tout cas , j’ ai testé le H bridge aussi pour mon velux aussi

J’ai ajouté une vidéo sur comment faire un « boitier » pour la station météo en impression 3D qui s’adapte à vos modules électroniques.