Files
varlog/3f750a3a-fad0-4089-98e5-79c8b4287ea2/revisions/0001.md
T
2026-05-15 10:37:48 +02:00

117 lines
7.1 KiB
Markdown

## Introduction
L'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.
## Quelques notions préalables
Avant de commencer, il est utile de clarifier quelques termes.
Un **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.
Un **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.
La **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).
## Étape 1 — Télécharger le firmware AT officiel
Le firmware est mis à disposition par Espressif sur son site officiel :
[https://www.espressif.com/en/products/socs/esp8266ex/resources](https://www.espressif.com/en/products/socs/esp8266ex/resources)
![](20201213-085909.png)
Dans 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.
Quatre fichiers sont particulièrement importants :
- **boot_v1.7.bin** — le chargeur de démarrage (*bootloader*), premier programme exécuté à la mise sous tension ;
- **user1.1024.new.2.bin** — le programme AT proprement dit, qui interprète les commandes envoyées par la liaison série ;
- **esp_init_data_default_v08.bin** — les données d'initialisation (paramètres radio, calibration) ;
- **blank.bin** — un fichier rempli de zéros, utilisé pour réinitialiser certaines zones de la flash.
Une copie de ces binaires pour la configuration **ESP8266EX 512k+512k** est disponible ici :
[https://gitlab.com/cedricAbonnel/esp/-/tree/master/esp01/esp8266ex_at_bin](https://gitlab.com/cedricAbonnel/esp/-/tree/master/esp01/esp8266ex_at_bin)
## Étape 2 — Identifier le port série de l'ESP-01
L'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/`.
Pour repérer ce fichier, exécuter dans un terminal :
```
ls /dev/tty*
```
Parmi 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).
Une 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.
## Étape 3 — Préparer le téléversement avec esptool.py
**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` :
```
pip install esptool
```
Avant 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.
## Étape 4 — Téléverser les binaires
La commande suivante écrit les quatre binaires aux bonnes adresses mémoire :
```
esptool.py --port /dev/ttyUSB0 write_flash --flash_mode qio \
0x00000 boot_v1.7.bin \
0x01000 user1.1024.new.2.bin \
0xfc000 esp_init_data_default_v08.bin \
0x7e000 blank.bin \
0xfe000 blank.bin
```
Décortiquons les options :
- `--port /dev/ttyUSB0` indique le port série identifié à l'étape précédente ;
- `write_flash` est la sous-commande d'écriture en mémoire flash ;
- `--flash_mode qio` précise le mode d'accès à la flash (*Quad I/O*, le plus rapide, supporté par l'ESP-01).
Chaque 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 :
```
### Flash size 8Mbit: 512KB+512KB
boot_v1.2+.bin 0x00000
user1.1024.new.2.bin 0x01000
esp_init_data_default.bin 0xfc000
blank.bin 0x7e000 & 0xfe000
```
L'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.
Si 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 :
![](20201213-094634.png)
## Étape 5 — Vérifier le bon fonctionnement
Aprè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** :
```
screen /dev/ttyUSB0 115200
```
Taper 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.
![](20201213-094758.png)
## En cas de problème
Quelques pistes si la procédure échoue :
- **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).
- **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.
- **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.
## Conclusion
Cette 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.