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

ESP8266 (módulo 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.

Objetivos

Actualizar el programa del ESP8266-ESP-12E sin volver a conectar ningún cable: el núcleo de Arduino incorpora el protocolo OTA (ArduinoOTA). Tras una primera carga obligatoria por cable serie, el módulo aparece en el puerto «red» de Arduino IDE y acepta actualizaciones por Wi-Fi. Comprender la distribución de la memoria flash de 4 MB es la clave del tema: con el esquema de particiones OTA, la flash contiene dos ubicaciones de programa (sketch A y sketch B) más el sistema de archivos; por lo tanto, un sketch OTA no puede superar la mitad útil de la flash. Se debe elegir el preset de flash correcto en Arduino IDE para evitar bucles de reinicio (boot loops).

Material

Código completo

#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>

const char* SSID = "mon-reseau";
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 etre appele souvent : pas de blocage ici
  // ... application ...
  yield;
}

Verificación esperada

Tras la primera carga por cable, la consola muestra la IP del módulo. En Arduino IDE, aparece un nuevo puerto «esp12e-01 @ 192.168.1.x» (puede tardar unos segundos o requerir reiniciar el IDE). Selecciónalo, modifica el código (por ejemplo, cambiar un mensaje) y carga: el progreso se muestra en la consola serie, el módulo se reinicia y el nuevo programa se ejecuta, sin cable. En el menú, el tamaño de carga «OTA» ha reemplazado a «Serial».

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales