mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-25 20:02:37 +03:00
* A new approach for erasing WiFi Settings Add support for hardware reset function call - simulates EXT_RST via HWDT. Add reset selection to `ESP.eraseConfig()` for calling hardware reset after erasing the WiFi Settings. Update ArduinoOTA to use `ESP.eraseConfig(true)` Externalized `ArduinoOTA.eraseConfigAndReset()` Add OTA examples to illustrate using erase config changes. * style fixed confused example * improve wording * Add new state to retry eraseConfigAndReset * Removed unreachable error test from examples. Removed continuous retry of "eraseConfig" and allow the script to assign an error handling option for "eraseConfig" failure. Update example to use error handling option. * In eboot for function ets_wdt_enable() added missing arguments * Update comments and example * Wording * Rebuilt eboot.elf with current tools from ./get.py * Requested changes. * cleanup comments * Update hardware_reset Avoid using "[[noreturn]]" - not accepted for a .c file function Updated to use __attribute__((noreturn)) to handle both .cpp and .c file functions.
107 lines
3.3 KiB
C++
107 lines
3.3 KiB
C++
/*
|
|
This example is a variation on BasicOTA.
|
|
|
|
As is, this example will "always" erase WiFi Settings and reset after a
|
|
successful update. You can make this conditional.
|
|
*/
|
|
#include <ESP8266WiFi.h>
|
|
#include <ESP8266mDNS.h>
|
|
#include <WiFiUdp.h>
|
|
#include <ArduinoOTA.h>
|
|
|
|
#ifndef STASSID
|
|
#define STASSID "your-ssid"
|
|
#define STAPSK "your-password"
|
|
#endif
|
|
|
|
const char* ssid = STASSID;
|
|
const char* password = STAPSK;
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
Serial.println("Booting");
|
|
Serial.println(String("Reset Reason: ") + ESP.getResetReason());
|
|
|
|
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 8266
|
|
// ArduinoOTA.setPort(8266);
|
|
|
|
// Hostname defaults to esp8266-[ChipID]
|
|
// ArduinoOTA.setHostname("myesp8266");
|
|
|
|
// 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");
|
|
/*
|
|
By calling "ArduinoOTA.setEraseConfig(ArduinoOTA::OTA_ERASE_CFG_ABORT_ON_ERROR),"
|
|
this example will erase the "WiFi Settings" as part of an OTA update. When
|
|
erasing WiFi Settings fails, the OTA Update aborts, and eboot will not
|
|
copy the new ".bin" in place.
|
|
|
|
Without the call to "ArduinoOTA.setEraseConfig" legacy behavior, the
|
|
system restarts without touching the WiFi Settings.
|
|
|
|
Options for "setEraseConfig" to handle eraseConfig failures:
|
|
OTA_ERASE_CFG_NO - Do not erase WiFi Settings
|
|
OTA_ERASE_CFG_IGNORE_ERROR - Ignore the error and continue with update ".bin" copy
|
|
OTA_ERASE_CFG_ABORT_ON_ERROR - Cancel flash update copy at reboot
|
|
|
|
To meet unique requirements, you can make the call below conditional.
|
|
Also, this call could be enabled before ArduinoOTA.onEnd() and canceled
|
|
here with "ArduinoOTA.setEraseConfig(OTA_ERASE_CFG_NO)."
|
|
*/
|
|
ArduinoOTA.setEraseConfig(OTA_ERASE_CFG_ABORT_ON_ERROR);
|
|
});
|
|
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");
|
|
} else if (error == OTA_ERASE_SETTINGS_ERROR) {
|
|
Serial.println("Erase WiFi Settings Failed");
|
|
}
|
|
});
|
|
ArduinoOTA.begin();
|
|
Serial.println("Ready");
|
|
Serial.print("IP address: ");
|
|
Serial.println(WiFi.localIP());
|
|
}
|
|
|
|
void loop() {
|
|
ArduinoOTA.handle();
|
|
}
|