Actualizar esp8266/ESP32 por Internet

            Podemos actualizar Arduino o esp8266 desde nuestra red local con la librería ArduinoOTA, por Bluetooth y con este pequeño tutorial también via Internet desde cualquier parte fuera de nuestra LAN.

            Esto se logra muy fácilmente con la librería WebOTA. Para mostrarlo voy a actualizar un esp8266 con mi teléfono conectado via datos, sin la wifi. Advertir que el primer sketch con la librería hay que hacerlo conectado a nuestro ordenador del modo habitual en el IDE del Arduino.  

            Los sketch que se envíen tienen que estar compilados en el IDE->Programa->Exportar binarios compilados.
            Esto nos dará un fichero así:  WebOTA.ino.nodemcu.bin
            Al menos en mi caso, este fichero .bin se genera en la misma carpeta del ino.

            La librería proporciona al esp8266 una IP por DHCP. Si se desea una IP fija hay que modificar el fichero WebOTA.cpp. Es muy fácil, hay que buscar la función init_wifi y añadir las líneas señaladas con la ip que queramos.


int init_wifi(const char *ssid, const char *password, const char *mdns_hostname) {
IPAddress ip(192, 168, 1, 140);    //Línea añadida
IPAddress gateway(192,168,1,1);    //Línea añadida
IPAddress subnet (255,255,255,0);  //Línea añadida
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
WiFi.config(ip,gateway,subnet);     //Línea añadida
Serial.println("");
Serial.print("Connecting to Wifi");
// Wait for connection



            A la izquierda, el schetch que cargué con IDE y a la derecha el enviado via Internet, o sea, el típico Blink. Se recomienda el uso de la función webota.delay() en vez del delay(). 

const char* host     = "ESP-OTA";
const char* ssid     = "Jopapa";
const char* password = "xxxxxxxxxx";

#include <WebOTA.h>

int md = 1000;

void setup() {
   Serial.begin(115200);
   pinMode(LED_BUILTIN, OUTPUT);
   init_wifi(ssid, password, host);

// Defaults to 8080 and "/webota"
}

void loop() {
   
   webota.handle();
}
const char* host     = "ESP-OTA";
const char* ssid     = "Jopapa";
const char* password = "xxxxxxxxxxx";

#include <WebOTA.h>

int md = 1000;

void setup() {
    Serial.begin(115200);
    pinMode(LED_BUILTIN, OUTPUT);
    init_wifi(ssid, password, host);

// Defaults to 8080 and "/webota"
}

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    webota.delay(md);
    digitalWrite(LED_BUILTIN, LOW);
    webota.delay(md);

webota.handle();
}
          Una vez con el sketch compilado con el IDE, nos queda un detalle importante para acceder a su programación remota y es la configuración de los puertos de nuestro router para que apunten a la IP del esp8266/ESP32.
          La sintaxis desde nuestra LAN sería en este caso:  192.168.1.140:8080/webota 
          Pero desde Internet hay que redirigir los puertos así:
            Designamos un puerto externo que queramos (91), el puerto interno del WebOTA (8080) y la IP de esp8266.
            La sintaxis desde Internet (en este caso desde un teléfono) sería: http://IP_externa:91/webota
            De una u otra forma, seleccionamos el archivo compilado (xxxxxxx.ino.nodemcu.bin) y pulsamos update y nuestro esp8266 quedará actualizado.

             Yo tengo IP fija, en caso contrario habría que recurrir a servicios DDNS o con esto.











             Un video


Menu