====== OTA (over the air) firmware upload for ESP8266 ====== * Explicar ¿qué es OTA? * Explicar cuáles son las ventajas de usarlo http://docs.platformio.org/en/stable/projectconf.html https://esp8266.github.io/Arduino/versions/2.0.0/doc/ota_updates/ota_updates.html https://www.youtube.com/watch?v=GoQXOLB50HA https://ptarmiganlabs.com/blog/2016/02/23/esp8266-over-the-air-updating-what-are-the-options/ https://harizanov.com/2015/06/firmware-over-the-air-fota-for-esp8266-soc/ ===== Ejemplo de arduino ===== El ejemplo de github está desactualizado y no funciona, tomado desde el IDE de arduino si funciona. https://github.com/esp8266/Arduino/blob/master/libraries/ArduinoOTA/examples/BasicOTA/BasicOTA.ino Se fusiona el código de OTA con la librería {{https://github.com/tzapu/WiFiManager | WifiManager}} para administrar la configuración a la red. Con este programa y la modificación que se explica abajo en el archivo **platformio.ini** la actualizaciones siguientes del firmware del esp se harán a través de wifi /* * El código de los ejemplos de github es diferente al de el IDE de arduino. El de github no funcionó */ #include #include #include #include #include // https://github.com/tzapu/WiFiManager void setup() { Serial.begin(115200); Serial.println("Booting"); //WiFiManager //Local intialization. Once its business is done, there is no need to keep it around WiFiManager wifiManager; //reset saved settings //wifiManager.resetSettings(); //set custom ip for portal //wifiManager.setAPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0)); //fetches ssid and pass from eeprom and tries to connect //if it does not connect it starts an access point with the specified name //here "AutoConnectAP" //and goes into a blocking loop awaiting configuration wifiManager.autoConnect("AutoConnectAP"); //or use this for auto generated name ESP + ChipID //wifiManager.autoConnect(); //if you get here you have connected to the WiFi Serial.println("connected...yeey :)"); // 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 after OTA desconectado del pc"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void loop() { ArduinoOTA.handle(); } También hay que editar el archivo **platformio.ini** donde se agrega la línea upload_board ; PlatformIO Project Configuration File ; ; Build options: build flags, source filter, extra scripting ; Upload options: custom port, speed and extra flags ; Library options: dependencies, extra library storages ; ; Please visit documentation for the other options and examples ; http://docs.platformio.org/en/stable/projectconf.html [env:esp12e] platform = espressif8266 board = esp12e framework = arduino lib_install = 567 lib_deps = WiFiManager upload_port = 192.168.1.71 ; la ip que me entregó el router de la casa Funciona con platformio no se con arduino cómo sería pero se que también se puede