Blog
esptool : commandes, options, dépannage
esptool est l’outil que tout propriétaire d’ESP32 finit par lancer à la main — l’IDE Arduino le cache, PlatformIO le cache, puis un jour le flash échoue et vous tapez du Python dans un terminal. Commandes, options et les erreurs qui n’ont aucun sens tant qu’on ne les a pas vues une fois.
C’est quoi esptool ?
esptool est l’outil en ligne de commande officiel d’Espressif pour parler aux puces ESP32 en série — flasher, effacer, lire la mémoire, récupérer l’identité. Tous les chemins de flash passent par lui : l’IDE Arduino l’embarque, PlatformIO l’embarque, les installeurs web l’exécutent. Le connaître, c’est l’heure de débogage que vous ne revivrez jamais.
Comment vérifier qu’esptool est installé ?
Lancez esptool.py version. Un numéro de version (5.x, 4.7, ce qui est courant) signifie que vous êtes prêt. « Command not found » signifie pip install esptool — Python 3.7+ est la seule exigence.
Quelles sont les commandes esptool les plus utiles ?
Les commandes essentielles d’esptool sont cinq : chip_id identifie la puce, flash_id lit le flash, read_mac affiche la MAC d’usine, erase_flash efface tout, et write_flash écrit un binaire à une adresse — 90 % de l’usage quotidien. merge_bin combine plusieurs binaires en une seule image à confier à quelqu’un d’autre.
Comment flasher un firmware avec esptool ?
Une ligne suffit : esptool.py write_flash 0x0 firmware.bin, avec --port COM3 ajouté sur la plupart des machines. L’offset compte plus qu’on ne croit : 0x0, c’est là où commence une image d’usine, tandis que les applications ESP-IDF vont à 0x10000. Flashez au mauvais offset et la carte démarre sur du vide, ce qui explique que beaucoup de cartes « brickées » sont en fait mal flashées. La FAQ sur le flash couvre les offsets et les layouts de partition.
Comment effacer le flash de l’ESP32 ?
esptool.py erase_flash efface toute la puce en quelques secondes. L’avertissement que tout le monde saute : il supprime aussi le bootloader, donc une carte qui faisait tourner un firmware d’usine ne démarrera pas tant que vous n’aurez pas flashé quelque chose. Effacer corrige une table de partitions corrompue et les boucles de démarrage — traitez-le comme un reset, pas une réparation.
Puis-je sauvegarder le flash avant d’y toucher ?
esptool.py read_flash 0x0 0x400000 backup.bin vide les 4 premiers Mo dans un fichier — le geste standard avant une mise à jour risquée ; la restauration, c’est write_flash au même offset. Une réserve : une sauvegarde simple ne se restaure pas sur une carte avec chiffrement du flash activé — je l’ai appris à mes dépens au printemps dernier.
Que font –port, –baud et les autres options ?
--port choisit le port série (COM3 sous Windows, /dev/ttyUSB0 sous Linux, /dev/cu.usbserial-XXXX sous macOS) ; --baud règle la vitesse — 460800 est un choix rapide sûr, et certaines puces USB bafouillent au-dessus de 921600, donc ça dépend de la puce pont de votre carte ; --chip force la cible si l’auto-détection échoue. Le reste, vous pouvez l’ignorer jusqu’à ce qu’une erreur en nomme une.
Pourquoi j’obtiens « Failed to Connect to ESP32: Timed Out Waiting for Packet Header » ?
La puce n’est pas en mode boot. esptool a besoin que le bootloader ROM écoute, et les causes classiques sont : un circuit d’auto-reset non câblé (modules nus), le mauvais port, ou autre chose qui tient la ligne série — j’ai chassé cette erreur exacte pendant une heure une fois parce que le Moniteur série était encore ouvert. Maintenez BOOT, tapez sur EN, relâchez BOOT, réessayez. Sur les modules nus, reliez GPIO0 à la masse à la mise sous tension. La FAQ débogage en a plus.
Pourquoi le flash se bloque-t-il à 100 % ?
Les données sont écrites et la carte redémarre dans le nouveau firmware, restant silencieuse — normal quand le firmware n’a pas de sortie série. Une boucle de démarrage à la place signifie que l’image cible la mauvaise taille de flash ou la mauvaise puce. Confirmez avec esptool.py chip_id, vérifiez flash_id, re-flashez.
esptool fonctionne-t-il pareil sous Windows, Linux et Mac ?
Oui — mêmes commandes, options et offsets, parce que c’est un script Python sur toutes les plateformes. Seuls les noms de ports et les pilotes diffèrent ; notre base de connaissances contient les notes de pilotes pour chaque OS.