lunes, 2 de octubre de 2017

Tutorial #21 ESP8266 – OTA – Carga tu Sketch en Forma Inalámbrica

En este tutorial de internet de las cosas (IOT) explico cómo carga de manera inalámbrica, nuestro sketch de Arduino en un ESP8266. Para realizar esto no valemos de un método llamado OTA (Over The Air / Por el Aire).


Tutorial21_OTA:

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

const char* ssid = "..........";
const char* password = "..........";

int contconexion = 0;

unsigned long previousMillis = 0;
int ledState = LOW;    

void setup() {

  Serial.begin(115200);
  Serial.println("");
  Serial.println("");

  pinMode(2, OUTPUT);
  digitalWrite(2, LOW);
  
  WiFi.mode(WIFI_STA); //para que no inicie solamente en modo estación
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED and contconexion <50) { //Cuenta hasta 50 si no se puede conectar lo cancela
    ++contconexion;
    Serial.print(".");
    delay(500);
  }
  if (contconexion <50) {
      //para usar con ip fija
      IPAddress Ip(192,168,1,180); 
      IPAddress Gateway(192,168,1,1); 
      IPAddress Subnet(255,255,255,0); 
      WiFi.config(Ip, Gateway, Subnet); 
      
      Serial.println("");
      Serial.println("WiFi conectado");
      Serial.println(WiFi.localIP());

      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());
               
  }
  else { 
      Serial.println("");
      Serial.println("Error de conexion");
  }
}

void loop() {
  ArduinoOTA.handle();
  
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis >= 1000) {
    previousMillis = currentMillis;   
    if (ledState == LOW)
      ledState = HIGH;  // Note that this switches the LED *off*
    else
      ledState = LOW;   // Note that this switches the LED *on*
    digitalWrite(2, ledState);
  }
}

5 comentarios:

  1. Respuestas
    1. No es excluyente la libreria ArduinoOTa, se puede hacer con librerías que suministren la dirección IP que toma el módulo ESP.

      Estas lineas son suficientes
      IPAddress ip(192, 168, 1, 100);
      IPAddress gateway(192,168,1,1);
      IPAddress subnet (255,255,255,0);
      Serial.println("Booting");
      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);
      WiFi.config(ip,gateway,subnet);

      Eliminar
  2. Buenísimo!!!!! Gracias por el aporte

    ResponderEliminar
  3. Gracias por el articulo, me surge una duda si estoy usando interrupciones en ArduinoOTA.onStart([]() tendría que des-habilitarlas?

    ResponderEliminar