Compare commits
6 Commits
d31bff14c3
...
v1.3.99
Author | SHA1 | Date | |
---|---|---|---|
492bf6cdb8 | |||
b0317f4001 | |||
58ff6458b0 | |||
d9c40f5124 | |||
68bc31e29a | |||
9b23ac5fd2 |
10
.github/workflows/gitea-release.yml
vendored
10
.github/workflows/gitea-release.yml
vendored
@ -41,16 +41,16 @@ jobs:
|
||||
run: |
|
||||
VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2)
|
||||
|
||||
# Build firmware and SPIFFS
|
||||
echo "Building firmware and SPIFFS..."
|
||||
# Build firmware and LittleFS
|
||||
echo "Building firmware and LittleFS..."
|
||||
pio run -e esp32dev
|
||||
pio run -t buildfs
|
||||
|
||||
# Copy firmware binary
|
||||
cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/upgrade_filaman_firmware_v${VERSION}.bin
|
||||
|
||||
# Create SPIFFS binary - direct copy without header
|
||||
cp .pio/build/esp32dev/spiffs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
|
||||
# Create LittleFS binary - direct copy without header
|
||||
cp .pio/build/esp32dev/littlefs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
|
||||
|
||||
# Create full binary
|
||||
(cd .pio/build/esp32dev &&
|
||||
@ -63,7 +63,7 @@ jobs:
|
||||
0x1000 bootloader.bin \
|
||||
0x8000 partitions.bin \
|
||||
0x10000 firmware.bin \
|
||||
0x3D0000 spiffs.bin)
|
||||
0x3D0000 littlefs.bin)
|
||||
|
||||
# Verify file sizes
|
||||
echo "File sizes:"
|
||||
|
12
.github/workflows/github-release.yml
vendored
12
.github/workflows/github-release.yml
vendored
@ -39,16 +39,16 @@ jobs:
|
||||
run: |
|
||||
VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2)
|
||||
|
||||
# Always build firmware and SPIFFS
|
||||
echo "Building firmware and SPIFFS..."
|
||||
# Always build firmware and LittleFS
|
||||
echo "Building firmware and LittleFS..."
|
||||
pio run -e esp32dev
|
||||
pio run -t buildfs
|
||||
|
||||
# Copy firmware binary
|
||||
cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/upgrade_filaman_firmware_v${VERSION}.bin
|
||||
|
||||
# Create SPIFFS binary - direct copy without header
|
||||
cp .pio/build/esp32dev/spiffs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
|
||||
# Create LittleFS binary - direct copy without header
|
||||
cp .pio/build/esp32dev/littlefs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
|
||||
|
||||
# Create full binary (always)
|
||||
(cd .pio/build/esp32dev &&
|
||||
@ -61,7 +61,7 @@ jobs:
|
||||
0x1000 bootloader.bin \
|
||||
0x8000 partitions.bin \
|
||||
0x10000 firmware.bin \
|
||||
0x3D0000 spiffs.bin)
|
||||
0x3D0000 littlefs.bin)
|
||||
|
||||
# Verify file sizes
|
||||
echo "File sizes:"
|
||||
@ -131,7 +131,7 @@ jobs:
|
||||
FILES_TO_UPLOAD="$FILES_TO_UPLOAD upgrade_filaman_firmware_v${VERSION}.bin"
|
||||
fi
|
||||
|
||||
# Add SPIFFS and full binary only if they exist
|
||||
# Add LittleFS and full binary only if they exist
|
||||
if [ -f "upgrade_filaman_website_v${VERSION}.bin" ]; then
|
||||
FILES_TO_UPLOAD="$FILES_TO_UPLOAD upgrade_filaman_website_v${VERSION}.bin"
|
||||
fi
|
||||
|
14
CHANGELOG.md
14
CHANGELOG.md
@ -1,5 +1,19 @@
|
||||
# Changelog
|
||||
|
||||
## [1.3.99] - 2025-02-28
|
||||
### Changed
|
||||
- update platformio.ini for version v1.3.99
|
||||
- update workflows to build firmware with LittleFS instead of SPIFFS
|
||||
|
||||
|
||||
## [1.3.98] - 2025-02-28
|
||||
### Changed
|
||||
- update platformio.ini for version v1.3.98
|
||||
- migrate from SPIFFS to LittleFS for file handling
|
||||
- remove unused VSCode settings file
|
||||
- remove commented-out spoolman and filaman data from api.cpp
|
||||
|
||||
|
||||
## [1.3.97] - 2025-02-28
|
||||
### Added
|
||||
- füge Bestätigungsmeldung für Spool-Einstellung hinzu
|
||||
|
@ -9,7 +9,7 @@
|
||||
; https://docs.platformio.org/page/projectconf.html
|
||||
|
||||
[common]
|
||||
version = "1.3.97"
|
||||
version = "1.3.99"
|
||||
##
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
@ -33,7 +33,8 @@ lib_deps =
|
||||
digitaldragon/SSLClient @ ^1.3.2
|
||||
|
||||
; Enable SPIFFS upload
|
||||
board_build.filesystem = spiffs
|
||||
#board_build.filesystem = spiffs
|
||||
board_build.filesystem = littlefs
|
||||
; Update partition settings
|
||||
board_build.partitions = partitions.csv
|
||||
board_upload.flash_size = 4MB
|
||||
@ -44,13 +45,13 @@ build_flags =
|
||||
-Os
|
||||
-ffunction-sections
|
||||
-fdata-sections
|
||||
-DNDEBUG
|
||||
#-DNDEBUG
|
||||
-mtext-section-literals
|
||||
-DVERSION=\"${common.version}\"
|
||||
-DASYNCWEBSERVER_REGEX
|
||||
-DCORE_DEBUG_LEVEL=3
|
||||
#-DCORE_DEBUG_LEVEL=3
|
||||
-DCONFIG_ARDUHAL_LOG_COLORS=1
|
||||
-DOTA_DEBUG=1
|
||||
#-DOTA_DEBUG=1
|
||||
-DCONFIG_OPTIMIZATION_LEVEL_DEBUG=1
|
||||
-DBOOT_APP_PARTITION_OTA_0=1
|
||||
-DCONFIG_LWIP_TCP_MSL=60000
|
||||
|
@ -1,8 +1,8 @@
|
||||
#include "commonFS.h"
|
||||
#include <SPIFFS.h>
|
||||
#include <LittleFS.h>
|
||||
|
||||
bool saveJsonValue(const char* filename, const JsonDocument& doc) {
|
||||
File file = SPIFFS.open(filename, "w");
|
||||
File file = LittleFS.open(filename, "w");
|
||||
if (!file) {
|
||||
Serial.print("Fehler beim Öffnen der Datei zum Schreiben: ");
|
||||
Serial.println(filename);
|
||||
@ -20,7 +20,7 @@ bool saveJsonValue(const char* filename, const JsonDocument& doc) {
|
||||
}
|
||||
|
||||
bool loadJsonValue(const char* filename, JsonDocument& doc) {
|
||||
File file = SPIFFS.open(filename, "r");
|
||||
File file = LittleFS.open(filename, "r");
|
||||
if (!file) {
|
||||
Serial.print("Fehler beim Öffnen der Datei zum Lesen: ");
|
||||
Serial.println(filename);
|
||||
@ -36,12 +36,12 @@ bool loadJsonValue(const char* filename, JsonDocument& doc) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void initializeSPIFFS() {
|
||||
if (!SPIFFS.begin(true, "/spiffs", 10, "spiffs")) {
|
||||
Serial.println("SPIFFS Mount Failed");
|
||||
void initializeFileSystem() {
|
||||
if (!LittleFS.begin(true)) {
|
||||
Serial.println("LittleFS Mount Failed");
|
||||
return;
|
||||
}
|
||||
Serial.printf("SPIFFS Total: %u bytes\n", SPIFFS.totalBytes());
|
||||
Serial.printf("SPIFFS Used: %u bytes\n", SPIFFS.usedBytes());
|
||||
Serial.printf("SPIFFS Free: %u bytes\n", SPIFFS.totalBytes() - SPIFFS.usedBytes());
|
||||
Serial.printf("LittleFS Total: %u bytes\n", LittleFS.totalBytes());
|
||||
Serial.printf("LittleFS Used: %u bytes\n", LittleFS.usedBytes());
|
||||
Serial.printf("LittleFS Free: %u bytes\n", LittleFS.totalBytes() - LittleFS.usedBytes());
|
||||
}
|
@ -2,11 +2,11 @@
|
||||
#define COMMONFS_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <SPIFFS.h>
|
||||
#include <ArduinoJson.h>
|
||||
#include <LittleFS.h>
|
||||
|
||||
bool saveJsonValue(const char* filename, const JsonDocument& doc);
|
||||
bool loadJsonValue(const char* filename, JsonDocument& doc);
|
||||
void initializeSPIFFS();
|
||||
void initializeFileSystem();
|
||||
|
||||
#endif
|
||||
|
61
src/main.cpp
61
src/main.cpp
@ -24,7 +24,7 @@ void setup() {
|
||||
Serial.printf("%08X\n", (uint32_t)chipid); //print Low 4bytes.
|
||||
|
||||
// Initialize SPIFFS
|
||||
initializeSPIFFS();
|
||||
initializeFileSystem();
|
||||
|
||||
// Start Display
|
||||
setupDisplay();
|
||||
@ -74,6 +74,21 @@ void setup() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Safe interval check that handles millis() overflow
|
||||
* @param currentTime Current millis() value
|
||||
* @param lastTime Last recorded time
|
||||
* @param interval Desired interval in milliseconds
|
||||
* @return True if interval has elapsed
|
||||
*/
|
||||
bool intervalElapsed(unsigned long currentTime, unsigned long &lastTime, unsigned long interval) {
|
||||
if (currentTime - lastTime >= interval || currentTime < lastTime) {
|
||||
lastTime = currentTime;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned long lastWeightReadTime = 0;
|
||||
const unsigned long weightReadInterval = 1000; // 1 second
|
||||
|
||||
@ -81,9 +96,6 @@ unsigned long lastAutoSetBambuAmsTime = 0;
|
||||
const unsigned long autoSetBambuAmsInterval = 1000; // 1 second
|
||||
uint8_t autoAmsCounter = 0;
|
||||
|
||||
unsigned long lastAmsSendTime = 0;
|
||||
const unsigned long amsSendInterval = 60000; // 1 minute
|
||||
|
||||
uint8_t weightSend = 0;
|
||||
int16_t lastWeight = 0;
|
||||
|
||||
@ -95,40 +107,33 @@ void loop() {
|
||||
unsigned long currentMillis = millis();
|
||||
|
||||
// Überprüfe regelmäßig die WLAN-Verbindung
|
||||
if (millis() - lastWifiCheckTime > wifiCheckInterval) {
|
||||
if (intervalElapsed(currentMillis, lastWifiCheckTime, wifiCheckInterval)) {
|
||||
checkWiFiConnection();
|
||||
lastWifiCheckTime = millis();
|
||||
}
|
||||
|
||||
// Send AMS Data min every Minute
|
||||
if (currentMillis - lastAmsSendTime >= amsSendInterval)
|
||||
{
|
||||
lastAmsSendTime = currentMillis;
|
||||
//sendAmsData(nullptr);
|
||||
}
|
||||
|
||||
// Wenn Bambu auto set Spool aktiv
|
||||
if (autoSendToBambu && autoSetToBambuSpoolId > 0 && currentMillis - lastAutoSetBambuAmsTime >= autoSetBambuAmsInterval)
|
||||
{
|
||||
if (hasReadRfidTag == 0)
|
||||
if (autoSendToBambu && autoSetToBambuSpoolId > 0) {
|
||||
if (intervalElapsed(currentMillis, lastAutoSetBambuAmsTime, autoSetBambuAmsInterval))
|
||||
{
|
||||
lastAutoSetBambuAmsTime = currentMillis;
|
||||
oledShowMessage("Auto Set " + String(autoSetBambuAmsCounter - autoAmsCounter) + "s");
|
||||
autoAmsCounter++;
|
||||
|
||||
if (autoAmsCounter >= autoSetBambuAmsCounter)
|
||||
if (hasReadRfidTag == 0)
|
||||
{
|
||||
lastAutoSetBambuAmsTime = currentMillis;
|
||||
oledShowMessage("Auto Set " + String(autoSetBambuAmsCounter - autoAmsCounter) + "s");
|
||||
autoAmsCounter++;
|
||||
|
||||
if (autoAmsCounter >= autoSetBambuAmsCounter)
|
||||
{
|
||||
autoSetToBambuSpoolId = 0;
|
||||
autoAmsCounter = 0;
|
||||
oledShowWeight(weight);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
autoSetToBambuSpoolId = 0;
|
||||
autoAmsCounter = 0;
|
||||
oledShowWeight(weight);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
autoAmsCounter = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Wenn Waage nicht Kalibriert
|
||||
if (scaleCalibrated == 3)
|
||||
|
12
src/ota.cpp
12
src/ota.cpp
@ -17,8 +17,8 @@ static bool isSpiffsUpdate = false;
|
||||
|
||||
void backupJsonConfigs() {
|
||||
// Bambu Credentials backup
|
||||
if (SPIFFS.exists("/bambu_credentials.json")) {
|
||||
File file = SPIFFS.open("/bambu_credentials.json", "r");
|
||||
if (LittleFS.exists("/bambu_credentials.json")) {
|
||||
File file = LittleFS.open("/bambu_credentials.json", "r");
|
||||
if (file) {
|
||||
bambuCredentialsBackup = file.readString();
|
||||
file.close();
|
||||
@ -27,8 +27,8 @@ void backupJsonConfigs() {
|
||||
}
|
||||
|
||||
// Spoolman URL backup
|
||||
if (SPIFFS.exists("/spoolman_url.json")) {
|
||||
File file = SPIFFS.open("/spoolman_url.json", "r");
|
||||
if (LittleFS.exists("/spoolman_url.json")) {
|
||||
File file = LittleFS.open("/spoolman_url.json", "r");
|
||||
if (file) {
|
||||
spoolmanUrlBackup = file.readString();
|
||||
file.close();
|
||||
@ -40,7 +40,7 @@ void backupJsonConfigs() {
|
||||
void restoreJsonConfigs() {
|
||||
// Restore Bambu credentials
|
||||
if (bambuCredentialsBackup.length() > 0) {
|
||||
File file = SPIFFS.open("/bambu_credentials.json", "w");
|
||||
File file = LittleFS.open("/bambu_credentials.json", "w");
|
||||
if (file) {
|
||||
file.print(bambuCredentialsBackup);
|
||||
file.close();
|
||||
@ -51,7 +51,7 @@ void restoreJsonConfigs() {
|
||||
|
||||
// Restore Spoolman URL
|
||||
if (spoolmanUrlBackup.length() > 0) {
|
||||
File file = SPIFFS.open("/spoolman_url.json", "w");
|
||||
File file = LittleFS.open("/spoolman_url.json", "w");
|
||||
if (file) {
|
||||
file.print(spoolmanUrlBackup);
|
||||
file.close();
|
||||
|
@ -113,12 +113,12 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventTyp
|
||||
// Funktion zum Laden und Ersetzen des Headers in einer HTML-Datei
|
||||
String loadHtmlWithHeader(const char* filename) {
|
||||
Serial.println("Lade HTML-Datei: " + String(filename));
|
||||
if (!SPIFFS.exists(filename)) {
|
||||
if (!LittleFS.exists(filename)) {
|
||||
Serial.println("Fehler: Datei nicht gefunden!");
|
||||
return "Fehler: Datei nicht gefunden!";
|
||||
}
|
||||
|
||||
File file = SPIFFS.open(filename, "r");
|
||||
File file = LittleFS.open(filename, "r");
|
||||
String html = file.readString();
|
||||
file.close();
|
||||
|
||||
@ -195,7 +195,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
// Route für about
|
||||
server.on("/about", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
Serial.println("Anfrage für /about erhalten");
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/index.html.gz", "text/html");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/index.html.gz", "text/html");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
@ -204,7 +204,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
// Route für Waage
|
||||
server.on("/waage", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
Serial.println("Anfrage für /waage erhalten");
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/waage.html.gz", "text/html");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/waage.html.gz", "text/html");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
@ -213,7 +213,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
// Route für RFID
|
||||
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
Serial.println("Anfrage für /rfid erhalten");
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/rfid.html.gz", "text/html");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/rfid.html.gz", "text/html");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
@ -229,7 +229,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
// Route für WiFi
|
||||
server.on("/wifi", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
Serial.println("Anfrage für /wifi erhalten");
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/wifi.html.gz", "text/html");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/wifi.html.gz", "text/html");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
@ -322,7 +322,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
// Route für das Laden der CSS-Datei
|
||||
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
Serial.println("Lade style.css");
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/style.css.gz", "text/css");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/style.css.gz", "text/css");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
@ -331,7 +331,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
|
||||
// Route für das Logo
|
||||
server.on("/logo.png", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/logo.png.gz", "image/png");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/logo.png.gz", "image/png");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
@ -340,7 +340,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
|
||||
// Route für Favicon
|
||||
server.on("/favicon.ico", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/favicon.ico", "image/x-icon");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/favicon.ico", "image/x-icon");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
Serial.println("favicon.ico gesendet");
|
||||
@ -348,7 +348,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
|
||||
// Route für spool_in.png
|
||||
server.on("/spool_in.png", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/spool_in.png.gz", "image/png");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/spool_in.png.gz", "image/png");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
@ -357,7 +357,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
|
||||
// Route für set_spoolman.png
|
||||
server.on("/set_spoolman.png", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/set_spoolman.png.gz", "image/png");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/set_spoolman.png.gz", "image/png");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
@ -367,7 +367,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
// Route für JavaScript Dateien
|
||||
server.on("/spoolman.js", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
Serial.println("Anfrage für /spoolman.js erhalten");
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/spoolman.js.gz", "text/javascript");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/spoolman.js.gz", "text/javascript");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
@ -376,7 +376,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
|
||||
server.on("/rfid.js", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
Serial.println("Anfrage für /rfid.js erhalten");
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS,"/rfid.js.gz", "text/javascript");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS,"/rfid.js.gz", "text/javascript");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", CACHE_CONTROL);
|
||||
request->send(response);
|
||||
@ -385,7 +385,7 @@ void setupWebserver(AsyncWebServer &server) {
|
||||
|
||||
// Vereinfachter Update-Handler
|
||||
server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||
AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/upgrade.html.gz", "text/html");
|
||||
AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/upgrade.html.gz", "text/html");
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
response->addHeader("Cache-Control", "no-store");
|
||||
request->send(response);
|
||||
|
Reference in New Issue
Block a user