66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
void checkForUpdates();
|
|
void performOTA();
|
|
|
|
void checkForUpdates() {
|
|
Serial.println("Checking for firmware updates...");
|
|
|
|
// Step 1: Check the current version on the server
|
|
HTTPClient http;
|
|
http.begin(versionUrl);
|
|
int httpCode = http.GET();
|
|
|
|
if (httpCode == HTTP_CODE_OK) {
|
|
String newVersionStr = http.getString();
|
|
float newVersion = newVersionStr.toFloat();
|
|
|
|
Serial.printf("Current version: %.1f, Available version: %.1f\n", currentVersion, newVersion);
|
|
|
|
// Step 2: Compare the version
|
|
if (newVersion > currentVersion) {
|
|
Serial.println("New version available. Starting update...");
|
|
performOTA(); // Perform the OTA update if a new version is found
|
|
} else {
|
|
Serial.println("No new version available.");
|
|
}
|
|
} else {
|
|
Serial.printf("Failed to retrieve version. HTTP error code: %d\n", httpCode);
|
|
}
|
|
http.end();
|
|
}
|
|
|
|
void performOTA() {
|
|
HTTPClient http;
|
|
http.begin(firmwareUrl);
|
|
int httpCode = http.GET();
|
|
|
|
if (httpCode == HTTP_CODE_OK) {
|
|
int contentLength = http.getSize();
|
|
if (contentLength > 0) {
|
|
bool canBegin = Update.begin(contentLength);
|
|
if (canBegin) {
|
|
Serial.println("Starting OTA update...");
|
|
WiFiClient *client = http.getStreamPtr();
|
|
size_t written = Update.writeStream(*client);
|
|
if (written == contentLength) {
|
|
Serial.println("Update complete");
|
|
if (Update.end()) {
|
|
Serial.println("Update successfully finished. Rebooting...");
|
|
ESP.restart(); // Reboot to apply the update
|
|
} else {
|
|
Serial.printf("Update failed: %s\n", Update.errorString());
|
|
}
|
|
} else {
|
|
Serial.println("Update failed: Written size mismatch.");
|
|
}
|
|
} else {
|
|
Serial.println("Not enough space for update.");
|
|
}
|
|
} else {
|
|
Serial.println("Firmware file is empty.");
|
|
}
|
|
} else {
|
|
Serial.printf("Firmware HTTP error code: %d\n", httpCode);
|
|
}
|
|
http.end();
|
|
}
|