ESPHome avec ESP32 et carte d’extension ES32A08

Ce dépôt fournit des exemples d'intégration du microcontrôleur ESP32 avec la carte d'extension ES32A08 d'eletechsup à l'aide d'ESPHome. Cette combinaison permet des applications polyvalentes impliquant la gestion des entrées de capteurs et des sorties, adaptées aux projets d'électronique DIY.

Carte d'extension ES32A08

Caractéristiques de la carte

  • 8 entrées opto-isolées : déclenchement à bas niveau, type NPN.
  • 8 sorties relais 10 A
  • 4 entrées de tension 0-5 V/10 V
  • 4 entrées de courant 0/4-20 mA
  • 4 boutons
  • 1 affiche numérique 4 bits
  • Interface RS485 : (défectueuse, voir ci-dessous)

Exemples

Vous trouverez ci-dessous des exemples montrant comment utiliser chaque fonctionnalité de la carte ES32A08.

Configurations de base

Certaines des fonctionnalités de la carte sont possibles grâce à des composants tels que des registres à décalage, nous devons donc d'abord les définir.

Pour les sorties, il y a 3 SN74HC595 extenseurs d'E/S (registres à décalage).

sn74hc595 :
  - id : 'output_hub'
    data_pin : GPIO13
    clock_pin : GPIO27
    latch_pin : GPIO14
    oe_pin : GPIO4
    sr_count : 3

Pour les entrées, il y a 1 SN74HC165 extenseur d'E/S (registre à décalage).

sn74hc165 :
  - id : 'input_hub'
    data_pin : GPIO5
    clock_pin : GPIO17
    load_pin : GPIO16

Boutons

KEY1 - GPIO18
KEY2 - GPIO19
KEY3 - GPIO21
KEY4 - GPIO23

binary_sensor :
  - platform : gpio
    id : key_1
    name : "Touche 1"
    internal : true
    pin : 
      number : GPIO18
      inverted : true
      mode :
        input : true
        pullup : true
    on_press :
      then :
        ...

Entrées opto-isolées

Les entrées opto-isolées sont disponibles à l'aide du registre à décalage SN74HC165 et utilisent les broches 0 à 7.

binary_sensor :
  - platform : gpio
    id : input_1
    name : "Entrée 1"
    pin : 
      sn74hc165 : 'input_hub'
      number : 0
      inverted : true
    on_press :
      then :
        ...

Remarque : assurez-vous de définir les configurations de base nécessaires pour que cela fonctionne

Sorties relais

Les relais sont disponibles à l'aide du registre à décalage SN74HC595 et utilisent les broches 16 à 23.

switch :
  - platform : gpio
    id : relay_1
    name : "Relais 1"
    pin :
      sn74hc595 : 'output_hub'
      number : 16

Remarque : assurez-vous de définir les configurations de base nécessaires pour que cela fonctionne

LED d'état

Je suggère d'utiliser le composant Status LED Light , car il permet de partager une seule LED pour indiquer l'état du dispositif (lorsqu'il est en état d'erreur/d'avertissement) ou comme lumière binaire.

light : 
  - platform : status_led
    id : board_led
    name : "LED de la carte"
    pin : GPIO15
    internal : true

Entrée de tension

V1 - GPIO32
V2 - GPIO33
V3 - GPIO25
V4 - GPIO26

Remarque

Les entrées V3 (GPIO25) et V4 (GPIO26) ne peuvent pas être utilisées lorsque wifi: est utilisé.

sensor :
  - platform : adc
    id : voltage_1
    name : "Tension 1"
    update_interval : 30s
    attenuation : auto
    pin :
      number : GPIO32
      mode :
        input : true
    filters :
      # Conversion de ce que l'ESP voit en valeur réelle en fonction des résistances utilisées sur la carte
      - lambda : return x / 10.0 * (10.0 + 43.0);
      # Arrondi à 2 décimales, mais n'hésitez pas à modifier cela si vous avez besoin de plus ou moins de précision
      - round : 2
      - delta : 0.01

Entrée de courant

I1 - GPIO36
I2 - GPIO39
I3 - GPIO34
I4 - GPIO35

Voici un exemple avec un capteur de pression 4-20mA à 10 bars :

sensor :
  - platform : adc
    id : pressure
    name : "Pression"
    device_class : pressure
    state_class : measurement
    unit_of_measurement : bar
    accuracy_decimals : 2
    attenuation : 0db
    samples : 64
    pin :
      number : GPIO36
      mode :
        input : true
    filters :
      - lambda : !lambda |-
          if (isnan(x)) return NAN;

          float min_v = 0.364; // 4mA x 91R
          float max_v = 1.82; // 20mA x 91R
          float max_bar = 10.0;

          float bar = (x - min_v) * max_bar / (max_v - min_v);
          if (bar < 0.0) bar = 0.0;
          if (bar > max_bar) bar = max_bar;
          return bar;
      - round : 2
      - delta : 0.015

RS485

Après de nombreuses heures de débogage, j'ai découvert que l'interface RS485 intégrée à la carte ES32A08 présente un problème matériel provoquant une boucle de signal. Cela perturbe la communication correcte du dispositif et rend le RS485 intégré inutilisable.

Pour ceux qui ont besoin de la fonctionnalité RS485, consultez #2 où je discute d'une solution de contournement possible en utilisant un module RS485 externe soudé sur les broches des boutons intégrés.

Exemples concrets

Retour au blog

Laisser un commentaire