Problem with Nodemcu storage

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

Your return in setup() will immediately go to loop(). Is this what you really want to happen?

1 Like

It is when the SPIFFS or WIFI begin is failed....

I don't think it matters...

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.