1 line
8.1 KiB
JSON
1 line
8.1 KiB
JSON
{"uuid":"3f750a3a-fad0-4089-98e5-79c8b4287ea2","slug":"esp8266ex-restore-commandes-at","title":"Réinitialisation d'un ESP-01 : restauration du firmware AT","author":"cedric@abonnel.fr","published":true,"published_at":"2020-12-13 14:35","created_at":"2020-12-13 14:35:26","updated_at":"2026-05-13 18:15:11","revisions":[{"n":1,"date":"2026-05-13 18:15:11","comment":"Contenu modifié","title":"Réinitialisation d'un ESP-01 : restauration du firmware AT"}],"cover":"","files_meta":{"20201213-085909.png":{"author":"","source_url":""},"20201213-094634.png":{"author":"","source_url":""},"20201213-094758.png":{"author":"","source_url":""},"dummy.png":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# Réinitialisation d'un ESP-01 : restauration du firmware AT\n\n## Introduction\n\nL'ESP-01 est un petit module Wi-Fi très répandu, construit autour du microcontrôleur ESP8266EX fabriqué par Espressif. À sa sortie d'usine, il est livré avec un firmware (le programme interne du circuit) qui permet de le piloter à l'aide de commandes textuelles simples appelées **commandes AT**. Ce firmware peut être effacé ou corrompu, par exemple après avoir téléversé un programme Arduino ou MicroPython sur le module. Ce document explique comment remettre l'ESP-01 dans son état d'origine afin de retrouver l'usage des commandes AT.\n\n## Quelques notions préalables\n\nAvant de commencer, il est utile de clarifier quelques termes.\n\nUn **firmware** est le logiciel embarqué dans un composant électronique. Contrairement à un programme installé sur un ordinateur, il s'écrit directement dans la mémoire flash du microcontrôleur et s'exécute au démarrage du circuit.\n\nUn **fichier binaire** (extension `.bin`) est le résultat de la compilation d'un code source écrit dans un langage évolué, généralement le C. Une fois compilé, le fichier ne contient plus que des instructions destinées au processeur, illisibles directement par un humain. Il n'est pas nécessaire de les modifier : ils se téléversent tels quels dans le microcontrôleur.\n\nLa **mémoire flash** de l'ESP8266EX est divisée en zones. Chaque binaire doit être écrit à une **adresse mémoire** précise, sans quoi le module ne saura pas où trouver le code à exécuter au démarrage. Sur l'ESP-01, la mémoire est généralement organisée en **512k + 512k**, ce qui signifie que la flash totale de 8 Mbit (1 Mo) est partagée en deux zones de 512 ko : l'une pour le programme actif, l'autre réservée aux mises à jour à distance (OTA).\n\n## Étape 1 — Télécharger le firmware AT officiel\n\nLe firmware est mis à disposition par Espressif sur son site officiel :\n\n[https://www.espressif.com/en/products/socs/esp8266ex/resources](https://www.espressif.com/en/products/socs/esp8266ex/resources)\n\n\n\nDans la section `AT`, choisir la version `ESP8266 NonOS AT Bin V1.7.4` ou plus récente. L'archive ZIP téléchargée contient plusieurs binaires destinés à l'ESP8266EX.\n\nQuatre fichiers sont particulièrement importants :\n\n- **boot_v1.7.bin** — le chargeur de démarrage (*bootloader*), premier programme exécuté à la mise sous tension ;\n- **user1.1024.new.2.bin** — le programme AT proprement dit, qui interprète les commandes envoyées par la liaison série ;\n- **esp_init_data_default_v08.bin** — les données d'initialisation (paramètres radio, calibration) ;\n- **blank.bin** — un fichier rempli de zéros, utilisé pour réinitialiser certaines zones de la flash.\n\nUne copie de ces binaires pour la configuration **ESP8266EX 512k+512k** est disponible ici :\n\n[https://gitlab.com/cedricAbonnel/esp/-/tree/master/esp01/esp8266ex_at_bin](https://gitlab.com/cedricAbonnel/esp/-/tree/master/esp01/esp8266ex_at_bin)\n\n## Étape 2 — Identifier le port série de l'ESP-01\n\nL'ESP-01 ne se connecte pas directement à un port USB : il faut passer par un adaptateur USB-série (souvent un module FTDI ou CH340). Une fois branché, l'ordinateur expose ce périphérique sous la forme d'un fichier dans `/dev/`.\n\nPour repérer ce fichier, exécuter dans un terminal :\n\n```\nls /dev/tty*\n```\n\nParmi les entrées affichées, celle qui nous intéresse est généralement **/dev/ttyUSB0** (parfois `ttyUSB1` si plusieurs adaptateurs sont branchés, ou `ttyACM0` selon le modèle).\n\nUne astuce utile : exécuter la commande une première fois sans l'adaptateur, puis une seconde fois après l'avoir branché. La nouvelle entrée qui apparaît est celle du module.\n\n## Étape 3 — Préparer le téléversement avec esptool.py\n\n**esptool.py** est l'outil officiel d'Espressif, écrit en Python, qui permet de communiquer avec la mémoire flash de l'ESP8266EX. S'il n'est pas déjà installé, on peut l'obtenir via `pip` :\n\n```\npip install esptool\n```\n\nAvant le téléversement, l'ESP-01 doit être placé en **mode programmation** : la broche **GPIO0** doit être reliée à la masse (GND) au moment de la mise sous tension. Sans cette manipulation, le module démarre normalement et refuse l'écriture en flash.\n\n## Étape 4 — Téléverser les binaires\n\nLa commande suivante écrit les quatre binaires aux bonnes adresses mémoire :\n\n```\nesptool.py --port /dev/ttyUSB0 write_flash --flash_mode qio \\\n 0x00000 boot_v1.7.bin \\\n 0x01000 user1.1024.new.2.bin \\\n 0xfc000 esp_init_data_default_v08.bin \\\n 0x7e000 blank.bin \\\n 0xfe000 blank.bin\n```\n\nDécortiquons les options :\n\n- `--port /dev/ttyUSB0` indique le port série identifié à l'étape précédente ;\n- `write_flash` est la sous-commande d'écriture en mémoire flash ;\n- `--flash_mode qio` précise le mode d'accès à la flash (*Quad I/O*, le plus rapide, supporté par l'ESP-01).\n\nChaque valeur hexadécimale (`0x00000`, `0x01000`, etc.) qui précède un nom de fichier indique l'**adresse mémoire** à laquelle l'écriture doit commencer. La table de correspondance officielle pour une flash de 8 Mbit organisée en 512k+512k est la suivante :\n\n```\n### Flash size 8Mbit: 512KB+512KB\n boot_v1.2+.bin 0x00000\n user1.1024.new.2.bin 0x01000\n esp_init_data_default.bin 0xfc000\n blank.bin 0x7e000 & 0xfe000\n```\n\nL'adresse `0x7e000` correspond aux paramètres système, et `0xfe000` à la zone RF système : les remplir de zéros (`blank.bin`) garantit un démarrage propre.\n\nSi tout se passe bien, esptool affiche la progression du téléversement et confirme la réussite de l'opération. C'est le moment d'apprécier le travail accompli :\n\n\n\n## Étape 5 — Vérifier le bon fonctionnement\n\nAprès le téléversement, retirer la connexion entre GPIO0 et la masse, puis redémarrer le module. Ouvrir une console série (par exemple avec `minicom`, `screen` ou la console série de l'IDE Arduino) à la vitesse **115200 bauds** :\n\n```\nscreen /dev/ttyUSB0 115200\n```\n\nTaper la commande `AT` suivie d'un retour à la ligne. Le module doit répondre `OK`. La commande `AT+GMR` retourne la version du firmware installé, ce qui permet de confirmer la réussite de la réinitialisation.\n\n\n\n## En cas de problème\n\nQuelques pistes si la procédure échoue :\n\n- **Aucune réponse d'esptool** : vérifier que GPIO0 est bien reliée à GND au moment de l'alimentation, et que l'adaptateur USB-série fournit assez de courant (l'ESP-01 demande des pics jusqu'à 300 mA).\n- **Réponses illisibles dans la console série** : la vitesse par défaut a pu changer selon la version du firmware. Essayer 9600, 74880 ou 115200 bauds.\n- **Erreur de checksum ou de mode flash** : essayer `--flash_mode dio` à la place de `qio`, certains clones d'ESP-01 ne supportent pas le mode Quad I/O.\n\n## Conclusion\n\nCette procédure restaure un ESP-01 dans son état d'origine, prêt à recevoir des commandes AT depuis n'importe quel système capable de dialoguer en série : ordinateur, Arduino, Raspberry Pi, etc. Elle constitue également un bon exercice d'introduction aux notions de firmware, de mémoire flash et de programmation bas-niveau des microcontrôleurs.","featured":false,"tags":[]} |