Deux possibilités : web.esphome.io ou esphome en local.
Le site web.esphome.io permet de flasher un esp avec une version esphome de base et de configurer le wifi. Les mises à jour sont normalement possibles en OTA par la suite. J’ai cependant eu droit à des erreurs que je n’ai pas trop cherché à résoudre. À la place je suis parti sur une installation en local d’ESPHome.
ESPHome en local
La solution la plus simple semble être l’installation d’ESPHome via un add-on dans Home Assistant. Mais mon instance Home Assistant tournant dans un conteneur Docker, je n’ai pas cette possibilité.
Restent deux solutions :
- créer un conteneur docker en parallèle du conteneur Home Assistant
- créer un conteneur Docker directement sur mon pc, sous Windows 11
J’ai opté pour la deuxième solution. La configuration sera donc la suivante :
Windows > WSL > Docker
J’ai eu droit à des erreurs en passant par la WebGUI d’ESPHome. La compilation du firmware se passe mal, je me suis donc replié sur la CLI (dans le conteneur) où la compilation se fait sans souci, pour une raison qui m’échappe. Mais un problème subsiste : impossible de charger le firmware dans l’esp. C’est, de ce que j’ai compris, une complication avec Docker sur WSL : les ports usb ne sont pas mappés entre l’hôte et le conteneur. Après quelques recherches j’en suis arrivé à la méthode présentée ci-dessous.
Prérequis
- Une installation WSL fonctionnelle et à jour
- Docker Desktop installé et configuré
- Un module ESP8266 et son module USB. Garder à l’esprit que pour être flashé l’ESP8266 doit avoir la pin GPIO0 mise à la masse (GND), sans quoi il n’entrera pas en mode “flashable”. Inversement, pour l’exploiter après il faudra enlever ce shunt. Pour ma part j’utilise deux modules USB, un dont les pins sont shuntés, l’autre d’origine.
- Un fichier de configuration pour ESPHome. Ce fichier yaml devra être dans un dossier accessible depuis WSL. Si un fichier secrets.yaml est associé bien penser à le mettre avec.
Mapper les ports USB de Windows à WSL
Source : https://learn.microsoft.com/fr-fr/windows/wsl/connect-usb
Installer USBIPD-WIN
Télécharger la dernière version en date : https://github.com/dorssel/usbipd-win/releases
Exécuter le .msi téléchargé.
Cette opération installera :
- Un service appelé
usbipd(nom affiché : hôte de périphérique USBIP). Vous pouvez vérifier l’état de ce service à l’aide de l’application Services à partir de Windows. - Un outil en ligne de commande
usbipd. L’emplacement de cet outil est ajouté à la variable d’environnement PATH. - Une règle de pare-feu appelée
usbipdpour permettre à tous les sous-réseaux locaux de se connecter au service. Vous pouvez modifier cette règle de pare-feu pour affiner le contrôle d’accès.
Attacher un périphérique USB
Dans une invite de commande Windows Powershell, en administrateur.
Lister les périphériques USB
usbipd list
Repérer l’ID du bus à partager ( X-Y )
Rendre le périphérique partageable
usbipd bind --busid X-Y
Remplacer X et Y par les chiffres obtenus à l’étape précédente.
Attacher le périphérique à WSL
usbipd attach --wsl --busid X-Y
On peut fermer la CLI Powershell.
Dans la CLI WSL
Lister les périphériques USB
lsusb
Normalement le bus USB devrait apparaître.

Lancer le conteneur Docker
Ce conteneur est temporaire, utilisé juste pour flasher l’esp avec la bonne configuration.
docker run --rm -it --privileged --device /dev/ttyUSB0 --name esphome \
-p 6052:6052 \
-v /chemin/vers/config:/config \
ghcr.io/esphome/esphome
On ne regarde pas l’aspect “sécurité” ici. Le conteneur est en mode “privileged” pour avoir accès aux ressources de l’hôte. On ne lance le conteneur que le temps de flasher l’esp, on le détruit après.
Penser à nommer le conteneur, ça sera moins chiant pour la suite.
ESPHome, ce calvaire…
Sur le papier tout paraît simple. On ouvre la page web à l’adresse http://localhost:6052 , on branche l’esp, on indique le port, on flash le biniou et zaou. Mais dans les faits ça ne s’est pas passé comme ça pour moi. La compilation n’a pas voulu fonctionner en passant par la WebGUI. Du coup j’ai exploré un peu la CLI.
Se connecter au conteneur
Dans la CLI WSL :
Pas indispensable mais on peut lister les conteneurs en cours d’exécution sur la machine:
sudo docker ps
On obtient ceci :

Notre conteneur est bien en cours d’exécution.
sudo docker exec -ti esphome bash
D’où l’utilité de nommer le conteneur lors du lancement : on s’épargne la commande précédente pour récupérer le CONTAINER ID (qui changera à chaque fois qu’on relancera le conteneur).

On se retrouve donc dans le conteneur et on peut enchaîner sur la suite.
Les commandes esphome
Commencer par afficher l’aide, ça peut être utile :
esphome -h
Vérifier la configuration
Il peut être utile de vérifier la configuration qu’on s’apprête à envoyer à l’ESP
esphome config mon-fichier.yml
Les lignes défilent dans le terminal, si une ligne affiche à la fin “INFO Configuration is valid!” en vert, on est bon. Sinon commencer par régler les problèmes recensés par l’utilitaire.
Lancer la compilation et l’uploader dans l’esp
esphome run mon-fichier.yml
Une fois la compilation terminée il est demandé de choisir entre USB ou OTA pour le flash. Choisir l’USB (l’OTA n’est pas possible puisque l’esp n’est pas encore configuré).

Et voilà!