Browse Source

Adding OTA-support via webGUI

master
Torsten Stauder 4 years ago
parent
commit
38ee801432
  1. 2
      README.md
  2. 1
      changelog.md
  3. 12
      html/management_DE.html
  4. 12
      html/management_EN.html
  5. 1
      platformio.ini
  6. 12
      src/HTMLmanagement_DE.h
  7. 12
      src/HTMLmanagement_EN.h
  8. 5
      src/LogMessages_DE.cpp
  9. 5
      src/LogMessages_EN.cpp
  10. 31
      src/Web.cpp
  11. 4
      src/logmessages.h
  12. 2
      src/main.cpp

2
README.md

@ -13,9 +13,9 @@ I started this project back in october 2019 and never expected it to become that
* Partition-layout for ESP32 is changed along with this branch. This step was necessary in order to resize (enlarge) the memory-region where especially the assignments for the RFID-tags are saved. As all permanent settings (e.g. WiFi-settings) are saved there too, it's necessary to re-enter WiFi-credentials after update. But the most important thing is to recover the assignments for the RFID-tags. Please consult my [migration-document](https://forum.espuino.de/t/wechsel-zum-refactoring-branch-was-ist-zu-beachten/510). * Partition-layout for ESP32 is changed along with this branch. This step was necessary in order to resize (enlarge) the memory-region where especially the assignments for the RFID-tags are saved. As all permanent settings (e.g. WiFi-settings) are saved there too, it's necessary to re-enter WiFi-credentials after update. But the most important thing is to recover the assignments for the RFID-tags. Please consult my [migration-document](https://forum.espuino.de/t/wechsel-zum-refactoring-branch-was-ist-zu-beachten/510).
## Changelog ## Changelog
Last three events: Last three events:
* 13.07.2021: Adding OTA-support via webGUI
* 09.07.2021: Making branch `refactoring` the new master * 09.07.2021: Making branch `refactoring` the new master
* 09.07.2021: Making master new branch `old` (not maintained any longer!) * 09.07.2021: Making master new branch `old` (not maintained any longer!)
* 08.07.2021: Added support to monitor WiFi's RSSI
## Known bugs ## Known bugs
* Some webstreams don't run. Guess it's a combination of saturated connection-pool and lack of heap-memory. Works probably better if ESP32-WROVER (e.g. Lolin D32 pro) is used, as this chip has PSRAM. Advice: Don't enable modules (e.g. MQTT) if you don't need them as this could save memory (and trouble). * Some webstreams don't run. Guess it's a combination of saturated connection-pool and lack of heap-memory. Works probably better if ESP32-WROVER (e.g. Lolin D32 pro) is used, as this chip has PSRAM. Advice: Don't enable modules (e.g. MQTT) if you don't need them as this could save memory (and trouble).
## ESPuino - what's that? ## ESPuino - what's that?

1
changelog.md

@ -8,6 +8,7 @@
* 08.07.2021: Added support to monitor WiFi's RSSI * 08.07.2021: Added support to monitor WiFi's RSSI
* 09.07.2021: Making branch `refactoring` the the master * 09.07.2021: Making branch `refactoring` the the master
* 09.07.2021: Making master the new branch `old` (not maintained any longer!) * 09.07.2021: Making master the new branch `old` (not maintained any longer!)
* 13.07.2021: Adding OTA-support via webGUI
## Old (monolithic main.cpp) ## Old (monolithic main.cpp)
* 11.07.2020: Added support for reversed Neopixel addressing. * 11.07.2020: Added support for reversed Neopixel addressing.

12
html/management_DE.html

@ -484,6 +484,18 @@
</form> </form>
</div> </div>
</div> </div>
<br />
<br />
<div class="container" id="httpUpdate">
<legend>Firmware-Update</legend>
<form action="/update" enctype="multipart/form-data" method="POST">
<div class="form-group">
<label for="firmwareUpload">Hier kann ein Firmware-Update durchgeführt werden.</label>
<input type="file" class="form-control-file" id="firmwareUpload" name="firmwareUpload" accept=".bin">
</div>
<button type="submit" class="btn btn-primary">Absenden</button>
</form>
</div>
<div class="tab-pane fade" id="nav-forum" role="tabpanel" aria-labelledby="nav-forum-tab"> <div class="tab-pane fade" id="nav-forum" role="tabpanel" aria-labelledby="nav-forum-tab">
<div class="container" id="forum"> <div class="container" id="forum">
<legend>Forum</legend> <legend>Forum</legend>

12
html/management_EN.html

@ -484,6 +484,18 @@
</form> </form>
</div> </div>
</div> </div>
<br />
<br />
<div class="container" id="httpUpdate">
<legend>Firmware Update</legend>
<form action="/update" enctype="multipart/form-data" method="POST">
<div class="form-group">
<label for="firmwareUpload">Firmware can be updated right here.</label>
<input type="file" class="form-control-file" id="firmwareUpload" name="firmwareUpload" accept=".bin">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
<div class="tab-pane fade" id="nav-forum" role="tabpanel" aria-labelledby="nav-forum-tab"> <div class="tab-pane fade" id="nav-forum" role="tabpanel" aria-labelledby="nav-forum-tab">
<div class="container" id="forum"> <div class="container" id="forum">
<legend>Forum</legend> <legend>Forum</legend>

1
platformio.ini

@ -113,6 +113,7 @@ build_flags = -DHAL=4
-DBOARD_HAS_PSRAM -DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-issue
-DLOG_BUFFER_SIZE=10240 -DLOG_BUFFER_SIZE=10240
-DBOARD_HAS_16MB_FLASH_AND_OTA_SUPPORT
platform_packages = platform_packages =
platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#1.0.5 platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#1.0.5
board_upload.maximum_size = 16777216 board_upload.maximum_size = 16777216

12
src/HTMLmanagement_DE.h

@ -484,6 +484,18 @@ static const char management_HTML[] PROGMEM = "<!DOCTYPE html>\
</form>\ </form>\
</div>\ </div>\
</div>\ </div>\
<br />\
<br />\
<div class=\"container\" id=\"httpUpdate\">\
<legend>Firmware-Update</legend>\
<form action=\"/update\" enctype=\"multipart/form-data\" method=\"POST\">\
<div class=\"form-group\">\
<label for=\"firmwareUpload\">Hier kann ein Firmware-Update durchgeführt werden.</label>\
<input type=\"file\" class=\"form-control-file\" id=\"firmwareUpload\" name=\"firmwareUpload\" accept=\".bin\">\
</div>\
<button type=\"submit\" class=\"btn btn-primary\">Absenden</button>\
</form>\
</div>\
<div class=\"tab-pane fade\" id=\"nav-forum\" role=\"tabpanel\" aria-labelledby=\"nav-forum-tab\">\ <div class=\"tab-pane fade\" id=\"nav-forum\" role=\"tabpanel\" aria-labelledby=\"nav-forum-tab\">\
<div class=\"container\" id=\"forum\">\ <div class=\"container\" id=\"forum\">\
<legend>Forum</legend>\ <legend>Forum</legend>\

12
src/HTMLmanagement_EN.h

@ -484,6 +484,18 @@ static const char management_HTML[] PROGMEM = "<!DOCTYPE html>\
</form>\ </form>\
</div>\ </div>\
</div>\ </div>\
<br />\
<br />\
<div class=\"container\" id=\"httpUpdate\">\
<legend>Firmware Update</legend>\
<form action=\"/update\" enctype=\"multipart/form-data\" method=\"POST\">\
<div class=\"form-group\">\
<label for=\"firmwareUpload\">Firmware can be updated right here.</label>\
<input type=\"file\" class=\"form-control-file\" id=\"firmwareUpload\" name=\"firmwareUpload\" accept=\".bin\">\
</div>\
<button type=\"submit\" class=\"btn btn-primary\">Submit</button>\
</form>\
</div>\
<div class=\"tab-pane fade\" id=\"nav-forum\" role=\"tabpanel\" aria-labelledby=\"nav-forum-tab\">\ <div class=\"tab-pane fade\" id=\"nav-forum\" role=\"tabpanel\" aria-labelledby=\"nav-forum-tab\">\
<div class=\"container\" id=\"forum\">\ <div class=\"container\" id=\"forum\">\
<legend>Forum</legend>\ <legend>Forum</legend>\

5
src/LogMessages_DE.cpp

@ -200,4 +200,9 @@
const char eraseRfidNvsWeb[] PROGMEM = "<p>Die NVS-RFID-Zuweisungen werden gel&ouml;scht...<br />Zur letzten Seite <a href=\"javascript:history.back()\">zur&uuml;ckkehren</a>.</p>"; const char eraseRfidNvsWeb[] PROGMEM = "<p>Die NVS-RFID-Zuweisungen werden gel&ouml;scht...<br />Zur letzten Seite <a href=\"javascript:history.back()\">zur&uuml;ckkehren</a>.</p>";
const char eraseRfidNvs[] PROGMEM = "NVS-RFID-Zuweisungen werden gelöscht..."; const char eraseRfidNvs[] PROGMEM = "NVS-RFID-Zuweisungen werden gelöscht...";
const char erasePlaylistCachefile[] PROGMEM = "Playlist-Cachefile gelöscht"; const char erasePlaylistCachefile[] PROGMEM = "Playlist-Cachefile gelöscht";
const char fwStart[] PROGMEM = "Starte Firmware-update via OTA...";
const char fwEnd[] PROGMEM = "Firmware-update beendet";
const char otaNotSupported[] PROGMEM = "Firmware-update wird von diesem ESPuino nicht unterstuetzt!";
const char otaNotSupportedWebsite[] PROGMEM = "<p>Firmware-update wird von diesem ESPuino nicht unterstuetzt!<br />Zur letzten Seite <a href=\"javascript:history.back()\">zur&uuml;ckkehren</a>.</p>";
#endif #endif

5
src/LogMessages_EN.cpp

@ -200,4 +200,9 @@
const char eraseRfidNvsWeb[] PROGMEM = "<p>NVS-RFID-assignments are being deleted...<br />Back to <a href=\"javascript:history.back()\">last page</a>.</p>"; const char eraseRfidNvsWeb[] PROGMEM = "<p>NVS-RFID-assignments are being deleted...<br />Back to <a href=\"javascript:history.back()\">last page</a>.</p>";
const char eraseRfidNvs[] PROGMEM = "NVS-RFID-assignments are being deleted..."; const char eraseRfidNvs[] PROGMEM = "NVS-RFID-assignments are being deleted...";
const char erasePlaylistCachefile[] PROGMEM = "Playlist-cachefile deleted"; const char erasePlaylistCachefile[] PROGMEM = "Playlist-cachefile deleted";
const char fwStart[] PROGMEM = "Starting firmware-update via OTA...";
const char fwEnd[] PROGMEM = "Firmware-update finished";
const char otaNotSupported[] PROGMEM = "Firmware-update isn't supported by this ESPuino!";
const char otaNotSupportedWebsite[] PROGMEM = "<p>FFirmware-update isn't supported by this ESPuino!<br />Back to <a href=\"javascript:history.back()\">last page</a>.</p>";
#endif #endif

31
src/Web.cpp

@ -1,5 +1,6 @@
#include <Arduino.h> #include <Arduino.h>
#include <WiFi.h> #include <WiFi.h>
#include <Update.h>
#include <nvsDump.h> #include <nvsDump.h>
#include <esp_task_wdt.h> #include <esp_task_wdt.h>
#include "freertos/ringbuf.h" #include "freertos/ringbuf.h"
@ -179,6 +180,36 @@ void webserverStart(void) {
}, },
handleUpload); handleUpload);
// OTA-upload
wServer.on(
"/update", HTTP_POST, [](AsyncWebServerRequest *request) {
#ifdef BOARD_HAS_16MB_FLASH_AND_OTA_SUPPORT
request->send(200, "text/html", restartWebsite); },
#else
request->send(200, "text/html", otaNotSupportedWebsite); },
#endif
[](AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
#ifndef BOARD_HAS_16MB_FLASH_AND_OTA_SUPPORT
Log_Println((char *) FPSTR(otaNotSupported), LOGLEVEL_NOTICE);
return;
#endif
if (!index) {
Update.begin();
Log_Println((char *) FPSTR(fwStart), LOGLEVEL_NOTICE);
}
Update.write(data, len);
Serial.print(".");
if (final) {
Update.end(true);
Log_Println((char *) FPSTR(fwEnd), LOGLEVEL_NOTICE);
Serial.flush();
ESP.restart();
}
});
// ESP-restart // ESP-restart
wServer.on("/restart", HTTP_GET, [](AsyncWebServerRequest *request) { wServer.on("/restart", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send_P(200, "text/html", restartWebsite); request->send_P(200, "text/html", restartWebsite);

4
src/logmessages.h

@ -196,3 +196,7 @@ extern const char errorWritingTmpfile[];
extern const char eraseRfidNvsWeb[]; extern const char eraseRfidNvsWeb[];
extern const char eraseRfidNvs[]; extern const char eraseRfidNvs[];
extern const char erasePlaylistCachefile[]; extern const char erasePlaylistCachefile[];
extern const char fwStart[];
extern const char fwEnd[];
extern const char otaNotSupported[];
extern const char otaNotSupportedWebsite[];

2
src/main.cpp

@ -184,7 +184,7 @@ void setup() {
Serial.println(F(" | |___ ___) | | __/ | |_| | | | | | | | | (_) |")); Serial.println(F(" | |___ ___) | | __/ | |_| | | | | | | | | (_) |"));
Serial.println(F(" |_____| |____/ |_| \\__,_| |_| |_| |_| \\___/ ")); Serial.println(F(" |_____| |____/ |_| \\__,_| |_| |_| |_| \\___/ "));
Serial.println(F(" Rfid-controlled musicplayer\n")); Serial.println(F(" Rfid-controlled musicplayer\n"));
Serial.println(F(" Rev 20210712-1\n"));
Serial.println(F(" Rev 20210713-1\n"));
// print wake-up reason // print wake-up reason
printWakeUpReason(); printWakeUpReason();

Loading…
Cancel
Save