I've been trying to use OTA on several ESP32 projects. The code has always compiled and installed correctly and the devices are visible in the Port tab of the Tools menu tab, however when I try to upload an update, it fails to connect to the device, giving the following message:
Sending invitation to 192.168.2.4
08:47:02 [ERROR]: No response from device
08:47:02 [ERROR]: No response from device
Does anyone know what is happening, and how to resolve it?
Stock standard code from OTA Examples. I wondered if my AP is not allowing the traffic, but thought that anything within the AP network 192.168.x.x would be passed through
// Change to your WiFi credentials
const char* ssid = ".....";
const char* password = "......";
#define LEDpin 2
void setup(){
// Setup needed for OTA
Serial.begin(9600);
Serial.println("\nBooting...");
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 3232
ArduinoOTA.setPort(3232);
// Hostname defaults to esp3232-[MAC]
ArduinoOTA.setHostname("myESP32_Basic_OTA");
// 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_SPIFFS
type = "filesystem";
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.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());
// My setup onwards
pinMode(LEDpin, OUTPUT);
}
void loop() {
ArduinoOTA.handle();
yield();
// Your programme loop from here
digitalWrite(LEDpin, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(LEDpin, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
// End of your programme loop