🛠 Programmation OTA : téléverser le code par Wi-Fi

ESP8266 (module ESP-12E) · avance · Schéma : IMG-esp8266-esp-12e-avance-2-esp8266-ota-arduino.svg — Module ESP8266-ESP-12E flashé une première fois par câble série puis mis à jour par Wi-Fi depuis un ordinateur, routeur en point d'accès, flash 4 Mo du module annotée.

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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels