Página 1 de 1

ESP8266: Usar OTA para subir proyectos desde Arduino IDE

Publicado: 11 Ago 2017, 11:36
por Naguissa
Los microcontroladores ESP8266 tienen la capacidad de programarse usando OTA directamente desde el IDE Arduino. Para ello el programa que tiene actualmente funcionando debe estar preparado para aceptar OTA.

Los requisitos para ello son:
  • IDE Arduino
  • Soporte para ESP8266 en el IDE Arduino.
  • Necesitamos instalar Python 2.7: https://www.python.org/downloads/ . Descargad la última versión, pero de la rama 2.7. Al instalarlo en Windows debemos seleccionar "Add python.exe to Path".
  • El tamaño total del programa ha de ser inferior al 50% del espacio de nuestro ESP (escoged la mejor opción disponible en el selector de placas, por ejemplo tenemos 1Mb programa/3Mb SPIFFS y 3Mb programa/1Mb SPIFFS para el ESP12E de 4Mb).
Ahora necesitaremos que los programas subidos sean compatibles con OTA. Para ello deberemos añadir en nuestros programas la siguiente estructura básica:

Código: Seleccionar todo

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


void setupWiFi() {
	// ...
	// Tu setup de la wifi
	MDNS.begin("Nombre"); // Nombre del host
	MDNS.addService("http", "tcp", 80);
	// ...
}


void setupOTA() {
	// ArduinoOTA.setPort(8266); // Puerto, por defecto el 8266
	ArduinoOTA.setHostname((const char *) "Nombre"); // Nombre del host

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

	// DEBUG, can be omitted
	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) {
		W_DEBUG("Error[");
		W_DEBUG(error);
		W_DEBUG("]: ");
		switch (error) {
			case OTA_AUTH_ERROR:
				// Auth Failed
				break;
			case OTA_BEGIN_ERROR:
				// Begin Failed
				break;
			case OTA_CONNECT_ERROR:
				// Connect Failed
				break;
			case OTA_RECEIVE_ERROR:
				// Receive Failed
				break;
			case OTA_END_ERROR:
				// End Failed
				break;
			default:
				// Unknown error
		}
	});
	ArduinoOTA.begin();
}

void setup(void) {
	setupWiFi();
	setupOTA();
}


void loop(void) {
	ArduinoOTA.handle();
}

Con ésto añadido a los programas que subas podrás programar tu ESP8266 sencillamente escogiendo como puerto el nuevo que aparecerá, llamado "Nombre-ota at <IP actual del dispositivo> (Generic ESP8266 Module)".


Sólo comentar que no he conseguido que me aparezca en Linux, pero es debido a que tengo una versión de Python no compatible y es bastante engorroso cambiarlo en mi ordenador (Gentoo Linux). Sin embargo me funciona perfectamente en Windows.



Fuentes: