ESPHome mit ESP32 und ES32A08 Erweiterungsboard

Dieses Repository enthält Beispiele zur Integration des ESP32-Mikrocontrollers mit dem ES32A08-Erweiterungsboard von eletechsup unter Verwendung von ESPHome. Diese Kombination ermöglicht vielseitige Anwendungen mit Sensoreingängen und Ausgabeverwaltung, die sich für DIY-Elektronikprojekte eignen.

ES32A08 Erweiterungsboard

Board-Funktionen

  • 8x optokoppelte Eingänge: Low-Level-Trigger, NPN-Typ.
  • 8x 10A-Relaisausgänge
  • 4x 0-5V/10V-Spannungseingänge
  • 4x 0/4-20mA-Stromeingänge
  • 4x Tasten
  • 1x 4-Bit-Digital-VFD-Anzeige
  • RS485-Schnittstelle: (defekt, siehe unten)

Beispiele

Nachfolgend finden Sie Beispiele, die zeigen, wie jede Funktion des ES32A08-Boards genutzt werden kann.

Basiskonfigurationen

Einige der Funktionen des Boards sind dank Komponenten wie Shift-Registern möglich, daher müssen wir diese zunächst definieren.

Für die Ausgänge gibt es 3 SN74HC595 E/A-Expander (Shift-Register).

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

Für die Eingänge gibt es 1 SN74HC165 E/A-Expander (Shift-Register).

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

Tasten

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

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

Optokoppelte Eingänge

Die optokoppelten Eingänge sind über das SN74HC165-Shift-Register verfügbar und verwenden die Pins 0 bis 7.

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

Hinweis: Stellen Sie sicher, dass Sie die Basiskonfigurationen definieren, die für die Funktion erforderlich sind.

Relaisausgänge

Die Relais sind über das SN74HC595-Shift-Register verfügbar und verwenden die Pins 16 bis 23.

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

Hinweis: Stellen Sie sicher, dass Sie die Basiskonfigurationen definieren, die für die Funktion erforderlich sind.

Status-LED

Ich empfehle die Verwendung der Status-LED-Licht Komponente, da sie es ermöglicht, eine einzige LED zur Anzeige des Gerätestatus (im Fehler-/Warnzustand) oder als binäres Licht zu verwenden.

light: 
  - platform: status_led
    id: board_led
    name: "Board-LED"
    pin: GPIO15
    internal: true

Spannungseingang

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

Hinweis

Die Eingänge V3 (GPIO25) und V4 (GPIO26) können nicht verwendet werden, wenn wifi: verwendet wird.

sensor:
  - platform: adc
    id: voltage_1
    name: "Spannung 1"
    update_interval: 30s
    attenuation: auto
    pin:
      number: GPIO32
      mode:
        input: true
    filters:
      # Umrechnung dessen, was der ESP sieht, in den tatsächlichen Wert basierend auf den auf dem Board verwendeten Widerständen
      - lambda: return x / 10.0 * (10.0 + 43.0);
      # Rundung auf 2 Dezimalstellen, aber Sie können dies gerne ändern, wenn Sie mehr/weniger Präzision benötigen
      - round: 2
      - delta: 0.01

Stromeingang

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

Hier ist ein Beispiel mit einem 10-bar 4-20mA Drucksensor:

sensor:
  - platform: adc
    id: pressure
    name: "Druck"
    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

Nach vielen Stunden des Debuggens habe ich herausgefunden, dass die integrierte RS485-Schnittstelle auf dem ES32A08-Board ein Hardwareproblem aufweist, das eine Signalloopback verursacht. Dies stört die ordnungsgemäße Gerätekommunikation und macht die integrierte RS485-Schnittstelle unbrauchbar.

Für diejenigen, die eine RS485-Funktionalität benötigen, sehen Sie sich #2 an, wo ich einen möglichen Workaround bespreche, bei dem ein externes RS485-Modul an die integrierten Tasten-Pins gelötet wird.

Praxisbeispiele

Zurück zum Blog

Hinterlasse einen Kommentar