Tu comprendras quand tu voudras lire l’état des entrées de la carte.
Bien vu ![]()
En faite, je venais tout juste de terminé la restauration HA sur mon pi5 et j’ai fait un test rapidement pour voir.
Les gpio des entrées digitales ne passent pas en effet par l’extender.
Je modifierai.
Pour l’écran, je pense que ça devrai le faire non? Puisqu’il passera par scl et sda.
Par contre les pin à l’intérieur du boîtier pour la sonde de température, j’espère qu’ils sont bien répertoriés.
En tout cas merci beaucoup.
Tes explication m’ont grandement aidé.
J’ai télécharger les .bin puis passé en usb et installer directement en manuel pour la première installation.
Ensuite, pour la correction, directement en ota.
Merci encore pour tes explications
Tu as maintenant une base solide , bravo ![]()
oui les sda , scl GPIO , était inverser depuis le debut , une remarque , valide bien ton fichier une fois ta config terminer pour éviter les erreurs de compile a chaque ajout d'élément .
Ton ESP32-S3 communique parfaitement avec le PCA9554 via I²C :
![]()
Found device at address 0x20
Les relais et capteurs sont détectés (
Pin: x via PCA9554)
Aucun message d’erreur
marked failed
Ethernet W5500 opérationnel à 100 Mb/s
OTA actif et API connectée
l’appareil à l’adresse 0x51
C’est très probablement une horloge RTC (WS_PCF85063), comme mentionnée dans les fichiers Arduino d’origine de la carte . L'horloge gardera l'heure même sans internet .
voila si tu veut ajouter la sonde dallas et l'écran ![]()
dallas:
- pin: GPIO4
update_interval: 30s
sensor:
- platform: dallas
id: temp_eau
index: 0
name: "Température Eau Piscine"
accuracy_decimals: 1
########################################
font:
- file: "fonts/OpenSans-Regular.ttf"
id: font
size: 10
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
lambda: |-
it.printf(0, 0, id(font), "Filtration: %s", id(relais_filtration).state ? "ON" : "OFF");
it.printf(0, 10, id(font), "PAC: %s", id(relais_pac).state ? "ON" : "OFF");
it.printf(0, 20, id(font), "Temp: %.1f°C", id(temp_eau).state);
Tu es sur pour le gpio 4 et la sonde de température ?
Il s’agit d’une entrée digitale (capteur, interrupteurs etc…)
Il me semble devoir passé par les pin à l’intérieur non?
Oui, tu as raison de poser la question. Sur ta carte , les broches GPIO4 et GPIO5 sont bien accessibles via les headers externes, ce ne sont pas des broches internes uniquement.
La broche GPIO4 externe n’est pas réservée à une fonction critique. Elle est parfaitement adaptée à un capteur 1‑wire comme le DS18B20 .
Points à garder en tête en cas de mise en place de celle ci , place une résistance de pull‑up 4.7 kΩ entre le fil de données et le 3.3 V
Pour la résistance de 4,7k, oui pas de soucis je savais.
Mais je comprend pas la borne gpio4 qui semble être filtré et isolé via un optocoupleur.
Elle n’est pas conçu pour un signal binaire tel bouton, capteurs etc…?
Sur ces 8 entrées digitales, je pensais y relier mes optocoupleurs ou pourquoi pas deux transfo 230/5v (puisqu’elles acceptent jusqu’à 36v) pour les retours d’états.
Je pensais aux gpio0,1,2,3,21,47 ou 48
Exactement, tu as bien cerné la situation : sur ta carte, les 8 entrées digitales sont en effet établies via des optocoupleurs dédiés, et non connectées directement aux GPIO de l’ESP32.
Connecté directement à un pin du microcontrôleur (non filtré), donc parfait pour le protocole Dallas.
Les 8 entrées digitales (DI1–DI8) ce sont de vrais entrées optocouplées , isolées électriquement de l’ESP par opto‑coupleur.
-
Chaque entrée va sur un pin du TCA9554, derrière le bus I²C.
-
Utilise les entrées DIx → numéros internes TCA9554 pin 0 à 7.
-
Par exemple,
pin: 3etpin: 4utilisés pour "Retour Filtration" et "Retour PAC" dans ton YAML. -
Tu pilotes la tension d'entrée (8 à 36 V) via optocoupleur → TCA9554 lit l’état → ESPHome gère le binaire.
GPIO 4 → DS18B20, est parfait ici pour capteur de température.
Je doute que ça fonctionne avec le GPIO4… l’étage d’entrée à optocoupleur vas imposer un niveau qui ne sera pas compatible avec du One-Wire. Il faudrait que cet étage d’entrée puisse être mis en mode haute impédance (sortie tri-states) et je doute que ce soit le cas.
Il serait plus sage d’utiliser un GPIO libre (surtout pas le 0 déjà) moi je partirais sur le 21 qui en plus n’est pas affecté par des glitchs au boot (contrairement au 1, 2 et 3)
Non… il y a un seul TCA et il ne gère que les sorties relais.
Les entrées sont câblées sur les GPIO de l’ESP (GPIO4 à GPIO11) sans doute pour pouvoir utiliser les interruptions.
La doc est pourtant claire.
Tu as parfaitement raison , mon raisonnement initial c’est ma lecture des fichiers Arduino et mauvaise supposition : j’ai cru que les entrées digitales (DI1–DI8) passaient aussi par ce composant I²C, comme les relais, je n’ai pas revérifier le schéma , Je suis donc parti sur cette base pour modéliser les entrées et sorties , pensant qu’elles étaient toutes regroupées via un expander commun. Raisonnement correct pour les relais, « faux pour les entrées ».
comme tu le préconise , le GPIO21 est totalement libre pour y ajouter la sonde.
J'ai réussi à faire fonctionner la sonde de température mais pas sans peine.
Les deux codes pour écran et sondes étaient non fonctionnel (erreur dans validate)
J'ai donc tester plusieurs choses, demander à chatGPT (au secours que des erreurs) à Grok 3 (idem) et bingo, premier coup pour Claude AI.
Par contre, pour l'écran, j'ai un écran blanc avec des points noir.
j'ai essayé plusieurs texte pour test mais rien ne change (également tester au autre écran OLED SSD1306 mais idem.
Mon code:
esphome:
name: esp32-piscine
friendly_name: ESP32 Piscine
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
- platform: esphome
#Configuration wifi (desactivé pour connexion Ethernet)
#wifi:
# ssid: !secret wifi_ssid
# password: !secret wifi_password
#
# # Enable fallback hotspot (captive portal) in case wifi connection fails
# ap:
# ssid: "Waveshare-Esp32S3-Eth-8Di-8Ro"
# password: "WaveshareESP32"
#captive_portal: # uniquement pour connexion wifi
ethernet:
type: W5500
mosi_pin: GPIO13
miso_pin: GPIO14
clk_pin: GPIO15
cs_pin: GPIO16
interrupt_pin: GPIO12
reset_pin: GPIO39
manual_ip:
static_ip: 192.168.1.59
gateway: 192.168.1.1
subnet: 255.255.255.0
i2c:
sda: GPIO42
scl: GPIO41
scan: true
pca9554:
- id: expander
address: 0x20
# Sorties (relais)
switch:
- platform: gpio
pin:
pca9554: expander
number: 0
id: relais_filtration
name: "Filtration"
- platform: gpio
pin:
pca9554: expander
number: 1
id: relais_eclairage
name: "Éclairage Piscine"
- platform: gpio
pin:
pca9554: expander
number: 2
id: relais_pac
name: "PAC Piscine"
# Entrées digitales
binary_sensor:
- platform: gpio
name: "Etat Filtration"
pin:
number: GPIO4
- platform: gpio
name: "Etat PAC"
pin:
number: GPIO5
# Sondes températures
one_wire:
- platform: gpio
pin: GPIO21
id: bus_temp_eau
# Capteur de température
sensor:
- platform: dallas_temp
one_wire_id: bus_temp_eau
id: temp_eau
name: "Température Eau"
accuracy_decimals: 1
update_interval: 30s
resolution: 12 # Optionnel : résolution maximale pour DS18B20
# Écran OLED
# Configuration des polices pour l'écran OLED
font:
- file: "gfonts://Roboto"
id: font_default
size: 12
# Configuration de l'écran OLED SSD1306
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
id: oled_display
update_interval: 5s
lambda: |-
// Test simple
it.print(0, 0, id(font_default), "Hello World!");
it.print(0, 20, id(font_default), "Test ESP32");
it.printf(0, 40, id(font_default), "Time: %u", millis());
PS: J'avais un état ON pour la filtration avec des fois des ON/OFF/ON sans arrêt avec la ligne:
inverted: true
Partie Entrées digitales.
J'ai retiré cette ligne et ca a l'air d'aller mieux mais pas sur.
INFO ESPHome 2025.6.3
INFO Reading configuration /config/esphome/esp32-piscine.yaml...
INFO Starting log output from 192.168.1.59 using esphome API
INFO Successfully resolved esp32-piscine @ 192.168.1.59 in 0.000s
INFO Successfully connected to esp32-piscine @ 192.168.1.59 in 0.007s
INFO Successful handshake with esp32-piscine @ 192.168.1.59 in 0.175s
[19:14:36][I][app:137]: ESPHome version 2025.6.3 compiled on Jul 8 2025, 19:07:28
[19:14:36][C][pca9554:048]: PCA9554:
[19:14:36][C][pca9554:048]: I/O Pins: 8
[19:14:36][C][pca9554:052]: Address: 0x20
[19:14:36][C][logger:211]: Logger:
[19:14:36][C][logger:211]: Max Level: DEBUG
[19:14:36][C][logger:211]: Initial Level: DEBUG
[19:14:36][C][logger:217]: Log Baud Rate: 115200
[19:14:36][C][logger:217]: Hardware UART: USB_SERIAL_JTAG
[19:14:36][C][logger:224]: Task Log Buffer Size: 768
[19:14:36][C][i2c.idf:083]: I2C Bus:
[19:14:36][C][i2c.idf:084]: SDA Pin: GPIO42
[19:14:36][C][i2c.idf:084]: SCL Pin: GPIO41
[19:14:36][C][i2c.idf:084]: Frequency: 50000 Hz
[19:14:36][C][i2c.idf:094]: Recovery: bus successfully recovered
[19:14:36][I][i2c.idf:104]: Results from bus scan:
[19:14:36][I][i2c.idf:110]: Found device at address 0x20
[19:14:36][I][i2c.idf:110]: Found device at address 0x3C
[19:14:36][I][i2c.idf:110]: Found device at address 0x51
[19:14:36][C][gpio.one_wire:022]: GPIO 1-wire bus:
[19:14:36][C][gpio.one_wire:023]: Pin: GPIO21
[19:14:36][C][gpio.one_wire:084]: Found devices:
[19:14:36][C][gpio.one_wire:086]: 0xe731f8b10a646128 (DS18B20)
[19:14:36][C][switch.gpio:079]: GPIO Switch 'Filtration'
[19:14:36][C][switch.gpio:079]: Restore Mode: always OFF
[19:14:36][C][switch.gpio:031]: Pin: 0 via PCA9554
[19:14:36][C][switch.gpio:079]: GPIO Switch 'Éclairage Piscine'
[19:14:36][C][switch.gpio:079]: Restore Mode: always OFF
[19:14:36][C][switch.gpio:031]: Pin: 1 via PCA9554
[19:14:36][C][switch.gpio:079]: GPIO Switch 'PAC Piscine'
[19:14:36][C][switch.gpio:079]: Restore Mode: always OFF
[19:14:36][C][switch.gpio:031]: Pin: 2 via PCA9554
[19:14:36][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Etat Filtration'
[19:14:36][C][gpio.binary_sensor:016]: Pin: GPIO4
[19:14:36][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Etat PAC'
[19:14:36][C][gpio.binary_sensor:016]: Pin: GPIO5
[19:14:36][C][dallas.temp.sensor:029]: Dallas Temperature Sensor:
[19:14:36][C][dallas.temp.sensor:034]: Address: 0xe731f8b10a646128 (DS18B20)
[19:14:36][C][dallas.temp.sensor:035]: Resolution: 12 bits
[19:14:36][C][dallas.temp.sensor:036]: Update Interval: 30.0s
[19:14:36][C][ssd1306_i2c:023]: I2C SSD1306
[19:14:36][C][ssd1306_i2c:023]: Rotations: 0 °
[19:14:36][C][ssd1306_i2c:023]: Dimensions: 128px x 64px
[19:14:36][C][ssd1306_i2c:024]: Address: 0x3C
[19:14:36][C][ssd1306_i2c:025]: Model: SSD1306 128x64
[19:14:36][C][ssd1306_i2c:027]: External VCC: NO
[19:14:36][C][ssd1306_i2c:027]: Flip X: YES
[19:14:36][C][ssd1306_i2c:027]: Flip Y: YES
[19:14:36][C][ssd1306_i2c:027]: Offset X: 0
[19:14:36][C][ssd1306_i2c:027]: Offset Y: 0
[19:14:36][C][ssd1306_i2c:027]: Inverted Color: NO
[19:14:36][C][ssd1306_i2c:036]: Update Interval: 5.0s
[19:14:36][D][binary_sensor:036]: 'Etat Filtration': Sending state ON
[19:14:36][C][ethernet:326]: Ethernet:
[19:14:36][C][ethernet:524]: IP Address: 192.168.1.59
[19:14:36][C][ethernet:524]: Hostname: 'esp32-piscine'
[19:14:36][C][ethernet:524]: Subnet: 255.255.255.0
[19:14:36][C][ethernet:524]: Gateway: 192.168.1.1
[19:14:36][C][ethernet:524]: DNS1: 0.0.0.0
[19:14:36][C][ethernet:524]: DNS2: 0.0.0.0
[19:14:36][C][ethernet:545]: MAC Address: 94:A9:90:23:04:7B
[19:14:36][C][ethernet:545]: Is Full Duplex: YES
[19:14:36][C][ethernet:545]: Link Speed: 100
[19:14:36][C][ethernet:329]: CLK Pin: 15
[19:14:36][C][ethernet:329]: MISO Pin: 14
[19:14:36][C][ethernet:329]: MOSI Pin: 13
[19:14:36][C][ethernet:329]: CS Pin: 16
[19:14:36][C][ethernet:341]: IRQ Pin: 12
[19:14:36][C][ethernet:343]: Reset Pin: 39
[19:14:36][C][ethernet:343]: Clock Speed: 26 MHz
[19:14:36][C][ethernet:357]: Type: W5500
[19:14:36][C][esphome.ota:073]: Over-The-Air updates:
[19:14:36][C][esphome.ota:073]: Address: 192.168.1.59:3232
[19:14:36][C][esphome.ota:073]: Version: 2
[19:14:37][C][safe_mode:018]: Safe Mode:
[19:14:37][C][safe_mode:019]: Boot considered successful after 60 seconds
[19:14:37][C][safe_mode:019]: Invoke after 10 boot attempts
[19:14:37][C][safe_mode:019]: Remain for 300 seconds
[19:14:37][C][api:182]: API Server:
[19:14:37][C][api:182]: Address: 192.168.1.59:6053
[19:14:37][C][api:192]: Using noise encryption: NO
[19:14:37][C][mdns:122]: mDNS:
[19:14:37][C][mdns:122]: Hostname: esp32-piscine
[19:14:37][D][binary_sensor:036]: 'Etat Filtration': Sending state OFF
[19:14:44][D][dallas.temp.sensor:054]: 'Température Eau': Got Temperature=27.2°C
[19:14:44][D][sensor:098]: 'Température Eau': Sending state 27.18750 °C with 1 decimals of accuracy
Un petit texte défile en partie haute de l'écran mais impossible a lire
Bizarre pour l'Etat Filtration et Etat PAC car rien n'est branché sur l'espace pour le moment.
J'ai simulé un inter à l'aide d'in fil entre DGND et les bornes I1, I2 etc...
L'entrée digitale gpio4 ne fonctionne pas.
La gpio5 fonctionne.
La 6 fonctionne pas. Pas essayé plus loin.
J'ai décallé les gpio et rajouter la ligne (inverted: true) mais toujours seul le gpio5 fonctionne mais pas le 6.
Pourtant les LED sur le circuit imprimé s'éclaire bien lorsqu'il y a contact.
# Entrées digitales
binary_sensor:
- platform: gpio
name: "Etat Filtration"
pin:
number: GPIO5
inverted: true
- platform: gpio
name: "Etat PAC"
pin:
number: GPIO6
inverted: true
Édit: j’ai essayé également avec une alim 5v entre gnd et gpio4 et gpio5 (j’ai remis les gpio dans le bon ordre)
Le gpio 5 fonctionne bien mais le gpio4 rest aléatoire.
5v il fonctionne, 0v il s’éteint puis se rallume après.
Bref, c’est vraiment pas ça. Dégoûté…
Donc soucis sur les entrées digitales et l’écran pour le moment.
Ajoute filters et /ou inverted. Ou bien précise mode: INPUT_PULLDOWN si ton optocoupleur pousse vers HIGH à l’activation.
inverted: true
filters:
- delayed_on: 10ms
- delayed_off: 10ms
Pour l’écran un mauvais branchement ,ou mauvaise connection . Vérifie les connexions
GND → GND, VCC → 3.3 V (pas 5 V !)
essaye comme ça , si l’écran montre “TEST” correctement, le problème est résolu.
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
update_interval: 2s
lambda: |-
it.clear();
it.printf(0, 0, id(font_default), "Écran OK !");
it.printf(0, 20, id(font_default), "Temp: %.1f°C", id(temp_eau).state);
font:
- file: "gfonts://Roboto"
id: font_default
size: 16
si tu a des erreur de validation poste les
esphome:
name: esp32-piscine
friendly_name: ESP32 Piscine
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
- platform: esphome
#Configuration wifi (desactivé pour connexion Ethernet)
#wifi:
# ssid: !secret wifi_ssid
# password: !secret wifi_password
#
# # Enable fallback hotspot (captive portal) in case wifi connection fails
# ap:
# ssid: "Waveshare-Esp32S3-Eth-8Di-8Ro"
# password: "WaveshareESP32"
#captive_portal: # uniquement pour connexion wifi
ethernet:
type: W5500
mosi_pin: GPIO13
miso_pin: GPIO14
clk_pin: GPIO15
cs_pin: GPIO16
interrupt_pin: GPIO12
reset_pin: GPIO39
manual_ip:
static_ip: 192.168.1.59
gateway: 192.168.1.1
subnet: 255.255.255.0
i2c:
sda: GPIO42
scl: GPIO41
scan: true
pca9554:
- id: expander
address: 0x20
# Sorties (relais)
switch:
- platform: gpio
pin:
pca9554: expander
number: 0
id: relais_filtration
name: "Filtration"
- platform: gpio
pin:
pca9554: expander
number: 1
id: relais_eclairage
name: "Éclairage Piscine"
- platform: gpio
pin:
pca9554: expander
number: 2
id: relais_pac
name: "PAC Piscine"
# Entrées digitales
binary_sensor:
- platform: gpio
name: "Etat Filtration"
pin:
number: GPIO4
inverted: true
mode: INPUT_PULLDOWN
- platform: gpio
name: "Etat PAC"
pin:
number: GPIO5
inverted: true
mode: INPUT_PULLDOWN
# Sondes températures
one_wire:
- platform: gpio
pin: GPIO21
id: bus_temp_eau
# Capteur de température
sensor:
- platform: dallas_temp
one_wire_id: bus_temp_eau
id: temp_eau
name: "Température Eau"
accuracy_decimals: 1
update_interval: 30s
resolution: 12 # Optionnel : résolution maximale pour DS18B20
# Écran OLED
# Configuration des polices pour l'écran OLED
font:
- file: "gfonts://Roboto"
id: font_default
size: 16
# Configuration de l'écran OLED SSD1306
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
update_interval: 2s
lambda: |-
it.clear();
it.printf(0, 0, id(font_default), "Écran OK !");
it.printf(0, 20, id(font_default), "Temp: %.1f°C", id(temp_eau).state);
INFO Upload took 2.07 seconds, waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.1.59 using esphome API
INFO Successfully resolved esp32-piscine @ 192.168.1.59 in 0.000s
WARNING Can't connect to ESPHome API for esp32-piscine @ 192.168.1.59: Error connecting to [AddrInfo(family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, proto=6, sockaddr=IPv4Sockaddr(address='192.168.1.59', port=6053))]: [Errno 111] Connect call failed ('192.168.1.59', 6053) (SocketAPIError)
INFO Trying to connect to esp32-piscine @ 192.168.1.59 in the background
INFO Successfully resolved esp32-piscine @ 192.168.1.59 in 0.000s
INFO Successfully connected to esp32-piscine @ 192.168.1.59 in 0.007s
INFO Successful handshake with esp32-piscine @ 192.168.1.59 in 0.019s
[20:54:48][I][app:137]: ESPHome version 2025.6.3 compiled on Jul 8 2025, 20:54:33
[20:54:48][C][pca9554:048]: PCA9554:
[20:54:48][C][pca9554:048]: I/O Pins: 8
[20:54:48][C][pca9554:052]: Address: 0x20
[20:54:48][C][logger:211]: Logger:
[20:54:48][C][logger:211]: Max Level: DEBUG
[20:54:48][C][logger:211]: Initial Level: DEBUG
[20:54:48][C][logger:217]: Log Baud Rate: 115200
[20:54:48][C][logger:217]: Hardware UART: USB_SERIAL_JTAG
[20:54:48][C][logger:224]: Task Log Buffer Size: 768
[20:54:48][C][i2c.idf:083]: I2C Bus:
[20:54:48][C][i2c.idf:084]: SDA Pin: GPIO42
[20:54:48][C][i2c.idf:084]: SCL Pin: GPIO41
[20:54:48][C][i2c.idf:084]: Frequency: 50000 Hz
[20:54:48][C][i2c.idf:094]: Recovery: bus successfully recovered
[20:54:48][I][i2c.idf:104]: Results from bus scan:
[20:54:48][I][i2c.idf:110]: Found device at address 0x20
[20:54:48][I][i2c.idf:110]: Found device at address 0x3C
[20:54:48][I][i2c.idf:110]: Found device at address 0x51
[20:54:48][C][gpio.one_wire:022]: GPIO 1-wire bus:
[20:54:48][C][gpio.one_wire:023]: Pin: GPIO21
[20:54:48][C][gpio.one_wire:084]: Found devices:
[20:54:48][C][gpio.one_wire:086]: 0xe731f8b10a646128 (DS18B20)
[20:54:48][C][switch.gpio:079]: GPIO Switch 'Filtration'
[20:54:48][C][switch.gpio:079]: Restore Mode: always OFF
[20:54:48][C][switch.gpio:031]: Pin: 0 via PCA9554
[20:54:48][C][switch.gpio:079]: GPIO Switch 'Éclairage Piscine'
[20:54:48][C][switch.gpio:079]: Restore Mode: always OFF
[20:54:48][C][switch.gpio:031]: Pin: 1 via PCA9554
[20:54:48][C][switch.gpio:079]: GPIO Switch 'PAC Piscine'
[20:54:48][C][switch.gpio:079]: Restore Mode: always OFF
[20:54:48][C][switch.gpio:031]: Pin: 2 via PCA9554
[20:54:48][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Etat Filtration'
[20:54:48][C][gpio.binary_sensor:016]: Pin: GPIO4
[20:54:48][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Etat PAC'
[20:54:48][C][gpio.binary_sensor:016]: Pin: GPIO5
[20:54:48][C][dallas.temp.sensor:029]: Dallas Temperature Sensor:
[20:54:48][C][dallas.temp.sensor:034]: Address: 0xe731f8b10a646128 (DS18B20)
[20:54:48][C][dallas.temp.sensor:035]: Resolution: 12 bits
[20:54:48][C][dallas.temp.sensor:036]: Update Interval: 30.0s
[20:54:48][C][ssd1306_i2c:023]: I2C SSD1306
[20:54:48][C][ssd1306_i2c:023]: Rotations: 0 °
[20:54:48][C][ssd1306_i2c:023]: Dimensions: 128px x 64px
[20:54:48][C][ssd1306_i2c:024]: Address: 0x3C
[20:54:48][C][ssd1306_i2c:025]: Model: SSD1306 128x64
[20:54:48][C][ssd1306_i2c:027]: External VCC: NO
[20:54:48][C][ssd1306_i2c:027]: Flip X: YES
[20:54:48][C][ssd1306_i2c:027]: Flip Y: YES
[20:54:48][C][ssd1306_i2c:027]: Offset X: 0
[20:54:48][C][ssd1306_i2c:027]: Offset Y: 0
[20:54:48][C][ssd1306_i2c:027]: Inverted Color: NO
[20:54:48][C][ssd1306_i2c:036]: Update Interval: 2.0s
[20:54:48][C][ethernet:326]: Ethernet:
[20:54:48][C][ethernet:524]: IP Address: 192.168.1.59
[20:54:48][C][ethernet:524]: Hostname: 'esp32-piscine'
[20:54:48][C][ethernet:524]: Subnet: 255.255.255.0
[20:54:48][C][ethernet:524]: Gateway: 192.168.1.1
[20:54:48][C][ethernet:524]: DNS1: 0.0.0.0
[20:54:48][C][ethernet:524]: DNS2: 0.0.0.0
[20:54:48][C][ethernet:545]: MAC Address: 94:A9:90:23:04:7B
[20:54:48][C][ethernet:545]: Is Full Duplex: YES
[20:54:48][C][ethernet:545]: Link Speed: 100
[20:54:48][C][ethernet:329]: CLK Pin: 15
[20:54:48][C][ethernet:329]: MISO Pin: 14
[20:54:48][C][ethernet:329]: MOSI Pin: 13
[20:54:48][C][ethernet:329]: CS Pin: 16
[20:54:48][C][ethernet:341]: IRQ Pin: 12
[20:54:48][C][ethernet:343]: Reset Pin: 39
[20:54:48][C][ethernet:343]: Clock Speed: 26 MHz
[20:54:48][C][ethernet:357]: Type: W5500
[20:54:48][C][esphome.ota:073]: Over-The-Air updates:
[20:54:48][C][esphome.ota:073]: Address: 192.168.1.59:3232
[20:54:48][C][esphome.ota:073]: Version: 2
[20:54:48][C][safe_mode:018]: Safe Mode:
[20:54:48][C][safe_mode:019]: Boot considered successful after 60 seconds
[20:54:48][C][safe_mode:019]: Invoke after 10 boot attempts
[20:54:48][C][safe_mode:019]: Remain for 300 seconds
[20:54:48][C][api:182]: API Server:
[20:54:48][C][api:182]: Address: 192.168.1.59:6053
[20:54:48][C][api:192]: Using noise encryption: NO
[20:54:48][C][mdns:122]: mDNS:
[20:54:48][C][mdns:122]: Hostname: esp32-piscine
[20:54:48][D][api:133]: Accepted 192.168.1.34
[20:54:48][D][api.connection:1570]: Home Assistant 2025.7.1 (192.168.1.34) connected
[20:54:48][W][font:112]: Encountered character without representation in font: '\xc3'
[20:54:48][W][font:112]: Encountered character without representation in font: '\x89'
[20:54:48][D][dallas.temp.sensor:054]: 'Température Eau': Got Temperature=24.0°C
[20:54:48][D][sensor:098]: 'Température Eau': Sending state 24.00000 °C with 1 decimals of accuracy
[20:54:50][W][font:112]: Encountered character without representation in font: '\xc3'
[20:54:50][W][font:112]: Encountered character without representation in font: '\x89'
[20:54:52][W][font:112]: Encountered character without representation in font: '\xc3'
[20:54:52][W][font:112]: Encountered character without representation in font: '\x89'
[20:54:54][W][font:112]: Encountered character without representation in font: '\xc3'
[20:54:54][W][font:112]: Encountered character without representation in font: '\x89'
[20:54:56][W][font:112]: Encountered character without representation in font: '\xc3'
[20:54:56][W][font:112]: Encountered character without representation in font: '\x89'
[20:54:58][W][font:112]: Encountered character without representation in font: '\xc3'
[20:54:58][W][font:112]: Encountered character without representation in font: '\x89'
[20:55:00][W][font:112]: Encountered character without representation in font: '\xc3'
[20:55:00][W][font:112]: Encountered character without representation in font: '\x89'
[20:55:02][W][font:112]: Encountered character without representation in font: '\xc3'
[20:55:02][W][font:112]: Encountered character without representation in font: '\x89'
[20:55:04][W][font:112]: Encountered character without representation in font: '\xc3'
[20:55:04][W][font:112]: Encountered character without representation in font: '\x89'
[20:55:06][W][font:112]: Encountered character without representation in font: '\xc3'
[20:55:06][W][font:112]: Encountered character without representation in font: '\x89'
[20:55:08][W][font:112]: Encountered character without representation in font: '\xc3'
[20:55:08][W][font:112]: Encountered character without representation in font: '\x89'
filters:
- delayed_on: 10ms
- delayed_off: 10ms
ca me donne une erreur dans validate.
Tu as placé ce bloc à la fin de ton fichier, hors de tout bloc binary_sensor. D’où l’erreur.
Astuce : inverted doit être dans pin:, pas au même niveau que name: (sinon ce sera ignoré).
binary_sensor:
- platform: gpio
name: "Etat Filtration"
pin:
number: GPIO4
mode: INPUT_PULLUP #Remplace INPUT_PULLUP par INPUT_PULLDOWN si ton schéma le demande.
inverted: true
filters:
- delayed_on: 10ms
- delayed_off: 10ms
Utilise gpio.dump() dans le logger pour voir la configuration actuelle du GPIO.
écran: Font : '\xc3' non reconnu
- Soit tu changes
"Écran"en"Ecran" - Soit tu remplaces la police par un fichier
.ttflocal avec les caractères accentués
it.printf(0, 0, id(font_default), "Ecran OK !");
Je viens de faire les motifs excepté car je n’ai pas compris.
L’ecran reste blanc avec point noir et petite partie qui défile mais illisible.
J’ai pourtant tester avec 2 écran différents (ssd1306) et branchement normaux:
sda - sda
scl - scl
GND - G
VCC - 3,3v
Je comprend pas.
Pour les retour d’états, j’ai pas eu le temps de tester avec les nouvelles lignes.
Pas compris la ligne:
mode: INPUT_PULLUP #Remplace INPUT_PULLUP par INPUT_PULLDOWN si ton schéma le demande.
Est ce que c’est normal que mon entrée digitales Gpio4 restaient activées, puis s’éteignaient etc… toute seule.
Un comportement aléatoire.
ça peut être le comportement d’une entrée qui est « en l’air » donc dont le niveau logique n’est pas clairement défini. Elle capte du « bruit » d’où le comportement aléatoire.
c’est pour ça que @hackdiy te propose d’essayer d’activer les résistances internes de pullup ou pulldown pour voir si ça a un effet.
Pour bien faire il faudrait avoir le schéma de la carte, ça aiderait bien à comprendre comment tout ça est cablé. (et au passage comprendre certaines appellations un peu fantaisistes genre les « optocoupleurs bidirectionnel » sur les entrées, perso je comprend pas ce que c’est)
Ok, j’essaierai avec résistance pulldown puisque ce sera un transfo 220/5v sur rail din qui me donnera le retour d’état.
Si 5v, alors filtration en fonctionnement.
J’espère que ça fonctionnera.
Reste également ce satané écran (pour rappel, même soucis sur 2 écrans identique)
Au pire, j’ai également à dispo 1 écran LED 2 lignes et un avec 4 lignes si c’est plus simple.
En gros, INPUT_PULLUP ou INPUT_PULLDOWN configure la broche du microcontrôleur pour :
-
INPUT_PULLUP: considérer le signal comme « allumé » (1) par défaut, et « éteint » (0) quand le capteur est activé. -
INPUT_PULLDOWN: considérer le signal comme « éteint » (0) par défaut, et « allumé » (1) quand le capteur est activé.
L’option à choisir dépend du fonctionnement de ton capteur et de ton circuit. Le paramètre inverted: true / inverted: false inverse simplement ces états
mode: INPUT_PULLUP
inverted: true
Généralement et le plus souvent c’est la logique utiliser
tu peut changer la police de l’écran comme ce ci ou récupère la police au format ttf et place le fichier dans un dossier (par exemple fonts ) à côté de ton fichier de configuration Esphome
font:
- file: "fonts/arial.ttf"
id: arial
size: 17
Merci pour tes explications:
Donc:
mode: INPUT_PULLUP
inverted: true
Ça serai équivalent à:
mode: INPUT_PULLDOWN
C’est bien ça?
Pour l’écran, tu penses que mon écran blanc (sur 2 écrans OLED SSD1306 peux provenir de ça?
Tout ce que j’ai pu tester jusqu’à présent ne change pas le soucis (avec IA)
N’étant pas chez moi, j’ai pas pu encore essayer.





