OTA update
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
#include <WiFi.h>
|
||||
#include <HTTPClient.h>
|
||||
|
||||
|
||||
// Own libs
|
||||
#include "MockScale.h"
|
||||
#include "Scale.h"
|
||||
@@ -18,12 +17,38 @@
|
||||
#include "WebDAV.h"
|
||||
#include "WebsocketServer.h"
|
||||
|
||||
#include "esp_https_ota.h"
|
||||
|
||||
using Session_T = SimpleMeasurementSession<MeasurementT, CONFIG_SESSION_MAX_SIZE>;
|
||||
SessionManager<Session_T> sessionManager(CONFIG_SCALE_DOUT_PIN, CONFIG_SCALE_SCK_PIN, CONFIG_TARE_AVG_COUNT);
|
||||
|
||||
EspHttp espHttpServer;
|
||||
WebsocketServer<Session_T> webSocketServer(sessionManager, 81);
|
||||
|
||||
extern const uint8_t certificate_pem[] asm("_binary_certificate_pem_start");
|
||||
|
||||
bool firmwareUpdate()
|
||||
{
|
||||
esp_http_client_config_t config;
|
||||
Serial.println((char *)certificate_pem);
|
||||
memset(&config, 0, sizeof(esp_http_client_config_t));
|
||||
config.url = "https://swimtracker-update.bauer.tech/firmware.bin";
|
||||
config.cert_pem = (char *)certificate_pem;
|
||||
Serial.println("Starting firmware upgrade");
|
||||
esp_err_t ret = esp_https_ota(&config);
|
||||
if (ret == ESP_OK)
|
||||
{
|
||||
Serial.println("Firmware upgrade successful - restarting");
|
||||
esp_restart();
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.println("Firmware upgrade failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
template <typename SessionT>
|
||||
void httpSetup(SessionManager<SessionT> *sessionManager)
|
||||
{
|
||||
@@ -47,6 +72,11 @@ void httpSetup(SessionManager<SessionT> *sessionManager)
|
||||
Serial.println("Tare");
|
||||
sessionManager->tare();
|
||||
};
|
||||
auto cbFirmwareUpdate = [](httpd_req_t * req) {
|
||||
httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
|
||||
httpd_resp_send(req, "OK", -1);
|
||||
firmwareUpdate();
|
||||
};
|
||||
auto cbStatus = [sessionManager](httpd_req_t *req) {
|
||||
String result;
|
||||
result.reserve(512);
|
||||
@@ -132,13 +162,39 @@ void httpSetup(SessionManager<SessionT> *sessionManager)
|
||||
espHttpServer.on("/api/status", HTTP_GET, cbStatus);
|
||||
espHttpServer.on("/api/tare", HTTP_GET, cbTare);
|
||||
espHttpServer.on("/api/restart", HTTP_GET, cbRestart);
|
||||
espHttpServer.on("/api/firmwareupdate", HTTP_GET, cbFirmwareUpdate);
|
||||
|
||||
auto webdav = webdavHandler("/webdav/", "/dat");
|
||||
espHttpServer.on("/webdav/*?", HTTP_GET, webdav);
|
||||
espHttpServer.on("/webdav/*?", HTTP_PROPFIND, webdav);
|
||||
espHttpServer.on("/webdav/*?", HTTP_DELETE, webdav);
|
||||
espHttpServer.on("/webdav/*?", HTTP_OPTIONS, webdav);
|
||||
|
||||
Serial.println("HTTP setup done");
|
||||
}
|
||||
|
||||
void checkWifi()
|
||||
{
|
||||
while (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
Serial.println("WiFi disconnected. Try to reconnect");
|
||||
WiFi.disconnect();
|
||||
WiFi.mode(WIFI_OFF);
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(CONFIG_WIFI_SSID, CONFIG_WIFI_PASSWORD);
|
||||
delay(200);
|
||||
}
|
||||
}
|
||||
|
||||
String getIdSuffix()
|
||||
{
|
||||
uint8_t baseMac[6];
|
||||
esp_read_mac(baseMac, ESP_MAC_WIFI_STA);
|
||||
char baseMacChr[18] = {0};
|
||||
sprintf(baseMacChr, "-%02X%02X%02X", baseMac[3], baseMac[4], baseMac[5]);
|
||||
return String(baseMacChr);
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
// Serial
|
||||
@@ -158,7 +214,8 @@ void setup()
|
||||
// WiFi
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(CONFIG_WIFI_SSID, CONFIG_WIFI_PASSWORD);
|
||||
WiFi.setHostname(CONFIG_HOSTNAME);
|
||||
String fullHostname = String(CONFIG_HOSTNAME) + getIdSuffix();
|
||||
WiFi.setHostname(fullHostname.c_str());
|
||||
Serial.println(F("Waiting for WIFI connection..."));
|
||||
int connectCounter = 0;
|
||||
while (WiFi.status() != WL_CONNECTED)
|
||||
@@ -173,7 +230,8 @@ void setup()
|
||||
}
|
||||
Serial.print("Connected to WiFi. IP:");
|
||||
Serial.println(WiFi.localIP());
|
||||
|
||||
|
||||
Serial.println("Running version 1"); // todo
|
||||
// Session
|
||||
sessionManager.begin();
|
||||
|
||||
@@ -189,4 +247,5 @@ void loop()
|
||||
{
|
||||
sessionManager.iteration();
|
||||
webSocketServer.iteration();
|
||||
checkWifi();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user