es32d26 espHome.yaml

es32d26 espHome.yaml

# ESPHome-Konfiguration
# Hardware: ESP32-DevKit C, installiert im Eletechsup ES32D26
#
# ┌─ DIP-SCHALTER SW1 HINWEIS ──────────────────────────────────────────┐
# │ Vo1/Vo2 (0-10V AO) und Io1/Io2 (0-20mA AO) teilen sich IO25/IO26.  │
# │ Es kann jeweils nur EINER aktiv sein — SW1 entsprechend einstellen.        │
# │ Diese Konfiguration setzt voraus, dass SW1 auf Vo1/Vo2 (0-10V) eingestellt ist.       │
# └────────────────────────────────────────────────────────────────┘
#
# ┌─ ADC2-EINSCHRÄNKUNG ──────────────────────────────────────────────┐
# │ GPIO14 (Vi1) und GPIO27 (Vi3) sind ADC2-Pins. ADC2 kann nicht   │
# │ verwendet werden, wenn WLAN aktiv ist — diese Eingänge sind daher weggelassen.          │
# └────────────────────────────────────────────────────────────────┘
#
# ┌─ 74HC595 PIN-ZUWIESUNG HINWEIS ──────────────────────────────────┐
# │ Das Handbuch des ES32D26 führt IO22/IO23/IO12/IO13 für den 74HC595 auf,   │
# │ gibt aber nicht an, welcher Pin für Daten/Takt/Latch/OE zuständig ist.         │
# │ Vier mögliche Konfigurationen sind unten als Kommentare aufgeführt.  │
# │ Testen Sie jede, bis die Relais reagieren. Der OE-Pin muss aktiv   │
# │ niedrig sein — wenn gar kein Relais schaltet, ist OE wahrscheinlich falsch konfiguriert.    │
# │                                                                │
# │ Konfiguration A (aktuell — zuerst testen):                                │
# │   data=IO23, clock=IO22, latch=IO13, oe=IO12                   │
# │ Konfiguration B:                                                    │
# │   data=IO23, clock=IO22, latch=IO12, oe=IO13                   │
# │ Konfiguration C:                                                  │
# │   data=IO22, clock=IO23, latch=IO13, oe=IO12                   │
# │ Konfiguration D:                                                  │
# │   data=IO22, clock=IO23, latch=IO12, oe=IO13                   │
# └────────────────────────────────────────────────────────────────┘

esphome:
  name: es32d26
  friendly_name: "ES32D26 Controller"

esp32:
  board: esp32dev
  framework:
    type: arduino

logger:

api:
  encryption:
    key: !secret api_encryption_key

ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "ES32D26 Fallback"
    password: !secret fallback_password

captive_portal:


# ─────────────────────────────────────────────────────────────────
# RELAIS-AUSGÄNGE CH1-CH8
# 74HC595-Schieberegister
# Die Relais sind aktiv niedrig — inverted: true korrigiert die Logik
# restore_mode: ALWAYS_OFF verhindert, dass alle Relais beim Booten einrasten
# ─────────────────────────────────────────────────────────────────

sn74hc595:
  - id: sn74hc595_hub
    data_pin: GPIO12
    clock_pin: GPIO22
    latch_pin: GPIO23
    oe_pin: GPIO13
    sr_count: 1

switch:
  - platform: gpio
    name: "CH1 Relais"
    id: relay_ch1
    restore_mode: ALWAYS_OFF
    pin:
      sn74hc595: sn74hc595_hub
      number: 0
      inverted: false

  - platform: gpio
    name: "CH2 Relais"
    id: relay_ch2
    restore_mode: ALWAYS_OFF
    pin:
      sn74hc595: sn74hc595_hub
      number: 1
      inverted: false

  - platform: gpio
    name: "CH3 Relais"
    id: relay_ch3
    restore_mode: ALWAYS_OFF
    pin:
      sn74hc595: sn74hc595_hub
      number: 2
      inverted: false

  - platform: gpio
    name: "CH4 Relais"
    id: relay_ch4
    restore_mode: ALWAYS_OFF
    pin:
      sn74hc595: sn74hc595_hub
      number: 3
      inverted: false

  - platform: gpio
    name: "CH5 Relais"
    id: relay_ch5
    restore_mode: ALWAYS_OFF
    pin:
      sn74hc595: sn74hc595_hub
      number: 4
      inverted: false

  - platform: gpio
    name: "CH6 Relais"
    id: relay_ch6
    restore_mode: ALWAYS_OFF
    pin:
      sn74hc595: sn74hc595_hub
      number: 5
      inverted: false

  - platform: gpio
    name: "CH7 Relais"
    id: relay_ch7
    restore_mode: ALWAYS_OFF
    pin:
      sn74hc595: sn74hc595_hub
      number: 6
      inverted: false

  - platform: gpio
    name: "CH8 Relais"
    id: relay_ch8
    restore_mode: ALWAYS_OFF
    pin:
      sn74hc595: sn74hc595_hub
      number: 7
      inverted: false


# ─────────────────────────────────────────────────────────────────
# DIGITALEINGÄNGE IN1-IN8 (NPN-optoisoliert)
# 74HC165-Schieberegister
# PL (load) = IO15, CP (clock) = IO2, Q7 (data) = IO0
# ─────────────────────────────────────────────────────────────────

sn74hc165:
  - id: sn74hc165_hub
    clock_pin: GPIO2
    data_pin: GPIO15
    load_pin: GPIO0
    sr_count: 1

binary_sensor:
  - platform: gpio
    name: "IN1 Digitaler Eingang"
    id: din_in1
    pin:
      sn74hc165: sn74hc165_hub
      number: 0
      inverted: true

  - platform: gpio
    name: "IN2 Digitaler Eingang"
    id: din_in2
    pin:
      sn74hc165: sn74hc165_hub
      number: 1
      inverted: true

  - platform: gpio
    name: "IN3 Digitaler Eingang"
    id: din_in3
    pin:
      sn74hc165: sn74hc165_hub
      number: 2
      inverted: true

  - platform: gpio
    name: "IN4 Digitaler Eingang"
    id: din_in4
    pin:
      sn74hc165: sn74hc165_hub
      number: 3
      inverted: true

  - platform: gpio
    name: "IN5 Digitaler Eingang"
    id: din_in5
    pin:
      sn74hc165: sn74hc165_hub
      number: 4
      inverted: true

  - platform: gpio
    name: "IN6 Digitaler Eingang"
    id: din_in6
    pin:
      sn74hc165: sn74hc165_hub
      number: 5
      inverted: true

  - platform: gpio
    name: "IN7 Digitaler Eingang"
    id: din_in7
    pin:
      sn74hc165: sn74hc165_hub
      number: 6
      inverted: true

  - platform: gpio
    name: "IN8 Digitaler Eingang"
    id: din_in8
    pin:
      sn74hc165: sn74hc165_hub
      number: 7
      inverted: true


# ─────────────────────────────────────────────────────────────────
# 0-10V ANALOGAUSGÄNGE Vo1 & Vo2
# GPIO25=DAC1 (Vo1), GPIO26=DAC2 (Vo2)
# ─────────────────────────────────────────────────────────────────

output:
  - platform: esp32_dac
    pin: GPIO25
    id: dac_vo1

  - platform: esp32_dac
    pin: GPIO26
    id: dac_vo2

number:
  - platform: template
    name: "Vo1-Ausgang (0-10V)"
    id: vo1_level
    min_value: 0
    max_value: 100
    step: 1
    unit_of_measurement: "%"
    icon: "mdi:sine-wave"
    optimistic: true
    restore_value: true
    initial_value: 0
    set_action:
      - output.set_level:
          id: dac_vo1
          level: !lambda "return x / 100.0;"

  - platform: template
    name: "Vo2-Ausgang (0-10V)"
    id: vo2_level
    min_value: 0
    max_value: 100
    step: 1
    unit_of_measurement: "%"
    icon: "mdi:sine-wave"
    optimistic: true
    restore_value: true
    initial_value: 0
    set_action:
      - output.set_level:
          id: dac_vo2
          level: !lambda "return x / 100.0;"


# ─────────────────────────────────────────────────────────────────
# ANALOG-EINGÄNGE
#
# Vi2 (GPIO33) und Vi4 (GPIO32) — ADC1, funktionieren mit aktivem WLAN
# Vi1 (GPIO14) und Vi3 (GPIO27) — ADC2, deaktiviert (inkompatibel mit WLAN)
#
# Filterformel aus dem ES32A08-Referenzmodell: x / 10.0 * (10.0 + 43.0)
# Dies berücksichtigt den integrierten Widerstandsteiler (10K + 43K).
# Passen Sie den Wert 43.0 an, wenn Ihre Messwerte nicht mit einer bekannten Eingangsspannung übereinstimmen.
# ─────────────────────────────────────────────────────────────────

sensor:
  - platform: adc
    pin:
      number: GPIO33
      mode:
        input: true
    name: "Vi2 Spannungseingang"
    id: vi2
    attenuation: auto
    update_interval: 5s
    unit_of_measurement: "V"
    accuracy_decimals: 2
    filters:
      - lambda: return x / 10.0 * (10.0 + 43.0);
      - round: 2
    icon: "mdi:flash"

  - platform: adc
    pin:
      number: GPIO32
      mode:
        input: true
    name: "Vi4 Spannungseingang"
    id: vi4
    attenuation: auto
    update_interval: 5s
    unit_of_measurement: "V"
    accuracy_decimals: 2
    filters:
      - lambda: return x / 10.0 * (10.0 + 43.0);
      - round: 2
    icon: "mdi:flash"

  # Stromeingänge — alle an ADC1, funktionieren mit aktivem WLAN
  # Der Shunt-Widerstand am ES32A08 beträgt 91 Ohm (4mA=0,364V, 20mA=1,82V)
  # Passen Sie min_v/max_v an, wenn Ihre Platine einen anderen Shunt-Wert verwendet
  - platform: adc
    pin:
      number: GPIO34
      mode:
        input: true
    name: "Ii1 Stromeingang"
    id: ii1
    attenuation: auto
    update_interval: 5s
    unit_of_measurement: "mA"
    accuracy_decimals: 2
    filters:
      - lambda: |-
          float min_v = 0.364;
          float max_v = 1.82;
          float ma = (x - min_v) * 20.0 / (max_v - min_v);
          if (ma < 0.0) ma = 0.0;
          if (ma > 20.0) ma = 20.0;
          return ma;
      - round: 2
    icon: "mdi:current-dc"

  - platform: adc
    pin:
      number: GPIO39
      mode:
        input: true
    name: "Ii2 Stromeingang"
    id: ii2
    attenuation: auto
    update_interval: 5s
    unit_of_measurement: "mA"
    accuracy_decimals: 2
    filters:
      - lambda: |-
          float min_v = 0.364;
          float max_v = 1.82;
          float ma = (x - min_v) * 20.0 / (max_v - min_v);
          if (ma < 0.0) ma = 0.0;
          if (ma > 20.0) ma = 20.0;
          return ma;
      - round: 2
    icon: "mdi:current-dc"

  - platform: adc
    pin:
      number: GPIO35
      mode:
        input: true
    name: "Ii3 Stromeingang"
    id: ii3
    attenuation: auto
    update_interval: 5s
    unit_of_measurement: "mA"
    accuracy_decimals: 2
    filters:
      - lambda: |-
          float min_v = 0.364;
          float max_v = 1.82;
          float ma = (x - min_v) * 20.0 / (max_v - min_v);
          if (ma < 0.0) ma = 0.0;
          if (ma > 20.0) ma = 20.0;
          return ma;
      - round: 2
    icon: "mdi:current-dc"

  - platform: adc
    pin:
      number: GPIO36
      mode:
        input: true
    name: "Ii4 Stromeingang"
    id: ii4
    attenuation: auto
    update_interval: 5s
    unit_of_measurement: "mA"
    accuracy_decimals: 2
    filters:
      - lambda: |-
          float min_v = 0.364;
          float max_v = 1.82;
          float ma = (x - min_v) * 20.0 / (max_v - min_v);
          if (ma < 0.0) ma = 0.0;
          if (ma > 20.0) ma = 20.0;
          return ma;
      - round: 2
    icon: "mdi:current-dc"

  - platform: template
    name: "Vo1 Spannung (geschätzt)"
    lambda: "return id(vo1_level).state / 10.0;"
    unit_of_measurement: "V"
    accuracy_decimals: 1
    update_interval: 5s
    icon: "mdi:flash"

  - platform: template
    name: "Vo2 Spannung (geschätzt)"
    lambda: "return id(vo2_level).state / 10.0;"
    unit_of_measurement: "V"
    accuracy_decimals: 1
    update_interval: 5s
    icon: "mdi:flash"

Zurück zum Blog

Hinterlasse einen Kommentar