HA-ESP8266 sur Batterie.

Intro

Dans cet article je vous propose de partager mon expérience dans la mise en oeuvre d’un ESP8266 (ou Wemos D1) alimenté par une batterie et un panneau solaire. Le but est de le rendre indépendant de toute source d’alimentation, la limite étant celle du Wi-Fi.

Partie matérielle

L’objectif de ce montage est de pouvoir relever des températures élevées dans un barbecue au gaz, c’est pourquoi j’ai utilisé un module thermocouple, bien évidemment vous pouvez l’adapter avec d’autres types de capteur, la bibliothèque ESPHome en contient un grand nombre.

Je l’ai également utilisé cet été pour mesurer la température des panneaux photovoltaïques installés sur le toit, plus de 70°C en plein soleil et en ce moment je surveille la température de mes plans potagés dans une petite serre.

Liste des courses

Les articles nécessaires à la réalisation de ce montage sont facilement trouvables sur le Net, je vous donne des liens Ali Express, mais Amazon vous les propose également en plus cher.

Un panneau solaire 6V de 1 ou 2W, plus il est puissant, plus vite la batterie sera chargée, plus sa surface est importante. Vous en trouvez Ici par exemple

Un module de chargeur de batterie au Lithium, Type c/Micro/Mini USB 5V 1A 18650 TP4056, carte de charge avec Protection, double fonction 1A Li-ion. Ce chargeur protège votre batterie 18650 tout en délivrant une tension de 5V à partir du 3.7V de la batterie.

Vous en trouvez ici par exemple

Un module Wemos D1, vous en trouvez facilement sur Amazon ou Ali Express.

Un module 4 entrées analogiques ADS1115, vous en trouvez facilement sur Amazon ou Ali Express. Il n’est pas indispensable, je m’en sert pour remonter vers HA la tension délivrée par le panneau photovoltaïque. Vous en trouvez ici par exemple.

Une batterie 18650, 3000 mAh minimum, 4500mAh est plus courant.

Un support de batterie 18650. Vous en trouverez ici par exemple.

Un module thermocouple « max31855 » 0-800°C. Vous en trouverez ici par exemple

Un bouton poussoir de réinitialisation avec un contact normalement ouvert. Pas indispensable, mais j’en met un systématiquement, cela évite d’avoir à ouvrir le boitier pour réinitialiser le Wemos. Vous en trouverez ici par exemple.

Schéma électronique

Une fois le matériel acheté, vous pouvez commencer à les raccorder entre eux via le schéma suivant. Ce schéma a été élaboré avec « Eagle de Autodesk ».

Pour ceux qui utilise EasyEda comme logiciel de conception de PCB, voici un lien de partage du projet

Le 5V+ est relié à la broche A0 du Wemos afin de mesurer sa tension d’alimentation.

Le +6V du panneau PV est relié à l’entrée A0 du module ADS1115.

Circuit Imprimé

Élaboré avec Eagle, vous pouvez sous traiter la fabrication de ce type de PCB à https://jlcpcb.com/ ça coûte que dalle, c’est du travail de pro, il faut pas être pressé et c’est quantité 5 minimum.

Et ça coute vraiment pas cher! 2€ pour 5 PCB.

Je mets à votre disposition en téléchargement le fichier Gerber qui permet de faire fabriquer le PCB.

Mise en oeuvre

J’ai mis le PCB dans une boite plastique d’électricité 100*100, on voit sur la photo qu’elle à vécue ainsi que le panneau mais ils tiennent le choc.

Partie Logicielle

C’est sans surprise, le Wemos est codé avec ESphome. J’ai décrit le premier flashage d’un ESP dans cet article.

Rien d’exceptionnel si ce n’est la mise en veille de l’ESP et la mesure VCC

Mise en veille de l’ESP:

Il faut savoir que l’ESP se met en veille par logiciel, mais pour le sortir de sa torpeur, la broche D0 doit être reliée à la broche RST, d’ou la présence du cavalier, si vous l’enlevez, il ne se réveille pas.

Lorsque que le Wemos est en veille, il ne communique plus donc impossible de télécharger une mise à jour par exemple, c’est pourquoi par programme, je « bloque » sa mis en veille avec un « input_boolean.reveil_esp127_thermocouple » déclaré dans HA. Sur ON, la mise en veille est bloquée. Une fois le téléchargement de la mise à jour terminé vous le remettez sur OFF.

Vous pouvez déclarer l’input_boolean dans « ../config/helpers. ».

Mesure VCC

Tout est dit dans la documentation ESP, vous mesurez au max 3.3 V bien que ce soit 5V de relier à la broche A0.

Un exemple de la mesure de tension fluctuant avec le niveau de charge de la batterie:

Le panneau, bien que très bon marché, produit des que le jour se lève même par temps couvert:

Code YAML

Dans mon exemple, l’ESP se « réveille » pendant 60s (duree_reveil) toutes les 5mn (duree_sommeil). A adapter selon vos besoins dans « substitutions ».

substitutions:
  device_name: esp127-thermocouple
  adress_ip: "192.168.0.127"
  friendly_name: esp127
  duree_sommeil: "5min"
  duree_reveil: "60s"
  
esphome:
  name: ${device_name}
  platform: ESP8266
  board: d1_mini
  on_boot:
    then:
      - script.execute: exec_deep_sleep

wifi:
  networks:
    - ssid: !secret wifi_esp
      password: !secret mdpwifi_esp
      priority: 2
    - ssid: !secret wifi
      password: !secret mdpwifi
      priority: 0
  reboot_timeout: 5min
  
  manual_ip:
    static_ip: ${adress_ip}
    gateway: 192.168.0.254
    subnet: 255.255.255.0
    
deep_sleep:
  sleep_duration: ${duree_sommeil}
  id: control_deep_sleep
  
i2c:
  sda: GPIO4 #D2
  scl: GPIO5 #D1
  scan: true
  id: bus_a

logger:
api:
ota:
web_server:
  port: 80
  
spi:
  miso_pin: D5
  clk_pin: D8 #ex D1

ads1115:
  - address: 0x48
  
sensor:
  - platform: ads1115
    multiplexer: 'A0_GND'
    gain: 6.144
    name: "${friendly_name} U Panneau"
    update_interval: 10s
        
  - platform: max31855
    name: "${friendly_name} Temperature"
    cs_pin: D3
    update_interval: 10s
    accuracy_decimals: 2
    filters:
    - median:
        window_size: 8
        send_every: 4
        send_first_at: 1

  - platform: adc
    pin: VCC
    name: "${friendly_name} U Alim"
    update_interval: 10s

binary_sensor:
  - platform: homeassistant
    entity_id: input_boolean.reveil_esp127_thermocouple
    id: prevent_deep_sleep

  #Etat de la connection
  - platform: status
    name: "${friendly_name} Status"

script:
  - id: exec_deep_sleep
    mode: queued
    then:
      - delay: ${duree_reveil}
      - logger.log: 'execute script'
      - if:
          condition:
            binary_sensor.is_on: prevent_deep_sleep
          then:
            - logger.log: 'Eviter la mise en sommeil par prevent_deep_sleep'
            -  deep_sleep.prevent: control_deep_sleep
          else:
            - logger.log: 'Autorise la mise en sommeil par deep_sleep_enter'
            - deep_sleep.enter: 
                id: control_deep_sleep
                sleep_duration: ${duree_sommeil}
      - script.execute: exec_deep_sleep

Quelques vues d’exemple:

type: entities
entities:
  - entity: sensor.esp127_temperature
    secondary_info: last-updated
  - entity: sensor.esp127_u_alim
    secondary_info: last-updated
  - entity: sensor.esp127_u_panneau
    secondary_info: last-updated
  - entity: input_boolean.reveil_esp127_thermocouple
  - entity: binary_sensor.esp127_status
    secondary_info: last-updated
title: Esp127-thermocouple
type: history-graph
entities:
  - entity: sensor.esp127_u_alim
    name: Alim
  - entity: sensor.esp127_u_panneau
    name: Panneau
title: ESP127
hours_to_show: 12

Conclusion:

Tuto tout simple qui, je l’espère, vous aidera à résoudre vos problèmes d’ESP Isolé à l’extérieur.

16 Comments on “HA-ESP8266 sur Batterie.”

  1. Bonjour,
    Félicitation pour toutes ces explications
    Je suis retraité mais très jeune dans Home assistant et grâce a ton explication j’arrive a avoir la tension sur ma puce 8266 mais j’aimerais avoir plus de détail sur ma batterie lipo 2000mah (sa tension, son % de charge , etc…)
    merci de ton aide
    Bruno

    1. Bonjour et merci pour ton retour. Tu peux mesurer la tension de la batterie en connectant le plus sur l’entrée A1 de l’ADS1115 et en ajoutant ce code:
      – platform: ads1115
      multiplexer: ‘A1_GND’
      gain: 6.144
      name: « ${friendly_name} U Batterie »
      update_interval: 10s
      Pour des info supplémentaires, il faudrait un BMS communiquant, je ne pense pas que cela existe pour une seule batterie. Cdlt

  2. Tes articles sont toujours un plaisir à lire, merci pour la qualité et le détail de tes explications!!!

  3. Bonjour, merci encore pour ta réponse concernant la tension de la batterie.
    J’ai beaucoup chercher sur internet mais je n’y arrive pas.
    J’ai créer un détecteur de mouvement (PIR, D1 mini , batterie 2000mah) sur HA
    je n’arrive pas a trouver comment écrire le YAML pour le deep sleep qui doit sur se réveiller seulement quand le PIR envoi une impulsion et comment gérer ma batterie pour quelle dure sans panneau solaire
    merci d’avance de ta réponse

  4. Bonjour, merci encore pour ta réponse concernant la tension de la batterie.
    J’ai beaucoup chercher sur internet mais je n’y arrive pas.
    J’ai créer un détecteur de mouvement (PIR, D1 mini , batterie 2000mah) sur HA
    je n’arrive pas a trouver comment écrire le YAML pour le deep sleep qui doit sur se réveiller seulement quand le PIR envoi une impulsion et comment gérer ma batterie pour quelle dure sans panneau solaire
    merci d’avance de ta réponse

  5. Bonjour,
    je me permet de te relancer sur mon précédent message
    si tu peux me dire ou trouver les infos
    merci d’avance

    1. Bonjour, voici ce je propose, je n’ai pas pu le tester: (il ne faut pas oublier le pont entre D0 et RST, c’est ce qui le fait se reveiller)
      esphome:
      name: nom_de_votre_dispositif
      platform: ESP8266
      board: d1_mini

      wifi:
      ssid: « votre_ssid »
      password: « votre_mot_de_passe »

      # Configuration du capteur PIR
      binary_sensor:
      – platform: gpio
      pin: D1
      name: « Capteur de mouvement »
      device_class: motion

      # Configuration du deep sleep
      deep_sleep:
      run_duration: 5s
      sleep_duration: 10min
      wakeup_pin:
      number: D1
      mode: UP_ONLY
      inverted: False

  6. Bonjour,
    je me permet de te relancer sur mon précédent message
    si tu peux me dire ou trouver les infos
    merci d’avance

    1. Bonjour, voici ce je propose, je n’ai pas pu le tester: (il ne faut pas oublier le pont entre D0 et RST, c’est ce qui le fait se reveiller)
      esphome:
      name: nom_de_votre_dispositif
      platform: ESP8266
      board: d1_mini

      wifi:
      ssid: « votre_ssid »
      password: « votre_mot_de_passe »

      # Configuration du capteur PIR
      binary_sensor:
      – platform: gpio
      pin: D1
      name: « Capteur de mouvement »
      device_class: motion

      # Configuration du deep sleep
      deep_sleep:
      run_duration: 5s
      sleep_duration: 10min
      wakeup_pin:
      number: D1
      mode: UP_ONLY
      inverted: False

  7. Bonjour Remy,

    Je recherche un schéma d’alimentation d’un esp8266 avec un thermomètre dallas et j’ai été séduit par ton article qui me semble répondre à ce que je recherche notamment en termes d’autonomie.

    Malheureusement je n’arrive pas à télécharger le schéma ni le fichier Gerber.. 🙁

    Alors si tu as quelques instants peut être pourrais tu me dépanner.

    Merci d’avance

    Paul

    NB J’ai une petite installation en wifi, je cherche pour l’instant à valider et stabiliser des data et ce n’est dejà pas gagné ..

    J’ai juste deux points , un qui me fournit le niveau de fuel dans ma cuve avec un capteur US mais c’est assez peut fidèle je vais donc essayer un capteur laser.

    Et le second point est un thermomètre extérieur pour lequel le wifi passe et que j’alimente avec un power bank..

    J’ai aussi teste mais pour l’instant sans succes le deep sleep mais je n’arrive pas à le reveiller..j’utilise home assistant sur un pc avec windows et proxmox

    voila..

    1. Bonjour Paul, merci pour ton retour d’expériences, effectivement, j’ai migré mon site Wp vers un nouveau serveur et les images n’ont pas toujours suivi. J’ai mis à jour les liens des images, du gerber et ajouter un lien EasyEda.Pour le Deep Sleep il faut ponter D0 avec RST. Pour la mesure de niveau, tu peux essayer ça https://fr.aliexpress.com/item/32950057764.html?spm=a2g0o.order_list.order_list_main.15.6b3c5e5bihbBeW&gatewayAdapt=glo2fra compatible ESp, je l’utilise pour un puit. Bon courage @+

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *