ESP8266 - OTA - error: exit status 1

I'm trying to configure OTA on an ESP8266 but I can't. I've tried several tutorials on the net and none works.

The sketch I'm using is as follows:

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

#ifndef STASSID
#define STASSID "xxx"
#define STAPSK  "xxx"
#endif

const char* ssid = STASSID;
const char* password = STAPSK;
ESP8266WebServer server;

bool ota_flag = true;
uint16_t time_elapsed = 0;

void setup() {
  pinMode(2, OUTPUT);
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("A conexão falhou! Reiniciando...");
    delay(5000);
    ESP.restart();
  }

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

  // No authentication by default
  // ArduinoOTA.setPassword("admin");

  // Password can be set with it's md5 value as well
  // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
  // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH) {
      type = "sketch";
    } else { // U_FS
      type = "filesystem";
    }

    // NOTE: if updating FS this would be the place to unmount FS using FS.end()
    Serial.println("Start updating " + type);
  });
  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());

  server.on("/restart",[](){
    server.send(200,"text/plain", "Restarting...");
    delay(1000);
    ESP.restart();
  });

  server.on("/setFlag",[](){
    server.send(200,"text/plain", "Setting flag...");
    ota_flag = true;
    time_elapsed = 0;
  });
      
  server.begin();
}

void loop() {
if(ota_flag)
{
  uint16_t time_start = millis();
  while(time_elapsed < 15000)
  {
    ArduinoOTA.handle();
    time_elapsed = millis()-time_start;
    delay(10);
  }
  ota_flag = false;
}
  server.handleClient();
  digitalWrite(2, !digitalRead(2));
  delay(100);
}

The error message is not very helpful:

Executable segment sizes:

ICACHE : 32768           - flash instruction cache 

IROM   : 299756          - code in flash         (default or ICACHE_FLASH_ATTR) 

IRAM   : 27900   / 32768 - code in IRAM          (IRAM_ATTR, ISRs...) 

DATA   : 1508  )         - initialized variables (global, static) in RAM/HEAP 

RODATA : 1480  ) / 81920 - constants             (global, static) in RAM/HEAP 

BSS    : 26328 )         - zeroed variables      (global, static) in RAM/HEAP 

Sketch uses 330644 bytes (31%) of program storage space. Maximum is 1044464 bytes.
Global variables use 29316 bytes (35%) of dynamic memory, leaving 52604 bytes for local variables. Maximum is 81920 bytes.
"C:\Users\mvrin\AppData\Local\Arduino15\packages\esp8266\tools\python3\3.7.2-post1/python3" -I "C:\Users\mvrin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/espota.py" -i "192.168.68.105" -p "8266" "--auth=controleeladeira" -f "C:\Users\mvrin\AppData\Local\Temp\arduino-sketch-530AD6D38B059906AB54EE36C0795F3A/simpleOTA.ino.bin"
14:31:57 [ERROR]: No Answer
Failed uploading: uploading error: exit status 1

Can anyone help me?

the basic OTA example works?

Does not work.

try temporarily turn off the firewall on PC

After uploading the code for the first time via Serial, it is needed to 'Hard' reset the ESP (to take it out of the upload boot mode). Have you done that ?
This is assuming that the port shows up correctly in the IDE.
also i would simplify the loop() to just

void loop() {
  ArduinoOTA.handle();
  server.handleClient();
  digitalWrite(2, (millis() / 300) % 2);
}

@Deva_Rishi we already know it it is "No answer" for BasicOTA
the boot mode problem is after reset after successful upload

No. The boot mode problem is after a successful upload over Serial followed by an OTA upload. in between there needs to be a 'hard-reset' If there is no successful upload over Serial, that is a completely different matter.
After Serial upload, the ESP does a soft reset and the sketch will run, but any attempt at doing an OTA will result in 'no answer' until a hard reset has been performed.

You hadn't mentioned it and it's a very common mistake. Still happens to me during development.
I upload via UNO's Serial, leave the unit powered and try to upload the next update via OTA cause it's quicker, and then i get no answer.

If the port shows up in the IDE, mDNS service is working correctly. There could be a firewall issue, i agree.

I didn't do the hard reset!! I will try this. I'll also try to turn off the firewall!! Unfortunately, only tonight.

Anyway, the port appears in the IDE.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.