es32d26 espHome.yaml
Partager
# Configuration ESPHome
# Matériel : ESP32-DevKit C installé dans un Eletechsup ES32D26
#
# ┌─ REMARQUE SUR LE BAILLET SW1 ──────────────────────────────────────────┐
# │ Vo1/Vo2 (0-10V AO) et Io1/Io2 (0-20mA AO) partagent IO25/IO26. │
# │ Un SEUL peut être actif à la fois — réglez SW1 en conséquence. │
# │ Cette configuration suppose que SW1 est réglé sur le mode Vo1/Vo2 (0-10V). │
# └────────────────────────────────────────────────────────────────┘
#
# ┌─ LIMITATION DE L'ADC2 ──────────────────────────────────────────────┐
# │ GPIO14 (Vi1) et GPIO27 (Vi3) sont des broches ADC2. L'ADC2 ne peut pas │
# │ être utilisé lorsque le WiFi est actif — ces entrées sont omises. │
# └────────────────────────────────────────────────────────────────┘
#
# ┌─ REMARQUE SUR L'ATTRIBUTION DES BROCHES DU 74HC595 ──────────────────────────────────┐
# │ Le manuel de l'ES32D26 liste IO22/IO23/IO12/IO13 pour le 74HC595 │
# │ mais ne précise pas quelle broche correspond à data/clock/latch/OE. │
# │ Quatre configurations candidates sont fournies ci-dessous en commentaire. │
# │ Essayez chacune d'elles jusqu'à ce que les relais répondent. La broche OE doit être active │
# │ à l'état bas — si aucun relais ne se déclenche, OE est probablement mal configuré. │
# │ │
# │ Config A (actuelle — essayez en premier) : │
# │ data=IO23, clock=IO22, latch=IO13, oe=IO12 │
# │ Config B : │
# │ data=IO23, clock=IO22, latch=IO12, oe=IO13 │
# │ Config C : │
# │ data=IO22, clock=IO23, latch=IO13, oe=IO12 │
# │ Config D : │
# │ data=IO22, clock=IO23, latch=IO12, oe=IO13 │
# └────────────────────────────────────────────────────────────────┘
esphome:
name: es32d26
friendly_name: "Contrôleur ES32D26"
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:
# ─────────────────────────────────────────────────────────────────
# SORTIES DE RELAIS CH1-CH8
# Registre à décalage 74HC595
# Les relais sont actifs à l'état bas — inverted: true corrige la logique
# restore_mode: ALWAYS_OFF empêche tous les relais de rester enclenchés au démarrage
# ─────────────────────────────────────────────────────────────────
sn74hc595:
- id: sn74hc595_hub
data_pin: GPIO12
clock_pin: GPIO22
latch_pin: GPIO23
oe_pin: GPIO13
sr_count: 1
switch:
- platform: gpio
name: "Relais CH1"
id: relay_ch1
restore_mode: ALWAYS_OFF
pin:
sn74hc595: sn74hc595_hub
number: 0
inverted: false
- platform: gpio
name: "Relais CH2"
id: relay_ch2
restore_mode: ALWAYS_OFF
pin:
sn74hc595: sn74hc595_hub
number: 1
inverted: false
- platform: gpio
name: "Relais CH3"
id: relay_ch3
restore_mode: ALWAYS_OFF
pin:
sn74hc595: sn74hc595_hub
number: 2
inverted: false
- platform: gpio
name: "Relais CH4"
id: relay_ch4
restore_mode: ALWAYS_OFF
pin:
sn74hc595: sn74hc595_hub
number: 3
inverted: false
- platform: gpio
name: "Relais CH5"
id: relay_ch5
restore_mode: ALWAYS_OFF
pin:
sn74hc595: sn74hc595_hub
number: 4
inverted: false
- platform: gpio
name: "Relais CH6"
id: relay_ch6
restore_mode: ALWAYS_OFF
pin:
sn74hc595: sn74hc595_hub
number: 5
inverted: false
- platform: gpio
name: "Relais CH7"
id: relay_ch7
restore_mode: ALWAYS_OFF
pin:
sn74hc595: sn74hc595_hub
number: 6
inverted: false
- platform: gpio
name: "Relais CH8"
id: relay_ch8
restore_mode: ALWAYS_OFF
pin:
sn74hc595: sn74hc595_hub
number: 7
inverted: false
# ─────────────────────────────────────────────────────────────────
# ENTRÉES NUMÉRIQUES IN1-IN8 (optocouplage NPN)
# Registre à décalage 74HC165
# 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: "Entrée numérique IN1"
id: din_in1
pin:
sn74hc165: sn74hc165_hub
number: 0
inverted: true
- platform: gpio
name: "Entrée numérique IN2"
id: din_in2
pin:
sn74hc165: sn74hc165_hub
number: 1
inverted: true
- platform: gpio
name: "Entrée numérique IN3"
id: din_in3
pin:
sn74hc165: sn74hc165_hub
number: 2
inverted: true
- platform: gpio
name: "Entrée numérique IN4"
id: din_in4
pin:
sn74hc165: sn74hc165_hub
number: 3
inverted: true
- platform: gpio
name: "Entrée numérique IN5"
id: din_in5
pin:
sn74hc165: sn74hc165_hub
number: 4
inverted: true
- platform: gpio
name: "Entrée numérique IN6"
id: din_in6
pin:
sn74hc165: sn74hc165_hub
number: 5
inverted: true
- platform: gpio
name: "Entrée numérique IN7"
id: din_in7
pin:
sn74hc165: sn74hc165_hub
number: 6
inverted: true
- platform: gpio
name: "Entrée numérique IN8"
id: din_in8
pin:
sn74hc165: sn74hc165_hub
number: 7
inverted: true
# ─────────────────────────────────────────────────────────────────
# SORTIES ANALOGIQUES 0-10V 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: "Sortie Vo1 (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: "Sortie Vo2 (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;"
# ─────────────────────────────────────────────────────────────────
# ENTRÉES ANALOGIQUES
#
# Vi2 (GPIO33) et Vi4 (GPIO32) — ADC1, fonctionnent avec le WiFi actif
# Vi1 (GPIO14) et Vi3 (GPIO27) — ADC2, désactivés (incompatibles avec le WiFi)
#
# Formule de filtrage de la référence ES32A08 : x / 10.0 * (10.0 + 43.0)
# Cela tient compte du pont diviseur de résistances intégré (10K + 43K).
# Ajustez la valeur 43.0 si vos mesures ne correspondent pas à une tension d'entrée connue.
# ─────────────────────────────────────────────────────────────────
sensor:
- platform: adc
pin:
number: GPIO33
mode:
input: true
name: "Entrée de tension Vi2"
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: "Entrée de tension Vi4"
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"
# Entrées de courant — toutes sur ADC1, fonctionnent avec le WiFi actif
# La résistance shunt sur l'ES32A08 est de 91 ohms (4mA=0.364V, 20mA=1.82V)
# Ajustez min_v/max_v si votre carte utilise une valeur de shunt différente
- platform: adc
pin:
number: GPIO34
mode:
input: true
name: "Entrée de courant Ii1"
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: "Entrée de courant Ii2"
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: "Entrée de courant Ii3"
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: "Entrée de courant Ii4"
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: "Tension Vo1 (estimée)"
lambda: "return id(vo1_level).state / 10.0;"
unit_of_measurement: "V"
accuracy_decimals: 1
update_interval: 5s
icon: "mdi:flash"
- platform: template
name: "Tension Vo2 (estimée)"
lambda: "return id(vo2_level).state / 10.0;"
unit_of_measurement: "V"
accuracy_decimals: 1
update_interval: 5s
icon: "mdi:flash"