Hello experts,
I am working on a project having ESPAsyncWebserver & uploaded my files in SPIFFS & serving that files to the connected devices using wifi.
The issue here is the ESP is forgetting SPIFFS files & PREFERENCES data after power cut.
I had loaded SPIFFS files using ESP SKETCH data upload tool in Arduino IDE 1.x
Why this might happening?
My compiled binary size is approx 400 kb & SPIFFS Data is not more than 8 kb.
My tools settings:
My code:
type or paste code here#include <ESP8266WiFi.h>
#include "ESPAsyncWebServer.h"
#include "FS.h"
#include <DNSServer.h>
#include <Preferences.h>
#include <RTClib.h>
#include <Wire.h>
#include "var.h"
#include <ArduinoJson.h
RTC_DS1307 rtc;
int relayState = 0;
DNSServer dnsServer;
AsyncWebServer server(80);
Preferences preferences;
DateTime now;
// Replace with your network credentials
const char *ssid = "TimerX";
const char *password = "Password";
void setup() {
Serial.begin(115200);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
if (!SPIFFS.begin()) {
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
IPAddress ip(192, 168, 0, 8);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
WiFi.softAPConfig(ip, gateway, subnet);
WiFi.mode(WIFI_AP);
if (!WiFi.softAP(ssid, password)) {
Serial.println("Failed to set up SoftAP");
return;
}
delay(100);
Serial.println("Access Point IP address: " + WiFi.softAPIP().toString());
// Start DNS server
dnsServer.start(53, "*", WiFi.softAPIP());
server.onNotFound([](AsyncWebServerRequest *request) {
String dta = HmepgHTML(String(now.hour()), String(now.minute()), String(now.second()), String(now.dayOfTheWeek()), String(now.day()), String(now.month()), String(now.year()), relayState);
request->send(200, "text/html", dta);
});
// Route for Home page
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
//HmepgHTML(Hr, Min, Second, Day, Date, Month, Year, Relay State)
String dta = HmepgHTML(String(now.hour()), String(now.minute()), String(now.second()), String(now.dayOfTheWeek()), String(now.day()), String(now.month()), String(now.year()), relayState);
request->send(200, "text/html", dta);
});
// Route for Home page CSS
server.on("/hmStyle.css", HTTP_GET, [](AsyncWebServerRequest *request) {
Serial.println("This ran!!!!!!!!!!!!!!!!!!!!!!!");
request->send(SPIFFS, "/style.css", "text/css");
//request->send(200, "text/css", "dta0");
});
// Route for Home page JS
server.on("/HMscript.js", HTTP_GET, [](AsyncWebServerRequest *request) {
String dta0 = HmJS(getRelStBtnPref());
request->send(200, "application/javascript", dta0);
});
// Route for Sys page
server.on("/Sys", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(SPIFFS, "/Sys/index.html");
});
// Route for Sys page CSS
server.on("/SysStyle.css", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(SPIFFS, "/Sys/style.css");
});
// Route for AddEve page
server.on("/AddEve", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(SPIFFS, "/AddEve/index.html");
});
// Route for AddEve page CSS
server.on("/AddEveStyle.css", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(SPIFFS, "/AddEve/style.css");
});
// Route for ManEve page
server.on("/manEve", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(SPIFFS, "/ManEvn/manEve.html");
});
// Route for ManEve page CSS
server.on("/manEveCss.css", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(SPIFFS, "/ManEvn/manEveCss.css");
});
server.on("/dtTmUpdateRTC", HTTP_GET, dtTmUpdateRTCHandler);
server.on("/RelStBtn", HTTP_GET, RelStBtnHandler);
server.on("/ESecHmDta", HTTP_GET, ESecHmDtaHandler);
server.on("/RelStBtn", HTTP_GET, RelStBtnHandler);
// Start server
server.begin();
}
void loop() {
now = rtc.now();
dnsServer.processNextRequest();
}
void RelStBtnHandler(AsyncWebServerRequest *request) {
// Get formatted time from request body
String Btn = request->arg("Option");
Serial.println("Button Option: " + Btn);
// Send response
request->send(200, "text/plain", "");
preferences.begin("Events", false);
preferences.putString("SelBtnHTML", Btn);
String tester = preferences.getString("SelBtnHTML", "na");
Serial.println("Button Value set to: " + tester);
preferences.end();
}
String getRelStBtnPref() {
preferences.begin("Events", false);
String tester = preferences.getString("SelBtnHTML", "0");
Serial.println("Button Value readed as: " + tester);
preferences.end();
return tester;
}
Why it is happening?
Thanks
--SRJ