From 1256612ff826db9a87c7d3efbfa6b2257e57118e Mon Sep 17 00:00:00 2001 From: Youen Toupin Date: Sat, 26 Mar 2022 17:44:30 +0100 Subject: [PATCH] added OTA support for deploying without USB cable --- ESP32/platformio.ini | 2 ++ ESP32/src/OTA.cpp | 65 +++++++++++++++++++++++++++++++++++ ESP32/src/OTA.h | 14 ++++++++ ESP32/src/vehicle-monitor.cpp | 5 +++ 4 files changed, 86 insertions(+) create mode 100644 ESP32/src/OTA.cpp create mode 100644 ESP32/src/OTA.h diff --git a/ESP32/platformio.ini b/ESP32/platformio.ini index 827a3e3..67d99bd 100644 --- a/ESP32/platformio.ini +++ b/ESP32/platformio.ini @@ -13,3 +13,5 @@ platform = espressif32 board = nodemcu-32s framework = arduino monitor_speed = 115200 +upload_protocol = espota +upload_port = 192.168.1.166 diff --git a/ESP32/src/OTA.cpp b/ESP32/src/OTA.cpp new file mode 100644 index 0000000..6d383c6 --- /dev/null +++ b/ESP32/src/OTA.cpp @@ -0,0 +1,65 @@ +#include "OTA.h" + +#include + +detail::OTA OTA; + +namespace detail +{ + OTA::OTA() + { + } + + OTA::~OTA() + { + } + + void OTA::begin() + { + // Port defaults to 3232 + // ArduinoOTA.setPort(3232); + + // Hostname defaults to esp3232-[MAC] + // ArduinoOTA.setHostname("myesp32"); + + // 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); + }) + .onEnd([]() { + Serial.println("\nEnd"); + }) + .onProgress([](unsigned int progress, unsigned int total) { + Serial.printf("Progress: %u%%\r", (progress / (total / 100))); + }) + .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(); + } + + void OTA::handle() + { + ArduinoOTA.handle(); + } +} diff --git a/ESP32/src/OTA.h b/ESP32/src/OTA.h new file mode 100644 index 0000000..33b8604 --- /dev/null +++ b/ESP32/src/OTA.h @@ -0,0 +1,14 @@ +namespace detail +{ + class OTA + { + public: + OTA(); + ~OTA(); + + void begin(); + void handle(); + }; +} + +extern detail::OTA OTA; diff --git a/ESP32/src/vehicle-monitor.cpp b/ESP32/src/vehicle-monitor.cpp index ae8fc0a..b6e1ba0 100644 --- a/ESP32/src/vehicle-monitor.cpp +++ b/ESP32/src/vehicle-monitor.cpp @@ -8,6 +8,7 @@ #include #include "ADC.h" +#include "OTA.h" #include "wifi-credentials.h" @@ -138,6 +139,8 @@ void setup() // Also connect as a station (if the configured remote access point is in range) connectWifi(); + + OTA.begin(); server.on("/api/status", HTTP_GET, [](AsyncWebServerRequest *request){ int v = batteryVoltage; @@ -162,6 +165,8 @@ void setup() void loop() { + OTA.handle(); + wl_status_t newWifiStatus = WiFi.status(); if(newWifiStatus != wifi_STA_status) {