🛠 Programmation OTA : téléverser le code par Wi-Fi
Objectifs
Mettre à jour le programme de l'ESP8266-ESP-12E sans jamais reconnecter de câble : le core Arduino embarque le protocole OTA (ArduinoOTA). Après un premier téléversement obligatoire par câble série, le module apparaît dans le port « réseau » d'Arduino IDE et accepte les mises à jour par Wi-Fi. Comprendre la répartition de la flash 4 Mo est la clé du sujet : avec le schéma de partitions OTA, la flash contient deux emplacements de programme (sketch A et sketch B) plus le système de fichiers — un sketch OTA ne peut donc pas dépasser la moitié utile de la flash. On choisit le bon preset de flash dans Arduino IDE pour éviter les boot loops.
Matériel
- 1 module ESP8266-ESP-12E (flash 4 Mo, board « NodeMCU 1.0 (ESP-12E Module) »)
- 1 câble USB-série pour le premier téléversement (GPIO0 à la masse au reset = mode flash)
- Réseau Wi-Fi 2,4 GHz ; l'ordinateur et le module sur le même sous-réseau (mDNS/broadcast)
- Arduino IDE avec le core esp8266 installé
Code complet
#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>
const char* SSID = "mon-réseau";
const char* PASS = "mot-de-passe";
void setup {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASS);
while (WiFi.status != WL_CONNECTED) { delay(250); Serial.print("."); }
Serial.printf("\nIP = %s\n", WiFi.localIP.toString.c_str);
ArduinoOTA.setHostname("esp12e-01");
ArduinoOTA.setPassword("secret-ota"); // optionnel mais recommandé
ArduinoOTA.onStart([] {
Serial.printf("OTA debut : %s\n", ArduinoOTA.getCommand == U_FLASH ? "sketch" : "fs");
});
ArduinoOTA.onEnd([] { Serial.println("\nOTA termine, redemarrage"); });
ArduinoOTA.onProgress([](unsigned int prog, unsigned int total) {
static unsigned int dernier = 0;
if (prog * 100 / total / 10 != dernier) {
dernier = prog * 100 / total / 10;
Serial.printf("%u%% ", dernier * 10);
}
});
ArduinoOTA.onError([](ota_error_t e) { Serial.printf("Erreur OTA %u\n", e); ESP.restart; });
ArduinoOTA.begin;
}
void loop {
ArduinoOTA.handle; // doit être appele souvent : pas de blocage ici
// ... application ...
yield;
}
Vérification attendue
Après le premier téléversement par câble, la console affiche l'IP du module. Dans Arduino IDE, un nouveau port « esp12e-01 @ 192.168.1.x » apparaît (il peut falloir quelques secondes, ou redémarrer l'IDE). Choisis-le, modifie le code (par exemple changer un message) et téléverse : la progression s'affiche dans la console série, le module redémarre et le nouveau programme tourne — sans câble. Dans le menu, la taille d'upload « OTA » a remplacé « Serial ».
Erreurs fréquentes
- Mauvais preset de flash : avec « Flash Size 512 KB » sur un ESP-12E 4 Mo, ou l'inverse sur une vraie 512 Ko, le bootloader ne trouve pas le sketch → boot loop. Choisis « NodeMCU 1.0 (ESP-12E Module) » : flash 4 Mo, mode DIO.
- Vouloir un sketch de plus de ~1,5 Mo en OTA : le schéma de partitions standard réserve deux slots de sketch ; au-delà, le téléversement échoue (erreur de taille).
- Le port réseau n'apparaît pas : pare-feu qui bloque le multicast/broadcast, ou PC et module sur des VLAN différents ; le port « esp8266-ota » du poste distant est aussi une option.
- Oublier ArduinoOTA.handle dans loop ou bloquer 30 s dans le code : la mise à jour échoue par timeout.
- Un mot de passe OTA défini mais non saisi dans l'IDE (menu Ports → mot de passe demandé) : le téléversement est rejeté silencieusement.
- Le premier téléversement ne peut PAS être OTA : c'est le câble série qui installe le récepteur, avec GPIO0 mis à la masse au reset.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht11.inoArduinoluxmetre.inoArduinoserveur-web.inoArduino