|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

Tutorial del Internet de las Cosas y Bluetooth con el ESP32
Juan Antonio Villalpando

Volver al índice del tutorial

____________________________

230B.- OTA (Over The Air). Carga de programa por WiFi.

- Esto trata de cargar un programa en el ESP32 por WiFi, es decir sin estar conectado por cable USB al ordenador.

- Se suele utilizar cuando queremos modificar un programa ya cargado y no tenemos acceso a la tarjeta por cable USB.

- Necesitamos que el ordenador y la tarjeta del ESP8266 estén en la misma red.

- También necesitamos tener Python en nuestro ordenador.

______________________________________________________
1.- Instalamos Python en nuestro ordenador con Windows.

[En las distribuciones de LINUX no es necesario instalarlo porque ya lo está]

- Vamos a: https://www.python.org/downloads/release/python-368/

- y bajamos el archivo: python-3.6.8-embed-amd64.zip

- Lo descomprimimos en C:\Archivos de Programa (x86)\Python

- Vamos a Propiedades del sistema / Variables de entorno...

- Editamos PATH

- Agregamos al principio C:\Program Files (x86)\Python\;

- Fíjate que termina en punto y coma;

________________________________
2.- Creación del Puerto de Red esp32- at 192.168.1.4

- https://github.com/espressif/arduino-esp32/tree/master/libraries/ArduinoOTA

- Veamos este ejemplo, se trata simplemente de cargar y modificar la aplicación de parpadeo Blink.

- En principio lo cargamos con el cable USB conectado a nuestro ordenador y a la tarjeta.

OTA_blink.ino

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

// Nombre y contraseña de tu red WiFi.
const char* ssid = "Nombre_de_tu_Red_WiFi";
const char* password = "Clave_WiFi";

void setup() 
{pinMode(D4, OUTPUT);     // Terminal D4 es salida.
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) 
  {
    Serial.println("Fallo en la conexión. Reconectando...");
    delay(5000);
    ESP.restart();
  }

 // ArduinoOTA.setPassword((const char *)"123"); // Poner clave, opcional.
  
  ArduinoOTA.begin();
  Serial.print("Dirección IP: ");
  Serial.println(WiFi.localIP());
}

void loop() 
{
  ArduinoOTA.handle();
  // Serial.println("OTA....");
  digitalWrite(D4, LOW);   
  delay(1000);      
  digitalWrite(D4, HIGH);
  delay(1000);      
}

- Le echamos un vistazo al Monitor serie y a Herramientas.

- Observamos que en Herramientas se ha creado Puerto de Red: esp32-b4e62f62b1 at 192.168.1.4

- Si no te sale ese puerto, reinicia el IDE de Arduino.

- Es decir, que ahora podemos cargar los programas por WiFi (o por el COM22)

________________________________
3.- Modificación de la aplicación por WiFi.

- Ahora quitamos el cable USB de la tarjeta.

- Pero evidentemente la debemos alimentar con una pila, batería,...

- Aunque este tipo de pilas de 9V, si está un poco gastada no dará la suficiente potencia para que funcione bien el WiFi.

- Es mejor alimentarlo con una fuente de alimentación de más potencia para que el WiFi funcione con más fuerza.

- Ahora modificamos el programa, por ejemplo ponemos otra cantidad en los delay.


digitalWrite(2, HIGH); delay(500); digitalWrite(2, LOW); delay(200);

- Y subimos el código estando marcado Puerto: esp32- at 192.168.1.4

- Observamos que el código ha subido al ESP32 por WiFi y ha modificado el delay del código anterior.

________________________________
- Comentarios.

- La primera vez que subas el código debes hacerlo mediante el cable USB.

- Las siguientes veces, puedes quitar el cable USB y subirlo por WiFi.

- El código siempre debe llevar todas las instrucciones correspondiente a ArduinoOTA

- Cuando la conexión es por Puerto de Red, no funciona el Monitor Serie.

- Si reinicias la tarjeta pulsando el botón de Reset, espera como 1 minutos para que pueda conectar con el Wifi antes de subir el código.

- Aunque existen protecciones, intenta no alimentar a la vez al módulo con el cable USB y con el conector de la batería.

- Si te sale este error, es que no está bien establecido el PATH de "python.exe"

_________________________________
- Código similar al anterior.

OTA_blink.ino

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

// Nombre y contraseña de tu red WiFi.
const char* ssid = "Nombre_de_tu_Red_WiFi";
const char* password = "Clave_WiFi";

void setup() {
  pinMode(D4, OUTPUT); 
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  // ArduinoOTA.setHostname("myesp8266");

  // No authentication by default
  // ArduinoOTA.setPassword((const char *)"123");

  ArduinoOTA.onStart([]() {
    Serial.println("Start");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  ArduinoOTA.handle();
  digitalWrite(D4, HIGH);   
  delay(500);                 
  digitalWrite(D4, LOW);
  delay(500);
}

 

_______________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información