Installation Esphome sur Waveshare ESP32-S3-POE-ETH-8DI-8RO

Non c’est pas ça.
Déjà, il faut comprendre que le concept d’ESPHome n’est pas du tout le même qu’ESPEasy.

Avec ESPEasy, tu flash le firmware, et ensuite tu fais la configuration « en ligne » sur ton ESP sans que ça modifie le firmware. Tout est « interprété » par le « moteur » ESPEasy qui ne change pas (sauf si tu fais la mise à jour de celui-ci.

Avec ESPHome, tu édites un fichier de configuration (le fichier .yaml) qui va ensuite être utilisé par ESPHome Device Builder, pour construire et compiler un firmware qui contiendra exactement et juste ce que tu as besoin pour ton périphérique.
Ensuite il faut flasher ce firmware dans l’ESP soit en OTA (si l’ESP en question exécute déjà un firmware ESPhome) soit en USB / série avec les outils habituels Espressif.
A chaque modification de la configuration (donc du fichier .yaml) il faut refaire le processus complet. Heureusement, avec l’OTA, la procedure de flash du firmware est simple et rapide.
C’est justement le but du premier flash fait en ligne via le site de ESPHome : flasher un firmware minimaliste qui permet de beneficier ensuite du flash OTA.
Mais cette première étape est optionnelle… tu peux très bien créer ton fichier .yaml, compiler, et flasher le firmware (le fichier .bin généré par ESPHome) directement avec les outils habituels.

L’api c’est pour communiquer avec Home Assistant. ESPHome peut être utilisé sans HA (avec Jeedom par exemple, c’est ce que j’ai fait sur une de mes installations)
quand tu ajoutes la section api: dans le fichier .yaml de ton périphérique, tu dis à ESPHome que ton périphérique doit se connecter a un serveur HA présent sur le réseau (donc de son côté il embarque tout ce qu’il faut pour le faire) et ils se débrouillent entre eux.
Tu peux chiffrer cet échange entre ton périphérique et HA avec la fameuse clé qui je rappel est optionnelle mais sur un réseau privé local je vois pas l’intérêt (par exemple avec ESPEasy et Jeedom les échanges sont en clair…) et c’est consommateur de ressources côté ESP (sur les ESP8266 il me semble que c’est deconseillé d’activer ce chiffrement car ça bouffe trop de ressources)
A noter que si tu ajoutes l’api HA dans ton peripherique ESPHome, mais que ce dernier n’arrive à a se connecter à un serveur HA sur le réseau, alors il va rebooter automatiquement toute les 30mn pour relancer la recherche du serveur (c’est modifiable dans la config)

EDIT : par contre petite subtilité avec ESPHome Device Builder… Autant quand tu créer un périphérique ESPHome avec l’api HA d’activé, celui-ci peut être découvert et intégré par n’importe quel serveur HA sur le réseau sans que ESPHome soit installé sur le serveur en question car ESPHome utilise l’api native de HA (mais sauf erreur, il ne peut être intégré qu’a un seul serveur et une fois celui-ci intégré sur un serveur, il ne peut plus être « découvert » par les autres)
Autant un périphériques ESPHome ne peut être édité et modifié que par l’instance ESPHome qui l’a créer.
De base, pour savoir quel périphériques il doit chercher sur le réseau ESPHome Device Builder se base sur les fichier .yaml de son répertoire de travail.
Les périphériques créer par ESPHome sur ton PC ne seront pas visible par l’add-on ESPHome de ton HA et réciproquement… alors même que ces périphériques créer sur ton PC seront parfaitement vu et intégré par HA car je répète encore une fois, l’add-on ESPHome pour HA c’est pour créer les périphériques ESP, il ne joue aucun rôle dans leur intégration dans HA

Maintenant, quand je dis que si tu crées un périphériques ESPHome sur ton PC et qu’il ne pourra pas être vu par l’add-on ESPHome HA c’est pas tout à fait vrai, il y a une option qui permet de le faire. Il faut explicitement dire au périphérique qu’il peut être « adopté » par un autre dashbord ESPHome que celui qui l’a créer, mais par défaut ce n’est pas le cas.
Pour ce faire il faut ajouter (exemple pour un ESP8266, j’ai pas sous le coude pour un ESP32 mais ça doit se trouver facilement)

dashboard_import:
  package_import_url: github://esphome/example-configs/esphome-web/esp8266.yaml@main
  import_full_config: true

Dans ton .yaml
Mais c’est limité car ça n’importe pas le .yaml de base, ça en créer un par défaut avec juste quelques infos de base sur le périphérique. Bref, sans oublier que cette possibilité existe, ne perd pas de temps avec ça pour le moment.

Ouahou, merci pour toutes ses infos précieuses.

J’ai toujours beaucoup apprécié Jeedom et ce dernier reste des plus fonctionnel.
Cependant, la communauté Jeedom est casi morte et ce n’est plus ce que s’était.
Je préfère donc commencer à migrer pour plus de sérénité à l’avenir.
J’entendais souvent parlé de esphome et je pensais qu’on configurait nos esp directement via home assistant sans avoir à passer par d’autres alternatives. Une sorte d’espeasy intégré.
Ca reste le cas mais un peu plus complexe et faut que je comprenne.

Pour l’api, si je ne veux pas m’encombrer du mot de passe, je met juste une section « api: » sans rien mettre après, pour qu’il communique avec mon home assistant?
Si je ne met pas de section « api: » , cela voudrai dire que Jeedom etc… peuvent communiquer avec?
C’est bien ça?

Après chaque modification du yaml, on refait donc un flash du firmewire (je le ferai en ota wifi puis ethernet une fois configuré) mais cela ne risque pas d’abîmer l’esp à long terme? Car vu mon niveau débutant, je sens qu’il va y en avoir un sacré paquet :grin:ne serait-ce que pour le faire fonctionner.
Quelle dommage qu’il n’y ai pas d’interface graphique tel qu’espeasy.

Et pour la détection des id sondes de températures etc… ?

Pour utiliser l’api HA sans chiffrement oui dans ton yaml tu met juste

api:

sans rien de plus dans cette section.

Par contre la présence de l’API HA n’empêche pas le périphérique de communiquer avec un autre système (Jeedom par exemple) en MQTT ou en REST. Si tu veux, je peux te fournir un exemple qui permet à un device ESPHome d’aller écrire lui même les valeurs d’un virtuel Jeedom via l’API Jeedom. (pas super pratique à mettre en place, mais c’est faisable)

La durée de vie des mémoire flash actuelle fait que pour en arriver au bout en faisant des écritures manuelles (flash de firmware) faut déjà y aller. J’espère pour toi que tu va y arriver en moins de 100.000 essais :sweat_smile:
Cela dit, le problème est le même avec ESPEasy, tu ne flash peut être pas un nouveau firmware à chaque fois, mais chaque modification de la configuration fait une écriture en mémoire flash de la même manière, donc le « risque » est identique.
Ce dont il faut surtout faire attention c’est les écritures automatiques… genre sauvegarde automatique du contexte ou bug dans un programme qui va écrire en boucle dans la memoire flash. Le danger est surtout là.

Il y en a une… elle ne permet pas de faire la configuration de l’ESP (et encore, les pro de la bidouille doivent arriver à modifier quelques paramètres) puisque ce n’est pas dans la philosophie d’ESPHome, mais tu peux voir la valeur de tous les capteurs, avoir des boutons et autres interfaces d’entrée pour ajuster des paramètres.
Il faut simplement le déclarer explicitement dans le yaml que tu veux cette option en ajoutant :

web_server:

Pas mal de possibilité de configuration, différentes versions qui permettent différentes chose. Faut lire la doc

Pour ça fait déjà avoir un périphérique ESPHome fonctionnel relié à une sonde. Les logs te donneront l’adresse qu’il faudra recopier dans ton yaml si tu veux avoir plusieurs sondes sur le même bus. On rentrera dans ces détails au moment voulu si tu n’y arrives pas tout seul.

Je me suis amusé à créer un fichier de configuration minimaliste pour cette carte en essayant d’activer toutes ses fonctions.
Voici le fichier .yaml de config

esphome:
  name: waveshare-esp32s3-eth-8di-8ro
  friendly_name: WaveShare-ESP32S3-ETH-8DI-8RO

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"


# Configuration connexion Ethernet SPI chip W5500
ethernet:
  type: W5500
  clk_pin: GPIO15
  mosi_pin: GPIO13
  miso_pin: GPIO14
  cs_pin: GPIO16
  interrupt_pin: GPIO12
  #reset_pin: GPIOXX # pas utilisée ?

# Bus I2C pour le TCA9554 et le PCF85063
i2c:
  scl: GPIO41
  sda: GPIO42

# Interface RS485
# (Configuration minimaliste, à develloper si utilisation ModBUS)
uart:
  - id: rs485
    tx_pin: GPIO17
    rx_pin: GPIO18
    baud_rate: 9600

# Horloge RTC PCF85063 sur I2C
time:
  - platform: pcf85063
    id: pcf85063_time
    address: 0x51 #selon code exemple pour arduino

# Expander TCA9554 : 8 relais 
pca9554:
  - id: relais_1_8
    address: 0x20  # selon wiki waveshare
    pin_count: 8

# Sorties (relais et Buzzer)
switch:
  - platform: gpio
    name: "Relais 1"
    pin: 
      pca9554: relais_1_8
      number: 0
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 2"
    pin: 
      pca9554: relais_1_8
      number: 1
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 3"
    pin: 
      pca9554: relais_1_8
      number: 2
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 4"
    pin: 
      pca9554: relais_1_8
      number: 3
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 5"
    pin: 
      pca9554: relais_1_8
      number: 4
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 6"
    pin: 
      pca9554: relais_1_8
      number: 5
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 7"
    pin: 
      pca9554: relais_1_8
      number: 6
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 8"
    pin: 
      pca9554: relais_1_8
      number: 7
      mode: output
      inverted: false
  
  - platform: gpio
    name: "Buzzer"
    pin:
      number: GPIO46
      ignore_strapping_warning: true
      #inverted: true #(à ajuster selon câblage)

# Entrées digitales
binary_sensor:

  - platform: gpio
    name: "Input 1"
    pin:
      number: GPIO4
      inverted: true

  - platform: gpio
    name: "Input 2"
    pin:
      number: GPIO5
      inverted: true

  - platform: gpio
    name: "Input 3"
    pin:
      number: GPIO6
      inverted: true

  - platform: gpio
    name: "Input 4"
    pin:
      number: GPIO7
      inverted: true

  - platform: gpio
    name: "Input 5"
    pin:
      number: GPIO8
      inverted: true

  - platform: gpio
    name: "Input 6"
    pin:
      number: GPIO9
      inverted: true

  - platform: gpio
    name: "Input 7"
    pin:
      number: GPIO10
      inverted: true

  - platform: gpio
    name: "Input 8"
    pin:
      number: GPIO11
      inverted: true

# LED RGB (à confirmer)

light:
  - platform: esp32_rmt_led_strip
    rgb_order: GRB # selon exemple code arduino fournit
    pin: GPIO38
    num_leds: 1
    chipset: ws2812 # a confirmer 
    name: "LED RGB"

#captive_portal: # uniquement pour connexion wifi

web_server:
  port: 80

Pour info, la compilation sur un core i5-14500 avec 32Go de RAM prend 1 minute (je te laisse interpoler sur un raspberry…)
Je peux fournit le fichier compilé correspondant à charger directement dans l’ESP (fichier factory.bin) mais le forum ne permet pas l’échange de type de fichier. Si ça t’intéresse on trouvera un moyen externe d’échange.
A noter quand même que n’ayant pas la carte en question, je n’ai bien entendu pas tester le fonctionnement…

Tu peux compter bien plus sur un RPI. Sur un RPI4 4Go entre 5-10 min, de même sur un miniPC N95 8Go.

Merci infiniment, ca va énormément m’aider.

Citation
Pour info, la compilation sur un core i5-14500 avec 32Go de RAM prend 1 minute (je te laisse interpoler sur un raspberry…)

Ca sera aussi long a chaque fois qu’il faudra flasher le firewire en OTA? Ou juste la première fois.
Avec Mon PI5 / 8gram / nvme, ca devrai aller mieux pour moi non?

Citation
Je peux fournit le fichier compilé correspondant à charger directement dans l’ESP (fichier factory.bin) mais le forum ne permet pas l’échange de type de fichier. Si ça t’intéresse on trouvera un moyen externe d’échange.

C’est gentil mais je pense que pour que j’apprenne à m’en servir, il faudrai que je le fasse par moi même sur HA.

Une fois Home Assistant installer sur mon nouveau rasberry, j’effacerai mon esp32 et referai tout à 0.
Une fois la vignette apparue dans esphome, j’aurai juste à faire Edit / mettre le code / enregistrer et transférer?

Pour ce qui est du wifi, si l’ethernet ne fonctionne pas suite à un mauvais réglage, comment ca se passe?

#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"

Pour l’ethernet:

# Configuration connexion Ethernet SPI chip W5500
ethernet:
  type: W5500
  clk_pin: GPIO15
  mosi_pin: GPIO13
  miso_pin: GPIO14
  cs_pin: GPIO16
  interrupt_pin: GPIO12
  #reset_pin: GPIOXX # pas utilisée ?

J’avais également pas trouvé le reset, ils ne le fournissent pas, c’est grave?

# Interface RS485
# (Configuration minimaliste, à develloper si utilisation ModBUS)
uart:
  - id: rs485
    tx_pin: GPIO17
    rx_pin: GPIO18
    baud_rate: 9600

# Horloge RTC PCF85063 sur I2C
time:
  - platform: pcf85063
    id: pcf85063_time
    address: 0x51 #selon code exemple pour arduino

Je pense pas utilisé cela
quoi que… on verra bien plus tard (peut être pour la pompe à chaleur de ma piscine

Est-il possible de renommé les relais et le nom de l’esp32?

ça dépend de ce qui est modifié. Si tu changes, par exemple, juste le nom d’un relais ça peut aller très vite (8s sur mon PC) mais si tu ajoutes un nouvel élement ça peut être bien plus long (la compilation initiale, le temps qu’il charge toutes les dépendances, à pris 10 minutes, toujours sur ma machine)
Ne te fait pas trop d’illusions sur le Raspberry 5, la compilation à toujours été une tache (très) gourmande.

Oui en gros c’est ça.

ça ne fonctionne pas… ESPHome ne permet pas d’activer les 2 en même temps (si tu essayes de le faire tu as un message d’erreur et la compilation ne se lance pas)

Il me semble que souvent il n’est pas câblé.

Oui sans problème

Ce que je pensais (comme Espeasy).
Mais si c'est si long a transféré et que l'ethernet ne fonctionne pas, je ne pourrai plus re flasher en wifi?
Je sais pas si tu comprend ce que je veux dire.
En gros, la première fois, je devrai avoir mon wifi pour flasher en OTA.
Mais une fois le nouveau code YAML avec l'ethernet.
Si l'ethernet n'a pas fonctionné, je conserve ma connection wifi?

Il va falloir également que je relie ma sonde ds18b20 (en faite il y en a 2 pour les temp eau et extérieur) ainsi qu'un écran oled i2c.

Pour les relais, seul 3 voir 4 serviraient (filtration, éclairage piscine et PAC)
En entrées digitales, seule mes 2 optocoupleurs pour retours état (PAC et Filtration)

LED RGB, je ne sais pas à quoi ca pourrai servir.

#captive_portal: # uniquement pour connexion wifi
web_server:
  port: 80

pas compris également.

J'ai modifié les noms


esphome:
  name: ESP32 Piscine
  friendly_name: WaveShare-ESP32S3-ETH-8DI-8RO

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"


# Configuration connexion Ethernet SPI chip W5500
ethernet:
  type: W5500
  clk_pin: GPIO15
  mosi_pin: GPIO13
  miso_pin: GPIO14
  cs_pin: GPIO16
  interrupt_pin: GPIO12
  #reset_pin: GPIOXX # pas utilisée ?

# Bus I2C pour le TCA9554 et le PCF85063
i2c:
  scl: GPIO41
  sda: GPIO42

# Interface RS485
# (Configuration minimaliste, à develloper si utilisation ModBUS)
uart:
  - id: rs485
    tx_pin: GPIO17
    rx_pin: GPIO18
    baud_rate: 9600

# Horloge RTC PCF85063 sur I2C
time:
  - platform: pcf85063
    id: pcf85063_time
    address: 0x51 #selon code exemple pour arduino

# Expander TCA9554 : 8 relais 
pca9554:
  - id: relais_1_8
    address: 0x20  # selon wiki waveshare
    pin_count: 8

# Sorties (relais et Buzzer)
switch:
  - platform: gpio
    name: "Filtration"
    pin: 
      pca9554: relais_1_8
      number: 0
      mode: output
      inverted: false

  - platform: gpio
    name: "Eclairage piscine"
    pin: 
      pca9554: relais_1_8
      number: 1
      mode: output
      inverted: false

  - platform: gpio
    name: "PAC"
    pin: 
      pca9554: relais_1_8
      number: 2
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 4"
    pin: 
      pca9554: relais_1_8
      number: 3
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 5"
    pin: 
      pca9554: relais_1_8
      number: 4
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 6"
    pin: 
      pca9554: relais_1_8
      number: 5
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 7"
    pin: 
      pca9554: relais_1_8
      number: 6
      mode: output
      inverted: false

  - platform: gpio
    name: "Relais 8"
    pin: 
      pca9554: relais_1_8
      number: 7
      mode: output
      inverted: false
  
  - platform: gpio
    name: "Buzzer"
    pin:
      number: GPIO46
      ignore_strapping_warning: true
      #inverted: true #(à ajuster selon câblage)

# Entrées digitales
binary_sensor:

  - platform: gpio
    name: "Etat Filtration"
    pin:
      number: GPIO4
      inverted: true

  - platform: gpio
    name: "Etat PAC"
    pin:
      number: GPIO5
      inverted: true

  - platform: gpio
    name: "Input 3"
    pin:
      number: GPIO6
      inverted: true

  - platform: gpio
    name: "Input 4"
    pin:
      number: GPIO7
      inverted: true

  - platform: gpio
    name: "Input 5"
    pin:
      number: GPIO8
      inverted: true

  - platform: gpio
    name: "Input 6"
    pin:
      number: GPIO9
      inverted: true

  - platform: gpio
    name: "Input 7"
    pin:
      number: GPIO10
      inverted: true

  - platform: gpio
    name: "Input 8"
    pin:
      number: GPIO11
      inverted: true

# LED RGB (à confirmer)

light:
  - platform: esp32_rmt_led_strip
    rgb_order: GRB # selon exemple code arduino fournit
    pin: GPIO38
    num_leds: 1
    chipset: ws2812 # a confirmer 
    name: "LED RGB"

#captive_portal: # uniquement pour connexion wifi

web_server:
  port: 80

Non, mais en vrai c’est pas le temps de transfert qui peut poser problème. Un fichier .bin d’un projet de base tel que ta carte pour un ESP ça fait rarement plus de 2 ou 3 Mo, je te laisse calculer le temps de transfert en ethernet…
Après le flash peut mal se passer.
Mais en fait, ce qui risque surtout d’arriver, c’est de flasher un firmware bancale. Ta configuration peut être valide, le projet se compiler sans problème, ça n’empêche pas d’avoir écrit un truc qui fait planter l’ESP (surtout si tu commence à ajouter du code en C dans le projet) Et là de toutes façons, wifi ou pas, le truc est planté, t’aura plus d’OTA… pas le choix que de devoir repasser par un flash en USB.

Et j’ai l’impression que c’est pas encore bien clair dans ta tête, mais tu n’es pas obligé de passer par le site web esphome.io pour faire le flash initial.
le schéma « Flash projet vierge bidon sur le site → import dans le dashboard ESPhome → ajout du code yaml → flash en OTA du nouveau firmware » c’est pour que ce soit plus simple pour les débutants. (et tu comprendras vite que ça à l’inconvénient de donner un nom bidon à ton esp genre « esphome-web-xxxxxx » et que de changer le nom d’un périphérique ESPHome quand on maitrise pas le sujet c’est source de pas mal de prise de tête)
Une fois que tu as compris le principe tu peux tout aussi bien faire Création d’un nouveau device dans ESPHome->Edition du fichier .yaml->compilation->flash en USB
Pour le flash direct en USB il y a des subtilités, mais pour faire court, le plus simple c’est de brancher l’ESP sur la machine qui héberge ESPHome Device Builder (par ton serveur HA si tu fais la création du périphérique avec l’add-on HA)
Sinon tu peux tout aussi bien demander un installation manuelle, dans ce cas il te propose de télécharger le fichier .BIN à la fin de la compilation, et tu utiliseras « Espressif flash download tool » (par exemple) exactement comme pour flasher ESPEasy la première fois.

A noter aussi que généralement dans les projets on active le débogage USB avec

# Enable logging
logger:

Ce qui fait qu’en branchant l’ESP en USB à un PC sur lequel est ouvert un terminal; on peut voir ce qui se passe et à quel moment ça coince. (genre ça boot mais ça se connecte pas ou ça boot pas du tout ou reboot en boucle parce que le firmware est bancale)

Merci encore pour tes explications.

Étant novice et pas du tout programmeur, j’avoue que du coup, je ne sais plus comment m’y prendre.
Je pensais pas qu’il y aurai autant de choses à savoir.
Autant espeasy j’ai pas eu trop de soucis mais la…
Je m’embrouille quelque peu.

Du coup pour le premier flash, je branche en usb (pc ou pi5 ?), je crée un nouveau device et il me faudrai directement flasher le .yaml ci dessus plutôt que le modèle simplifié du site c’est bien ça?
Je comprend que l’idéal aurai été de flasher directement le .bin sur le site en manuel mais ne l’ayant pas, je préfère faire de manière à ce que par la suite en cas de futurs projets esp apprendre à faire sans.

Ensuite, comment on fait pour le mettre dans home assistant et contrôler que tout fonctionne?
Faut. Que je croise les doigts pour que l’Ethernet soit reconnu.

Je suis désolé, tu as pourtant fait des explications remarquables mais n’ayant pas de quoi essayer en parallèle, ça commence à me faire peur car ça partait tellement plus compliqué que espeasy.
Mais j’y arriverai.

C’est quand même bizarre qu’il n’y ai pas de gpio attribué pour la pin reset de l’ethernet.

J’ai trouvé sur ce lien tout en bas partie Ressources / Demo, un dossier a télécharger comprennent pleins de fichier en code (désolé je ne sais pas ce que c’est mais dedans, il y a peut être une mine d’information.

Par exemple, il y a un fichier dans Arduino/Examples/MAIN_ALL/WS_ETH.h

avec:

#pragma once
#include <ETH.h>
#include <SPI.h>

#include "WS_PCF85063.h"
#include "WS_GPIO.h"
#include "WS_RTC.h"

// Set this to 1 to enable dual Ethernet support
#define USE_TWO_ETH_PORTS 0

#ifndef ETH_PHY_TYPE
  #define ETH_PHY_TYPE ETH_PHY_W5500
  #define ETH_PHY_ADDR 1
  #define ETH_PHY_CS   16
  #define ETH_PHY_IRQ  12
  #define ETH_PHY_RST  39
#endif

// SPI pins
#define ETH_SPI_SCK  15
#define ETH_SPI_MISO 14
#define ETH_SPI_MOSI 13

#if USE_TWO_ETH_PORTS
  // Second port on shared SPI bus
  #ifndef ETH1_PHY_TYPE
    #define ETH1_PHY_TYPE ETH_PHY_W5500
    #define ETH1_PHY_ADDR 1
    #define ETH1_PHY_CS   32
    #define ETH1_PHY_IRQ  33
    #define ETH1_PHY_RST  18
  #endif
  ETHClass ETH1(1);
#endif

#define timezone 8        // china 

void ETH_Init(void);
void ETH_Loop(void);
void EthernetTask(void *parameter);

void Acquisition_time(void);

On y trouve des info sur le GPIO RESET.

Il y a également pleins d’autres fichiers mais je ne sais pas si ca pourrai servir.

WS_TCA9554PWR.ccp

#include "WS_TCA9554PWR.h"

/*****************************************************  Operation register REG   ****************************************************/   
uint8_t Read_REG(uint8_t REG)                             // Read the value of the TCA9554PWR register REG
{
  Wire.beginTransmission(TCA9554_ADDRESS);                
  Wire.write(REG);                                        
  uint8_t result = Wire.endTransmission();               
  if (result != 0) {                                     
    printf("Data Transfer Failure !!!\r\n");
  }
  Wire.requestFrom(TCA9554_ADDRESS, 1);                   
  uint8_t bitsStatus = Wire.read();                        
  return bitsStatus;                                     
}
uint8_t Write_REG(uint8_t REG,uint8_t Data)              // Write Data to the REG register of the TCA9554PWR
{
  Wire.beginTransmission(TCA9554_ADDRESS);                
  Wire.write(REG);                                        
  Wire.write(Data);                                       
  uint8_t result = Wire.endTransmission();                  
  if (result != 0) {    
    printf("Data write failure!!!\r\n");
    return -1;
  }
  return 0;                                             
}
/********************************************************** Set EXIO mode **********************************************************/       
void Mode_EXIO(uint8_t Pin,uint8_t State)                 // Set the mode of the TCA9554PWR Pin. The default is Output mode (output mode or input mode). State: 0= Output mode 1= input mode   
{
  uint8_t bitsStatus = Read_REG(TCA9554_CONFIG_REG);      
  uint8_t Data = (0x01 << (Pin-1)) | bitsStatus;   
  uint8_t result = Write_REG(TCA9554_CONFIG_REG,Data); 
  if (result != 0) { 
    printf("I/O Configuration Failure !!!\r\n");
  }
}
void Mode_EXIOS(uint8_t PinState)                         // Set the mode of the 7 pins from the TCA9554PWR with PinState   
{
  uint8_t result = Write_REG(TCA9554_CONFIG_REG,PinState);  
  if (result != 0) {   
    printf("I/O Configuration Failure !!!\r\n");
  }
}
/********************************************************** Read EXIO status **********************************************************/       
uint8_t Read_EXIO(uint8_t Pin)                            // Read the level of the TCA9554PWR Pin
{
  uint8_t inputBits = Read_REG(TCA9554_INPUT_REG);          
  uint8_t bitStatus = (inputBits >> (Pin-1)) & 0x01; 
  return bitStatus;                                  
}
uint8_t Read_EXIOS(uint8_t REG = TCA9554_INPUT_REG)       // Read the level of all pins of TCA9554PWR, the default read input level state, want to get the current IO output state, pass the parameter TCA9554_OUTPUT_REG, such as Read_EXIOS(TCA9554_OUTPUT_REG);
{
  uint8_t inputBits = Read_REG(REG);                     
  return inputBits;     
}

/********************************************************** Set the EXIO output status **********************************************************/  
bool Set_EXIO(uint8_t Pin,uint8_t State)                  // Sets the level state of the Pin without affecting the other pins
{
  uint8_t Data;
  if(State < 2 && Pin < 9 && Pin > 0){  
    uint8_t bitsStatus = Read_EXIOS(TCA9554_OUTPUT_REG);
    if(State == 1)                                     
      Data = (0x01 << (Pin-1)) | bitsStatus; 
    else if(State == 0)                  
      Data = (~(0x01 << (Pin-1))) & bitsStatus;      
    uint8_t result = Write_REG(TCA9554_OUTPUT_REG,Data);  
    if (result != 0) {                         
      printf("Failed to set GPIO!!!\r\n");
      return 0;
    }
    return 1;
  }
  else                                           
  {
    printf("Parameter error, please enter the correct parameter!\r\n");
    return 0;
  }
}
bool Set_EXIOS(uint8_t PinState)                          // Set 7 pins to the PinState state such as :PinState=0x23, 0010 0011 state (the highest bit is not used)
{
  uint8_t result = Write_REG(TCA9554_OUTPUT_REG,PinState); 
  if (result != 0) {                  
    printf("Failed to set GPIO!!!\r\n");
    return 0;
  }
  return 1;
}
/********************************************************** Flip EXIO state **********************************************************/  
bool Set_Toggle(uint8_t Pin)                              // Flip the level of the TCA9554PWR Pin
{
    uint8_t bitsStatus = Read_EXIO(Pin);    
    uint8_t result = Set_EXIO(Pin,(bool)!bitsStatus); 
    if (!result) {                         
      printf("Failed to Toggle GPIO!!!\r\n");
      return 0;
    }
    return 1;
}
/********************************************************* TCA9554PWR Initializes the device ***********************************************************/  
void TCA9554PWR_Init(uint8_t PinMode, uint8_t PinState)                  // Set the seven pins to PinState state, for example :PinState=0x23, 0010 0011 State  (Output mode or input mode) 0= Output mode 1= Input mode. The default value is output mode
{                    
  Set_EXIOS(PinState);
  Mode_EXIOS(PinMode);    
}


WS_TCA9554PWR.h

#pragma once

#include <stdio.h>
#include "I2C_Driver.h"

/****************************************************** The macro defines the TCA9554PWR information ******************************************************/ 

#define TCA9554_ADDRESS         0x20                      // TCA9554PWR I2C address
#define TCA9554_INPUT_REG       0x00                      // Input register,input level
#define TCA9554_OUTPUT_REG      0x01                      // Output register, high and low level output 
#define TCA9554_Polarity_REG    0x02                      // The Polarity Inversion register (register 2) allows polarity inversion of pins defined as inputs by the Configuration register.  
#define TCA9554_CONFIG_REG      0x03                      // Configuration register, mode configuration


#define Low   0
#define High  1
#define EXIO_PIN1   1
#define EXIO_PIN2   2
#define EXIO_PIN3   3
#define EXIO_PIN4   4
#define EXIO_PIN5   5
#define EXIO_PIN6   6
#define EXIO_PIN7   7
#define EXIO_PIN8   8

/*****************************************************  Operation register REG   ****************************************************/   
uint8_t Read_REG(uint8_t REG);                                                      // Read the value of the TCA9554PWR register REG
uint8_t Write_REG(uint8_t REG,uint8_t Data);                                        // Write Data to the REG register of the TCA9554PWR
/********************************************************** Set EXIO mode **********************************************************/       
void Mode_EXIO(uint8_t Pin,uint8_t State);                                          // Set the mode of the TCA9554PWR Pin. The default is Output mode (output mode or input mode). State: 0= Output mode 1= input mode   
void Mode_EXIOS(uint8_t PinState);                                                  // Set the mode of the 7 pins from the TCA9554PWR with PinState  
/********************************************************** Read EXIO status **********************************************************/       
uint8_t Read_EXIO(uint8_t Pin);                                                     // Read the level of the TCA9554PWR Pin
uint8_t Read_EXIOS(uint8_t REG);                                                    // Read the level of all pins of TCA9554PWR, the default read input level state, want to get the current IO output state, pass the parameter TCA9554_OUTPUT_REG, such as Read_EXIOS(TCA9554_OUTPUT_REG);
/********************************************************** Set the EXIO output status **********************************************************/  
bool Set_EXIO(uint8_t Pin,uint8_t State);                                           // Sets the level state of the Pin without affecting the other pins
bool Set_EXIOS(uint8_t PinState);                                                   // Set 7 pins to the PinState state such as :PinState=0x23, 0010 0011 state (the highest bit is not used)
/********************************************************** Flip EXIO state **********************************************************/  
bool Set_Toggle(uint8_t Pin);                                                       // Flip the level of the TCA9554PWR Pin
/********************************************************* TCA9554PWR Initializes the device ***********************************************************/  
void TCA9554PWR_Init(uint8_t PinMode = 0x00, uint8_t PinState = 0x00);              // Set the seven pins to PinState state, for example :PinState=0x23, 0010 0011 State (the highest bit is not used) (Output mode or input mode) 0= Output mode 1= Input mode. The default value is output mode

Bref, est ce que ca pourrai servir pour le code .YAML ou pas du tout?

Ces fichiers sont en C++, pas en YAML

ESPHome fonctionne avec YAML, qui décrit la logique, tandis que les fichiers .cpp/.h que tu as trouvés sont du code C++ pour l’environnement Arduino IDE. Ils ne peuvent pas être utilisés directement dans ESPHome sauf si tu crée un composant personnalisé — ce qui est possible mais plus avancé.

En faite c’ est l’équivalaient de ce qu’on a deja aborder plus haut

Oui oui, j’avais bien compris que ça n’avait rien à voir avec le code YAML.
Je parlait de éventuellement trouver dans ses codes C++ les informations manquantes au fichier YAML.
Comme par exemple le GPIO ethernet Reset, des infos sur le TCA9554 etc… étant donné qu’on avait que l’image plus haut sur ce forum.

Non la puce est bien une TCA9554 (et non TCA99554) comme sur le schema en image et je te l’avais déjà dit plus haut

#define TCA9554_ADDRESS 0x20 → adresse I²C par défaut
Wire.beginTransmission(TCA9554_ADDRESS) → standard I²C
Registres 0x00 à 0x03 → standards pour cette puce (input/output/config/polarity)
C’est 100 % compatible avec le composant tca9554 d’ESPHome

voila un ficher config pour ta carte avec le minimum

esphome:
  name: piscine_pca


esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf

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

logger:
api:
  encryption:
    key: "TA_CLE_API="


i2c:
  sda: GPIO42 
  scl: GPIO41
  scan: true

pca9554:
  - id: expander
    address: 0x20

switch:
  - platform: gpio
    pin:
      pca9554: expander
      number: 0
    id: relais_filtration
    name: "Pompe de filtration"
  - platform: gpio
    pin:
      pca9554: expander
      number: 1
    id: relais_eclairage
    name: "Éclairage bassin"
  - platform: gpio
    pin:
      pca9554: expander
      number: 2
    id: relais_pac
    name: "Pompe à chaleur"

binary_sensor:
  - platform: gpio
    pin:
      pca9554: expander
      number: 3
    name: "Retour Filtration"
    filters:
      - delayed_on: 20ms
      - delayed_off: 20ms
  - platform: gpio
    pin:
      pca9554: expander
      number: 4
    name: "Retour PAC"
    filters:
      - delayed_on: 20ms
      - delayed_off: 20ms

Edit: i2c: GPIO à jours , inverser au départ .

Je viens de recevoir / brancher mon pi5.

Hallucinant, 2 minutes l’installation / restauration.

voici mes loggs

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.005s
INFO Successful handshake with esp32-piscine @ 192.168.1.59 in 0.012s
[21:09:51][I][app:137]: ESPHome version 2025.6.3 compiled on Jul  7 2025, 21:03:22
[21:09:51][C][pca9554:048]: PCA9554:
[21:09:51][C][pca9554:048]:   I/O Pins: 8
[21:09:51][C][pca9554:052]:   Address: 0x20
[21:09:51][E][pca9554:054]: Communication failed
[21:09:51][E][component:088]:   Component pca9554 is marked FAILED: 
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][logger:211]: Logger:
[21:09:51][C][logger:211]:   Max Level: DEBUG
[21:09:51][C][logger:211]:   Initial Level: DEBUG
[21:09:51][C][logger:217]:   Log Baud Rate: 115200
[21:09:51][C][logger:217]:   Hardware UART: USB_SERIAL_JTAG
[21:09:51][C][logger:224]:   Task Log Buffer Size: 768
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][i2c.idf:083]: I2C Bus:
[21:09:51][C][i2c.idf:084]:   SDA Pin: GPIO41
[21:09:51][C][i2c.idf:084]:   SCL Pin: GPIO42
[21:09:51][C][i2c.idf:084]:   Frequency: 50000 Hz
[21:09:51][C][i2c.idf:094]:   Recovery: bus successfully recovered
[21:09:51][I][i2c.idf:104]: Results from bus scan:
[21:09:51][I][i2c.idf:106]: Found no devices
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][switch.gpio:079]: GPIO Switch 'Filtration'
[21:09:51][C][switch.gpio:079]:   Restore Mode: always OFF
[21:09:51][C][switch.gpio:031]:   Pin: 0 via PCA9554
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][switch.gpio:079]: GPIO Switch 'Éclairage Piscine'
[21:09:51][C][switch.gpio:079]:   Restore Mode: always OFF
[21:09:51][C][switch.gpio:031]:   Pin: 1 via PCA9554
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][switch.gpio:079]: GPIO Switch 'PAC Piscine'
[21:09:51][C][switch.gpio:079]:   Restore Mode: always OFF
[21:09:51][C][switch.gpio:031]:   Pin: 2 via PCA9554
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Etat Filtration'
[21:09:51][C][gpio.binary_sensor:016]:   Pin: 3 via PCA9554
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Etat PAC Piscine'
[21:09:51][C][gpio.binary_sensor:016]:   Pin: 4 via PCA9554
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][ethernet:326]: Ethernet:
[21:09:51][C][ethernet:524]:   IP Address: 192.168.1.59
[21:09:51][C][ethernet:524]:   Hostname: 'esp32-piscine'
[21:09:51][C][ethernet:524]:   Subnet: 255.255.255.0
[21:09:51][C][ethernet:524]:   Gateway: 192.168.1.1
[21:09:51][C][ethernet:524]:   DNS1: 0.0.0.0
[21:09:51][C][ethernet:524]:   DNS2: 0.0.0.0
[21:09:51][C][ethernet:545]:   MAC Address: 94:A9:90:23:04:7B
[21:09:51][C][ethernet:545]:   Is Full Duplex: YES
[21:09:51][C][ethernet:545]:   Link Speed: 100
[21:09:51][C][ethernet:329]:   CLK Pin: 15
[21:09:51][C][ethernet:329]:   MISO Pin: 14
[21:09:51][C][ethernet:329]:   MOSI Pin: 13
[21:09:51][C][ethernet:329]:   CS Pin: 16
[21:09:51][C][ethernet:341]:   IRQ Pin: 12
[21:09:51][C][ethernet:343]:   Reset Pin: 39
[21:09:51][C][ethernet:343]:   Clock Speed: 26 MHz
[21:09:51][C][ethernet:357]:   Type: W5500
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][esphome.ota:073]: Over-The-Air updates:
[21:09:51][C][esphome.ota:073]:   Address: 192.168.1.59:3232
[21:09:51][C][esphome.ota:073]:   Version: 2
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][safe_mode:018]: Safe Mode:
[21:09:51][C][safe_mode:019]:   Boot considered successful after 60 seconds
[21:09:51][C][safe_mode:019]:   Invoke after 10 boot attempts
[21:09:51][C][safe_mode:019]:   Remain for 300 seconds
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][api:182]: API Server:
[21:09:51][C][api:182]:   Address: 192.168.1.59:6053
[21:09:51][C][api:192]:   Using noise encryption: NO
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][C][mdns:122]: mDNS:
[21:09:51][C][mdns:122]:   Hostname: esp32-piscine
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed
[21:09:51][D][pca9554:096]: Device marked failed

les pin pour SCL et SDA sont inversées

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.006s
INFO Successful handshake with esp32-piscine @ 192.168.1.59 in 0.014s
[21:17:44][I][app:137]: ESPHome version 2025.6.3 compiled on Jul  7 2025, 21:16:13
[21:17:44][C][pca9554:048]: PCA9554:
[21:17:44][C][pca9554:048]:   I/O Pins: 8
[21:17:44][C][pca9554:052]:   Address: 0x20
[21:17:44][C][logger:211]: Logger:
[21:17:44][C][logger:211]:   Max Level: DEBUG
[21:17:44][C][logger:211]:   Initial Level: DEBUG
[21:17:44][C][logger:217]:   Log Baud Rate: 115200
[21:17:44][C][logger:217]:   Hardware UART: USB_SERIAL_JTAG
[21:17:44][C][logger:224]:   Task Log Buffer Size: 768
[21:17:44][C][i2c.idf:083]: I2C Bus:
[21:17:44][C][i2c.idf:084]:   SDA Pin: GPIO42
[21:17:44][C][i2c.idf:084]:   SCL Pin: GPIO41
[21:17:44][C][i2c.idf:084]:   Frequency: 50000 Hz
[21:17:44][C][i2c.idf:094]:   Recovery: bus successfully recovered
[21:17:44][I][i2c.idf:104]: Results from bus scan:
[21:17:44][I][i2c.idf:110]: Found device at address 0x20
[21:17:44][I][i2c.idf:110]: Found device at address 0x51
[21:17:44][C][switch.gpio:079]: GPIO Switch 'Filtration'
[21:17:44][C][switch.gpio:079]:   Restore Mode: always OFF
[21:17:44][C][switch.gpio:031]:   Pin: 0 via PCA9554
[21:17:44][C][switch.gpio:079]: GPIO Switch 'Éclairage Piscine'
[21:17:44][C][switch.gpio:079]:   Restore Mode: always OFF
[21:17:44][C][switch.gpio:031]:   Pin: 1 via PCA9554
[21:17:44][C][switch.gpio:079]: GPIO Switch 'PAC Piscine'
[21:17:44][C][switch.gpio:079]:   Restore Mode: always OFF
[21:17:44][C][switch.gpio:031]:   Pin: 2 via PCA9554
[21:17:44][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Etat Filtration'
[21:17:44][C][gpio.binary_sensor:016]:   Pin: 3 via PCA9554
[21:17:44][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Etat PAC Piscine'
[21:17:44][C][gpio.binary_sensor:016]:   Pin: 4 via PCA9554
[21:17:44][C][ethernet:326]: Ethernet:
[21:17:44][C][ethernet:524]:   IP Address: 192.168.1.59
[21:17:44][C][ethernet:524]:   Hostname: 'esp32-piscine'
[21:17:44][C][ethernet:524]:   Subnet: 255.255.255.0
[21:17:44][C][ethernet:524]:   Gateway: 192.168.1.1
[21:17:44][C][ethernet:524]:   DNS1: 0.0.0.0
[21:17:44][C][ethernet:524]:   DNS2: 0.0.0.0
[21:17:44][C][ethernet:545]:   MAC Address: 94:A9:90:23:04:7B
[21:17:44][C][ethernet:545]:   Is Full Duplex: YES
[21:17:44][C][ethernet:545]:   Link Speed: 100
[21:17:44][C][ethernet:329]:   CLK Pin: 15
[21:17:44][C][ethernet:329]:   MISO Pin: 14
[21:17:44][C][ethernet:329]:   MOSI Pin: 13
[21:17:44][C][ethernet:329]:   CS Pin: 16
[21:17:44][C][ethernet:341]:   IRQ Pin: 12
[21:17:44][C][ethernet:343]:   Reset Pin: 39
[21:17:44][C][ethernet:343]:   Clock Speed: 26 MHz
[21:17:44][C][ethernet:357]:   Type: W5500
[21:17:44][C][esphome.ota:073]: Over-The-Air updates:
[21:17:44][C][esphome.ota:073]:   Address: 192.168.1.59:3232
[21:17:44][C][esphome.ota:073]:   Version: 2
[21:17:45][C][safe_mode:018]: Safe Mode:
[21:17:45][C][safe_mode:019]:   Boot considered successful after 60 seconds
[21:17:45][C][safe_mode:019]:   Invoke after 10 boot attempts
[21:17:45][C][safe_mode:019]:   Remain for 300 seconds
[21:17:45][C][api:182]: API Server:
[21:17:45][C][api:182]:   Address: 192.168.1.59:6053
[21:17:45][C][api:192]:   Using noise encryption: NO
[21:17:45][C][mdns:122]: mDNS:
[21:17:45][C][mdns:122]:   Hostname: esp32-piscine

Les entrées TOR ne sont pas sur le PCA9554, elles sont directement sur les GPIO de l’ESP.

Mes relais fonctionnent !!!

Mais comment je suis content.
Et en plus, j’ai pu flasher en quelques secondes en OTA ethernet.

Maintenant, c’est la que j’ai peur.

L’ecran OLED ssd1306 et la sonde de température.

Car si je veux que Blueprint piscine fonctionne pour faire tourner la filtration automatiquement en fonction de la température de l’eau, il me faut la sonde.

PS: pas encore pu tester les retours d’états.

Edit:

pas compris