Files
project-vesper/vesper/ota.hpp

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();
}