ESP8266 Nodemcu EEPROM

Hallo Leute

vor einiger zeit habt ihr mir ja schon mit meiner HTML Eingabeaufforderung für meine Lichtschranke geholfen.
Nun habe ich gemerkt sobald der Strom mal weg ist(was beim Elektriker ja mal öfter vorkommt :smiling_imp:) sind ja auch die Einstellungen weg. Hmm doof…
Dann habe ich das mal mit dem Arduino UNO mal das mit dem Lesen und schreiben ausprobiert und es klappte auf Anhieb.
Hab mich schon gefeiert, denn das klappt ja sonst nie.
So dann hab ich das mit dem Nodemcu mal ausprobiert und natürlich ging nix.
Im Internet schlau bzw Dumm gelesen und nix verstanden.
20000 Grundverschiedene Beispiele und irgendwie hab ich es nicht geschafft diese auf mein Problem zurechtzuschneiden.
Dann habe ich mich daran Erinnert das es doch direkt in der Arduino IDE auch Beispiele gibt.
Es gibt dort jeweils zum lesen und zum schreiben einen Sketch.
Für den Arduino und auch für den ESP.
Das Beispiel für den Arduino läuft auch wiedermal einwandfrei.
Doch bei dem Beispiel für den ESP schreibe ich jede Sekunde eine 5 in die nächste Adresse vom ESP beim Lesen kommt aber statt 5:
48,51,52,50,51,55,99,100,100,49 usw. raus.
Woran liegt das?
Ach ja und kann mal jemand verraten, die ich den Sketch einfach in fo einen schönen Kasten anhängen kann?
Danke für die Tipps schon mal in Voraus

Gruß Daniel

eeprom_read.ino (956 Bytes)

eeprom_write.ino (620 Bytes)

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).

Der EEPROM auf dem ESP8266 ist nur eine Emulation im Flash.
Du kannst wesentlich komfortabler SPIFFS benutzen.

Gruß Tommy

Danke erstmal Tommy

Was genau ist denn SPIFFS ?

Du hast mal in nen anderen Post mal die Doku zu SPIFFS gepostet. der Link funktioniert aber leider nicht
mehr.

Gruß Daniel

Hier erst mal die grundlegenden Infos.

Ansonsten die Verwaltungstools von mir und von Fips

SPIFFS wird wie ein Filesystem angesprochen.

Gruß Tommy

Schmittchen:
Doch bei dem Beispiel für den ESP schreibe ich jede Sekunde eine 5 in die nächste Adresse vom ESP beim Lesen kommt aber statt 5:
48,51,52,50,51,55,99,100,100,49 usw. raus.
Woran liegt das?
Ach ja und kann mal jemand verraten, die ich den Sketch einfach in fo einen schönen Kasten anhängen kann?
Danke für die Tipps schon mal in Voraus

Gruß Daniel

hast du den write sketch mindestens 512 Sekunden laufen lassen? denn du beschreibst jede Adresse in einem Sekunden Abstand, 512 Sekunden ist schon eine weile.

Ich habe mir nun mit anhand von Beispielen SPIFFS in meinen Sketch eingebunden.
Leider kommen auch hier beim auslesen andere Zahlen bei raus, wie beim einlesen.
Was mache ich falsch?
Der Code:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <FS.h>
#include "index.h" //Our HTML webpage conten

//SSID and Password to your ESP Access Point
const char* ssid = "Lichtschranke Stall 1";
const char* password = "12345678";
const char* filename0 = "/file.txt";
const char* filename1 = "/file1.txt";
int Eingang;
int Ausgang;
int NockeAusloestzeit = 0;
int Ausloestzeit = 0;
int NockeLaufzeit = 0;
int Laufzeit = 0;

ESP8266WebServer server(80); //Server on port 80

//==============================================================
//     This rutine is exicuted when you open its IP in browser
//==============================================================
void handleRoot() {
  String s = MAIN_page; //Read HTML contents

  server.send(200, "text/html", s); //Send web page
}

void handleLicht()  {
  if (server.arg("Laufzeit").toInt() >= 1)
  { File f = SPIFFS.open(filename0, "w");
    Laufzeit = server.arg("Laufzeit").toInt();
    f.print(Laufzeit);
    f.close();


  }

  if (server.arg("Ausloesezeit").toInt() >= 1)
  { File a = SPIFFS.open(filename1, "w");
    Ausloestzeit = server.arg("Ausloesezeit").toInt();
    a.print(Ausloestzeit);
    a.close();

  }
  String s = MAIN_page; //Read HTML contents
  server.send(200, "text/html", s); //Send web page
}
//===============================================================
//                  SETUP
//===============================================================
void setup(void) {
  Serial.begin(9600);
  SPIFFS.begin ();
  Serial.println("");
  WiFi.mode(WIFI_AP);           //Only Access point
  WiFi.softAP(ssid, password);  //Start HOTspot removing password will disable security

  IPAddress myIP = WiFi.softAPIP(); //Get IP address
  Serial.print("HotSpt IP:");
  Serial.println(myIP);

  server.on("/", handleRoot);      //Which routine to handle at root location

  server.begin();                  //Start server
  Serial.println("HTTP server started");
  pinMode (D1, INPUT);
  pinMode (16, OUTPUT);
  server.on("/", HTTP_GET, handleRoot);        // Rufen Sie die Funktion 'handleRoot' auf, wenn ein Client den URI "/" anfordert
  server.on("/licht", HTTP_POST, handleLicht); // Rufen Sie die Funktion 'handleLogin' auf, wenn eine POST-Anfrage an den URI "/ login" gestellt wird

  File f = SPIFFS.open(filename0, "r");
  Laufzeit = (int)f.read();
  f.close();
  File a = SPIFFS.open(filename1, "r");
  Ausloestzeit = (int)a.read();
  a.close();

}
//===============================================================
//                     LOOP
//===============================================================
void loop(void) {
  server.handleClient();          //Handle client requests

  Eingang = digitalRead(D1);

  File f = SPIFFS.open(filename0, "r");
  Serial.print("Laufzeit:");
  Serial.println((int)f.read());
  f.close();

  File a = SPIFFS.open(filename1, "r");
  Serial.print("Ausloestzeit:");
  Serial.println((int)f.read());
  f.close();

  if (Eingang == 0)
  {
    NockeAusloestzeit = millis();
  }

  if (NockeAusloestzeit + Ausloestzeit <= millis())
  {
    NockeLaufzeit = millis();
    Ausgang = 0;
  }

  if (NockeLaufzeit + Laufzeit <= millis())
  {
    Ausgang = 1;
  }

  digitalWrite(16, Ausgang);
}

und hier die index.h Datei:

const char MAIN_page[] PROGMEM = R"=====(
<html>
<head>
    <title>Lichtschranke Stall 1</title>
    <meta name="description" content="Beschreibung der Seite">

<style type="text/css">
    html, body { background-color:#fff; font-weight:bold; font-family:Arial; font-size:120%; height:100%; margin:0; padding:0;}
    body {
        min-width:1000px;
    }
    #untenlinks {
        float:left;
    background-color:#EEEEEE;
        width:485px;
        height:232px;
    }
  #untenrechts {
        float:right;
    background-color:#EEEEEE;
        width:485px;
        height:232px;
    }
</style>

</head>

<body> 
<div id="OBEN" style="width: 970px; height: 28px; background: #005393;">                                                  
</div>



  <div id="mitte" style="width: 970px; height: 1100px; background: #C5DBEA;">



<fieldset>
<legend>Einstellungen</legend>
<form action="licht" method="POST">
<font size="10">
<label for="Laufzeit">Laufzeit:  </label>
<input type="number" style="font-size:60px;" id="Laufzeit" name="Laufzeit" value="Laufzeit" min="0" max="100" /> <span class="validity"></span> <b>min</b>


<label for="Ausloesezeit">Auslösezeit:  </label>
<input type="number" style="font-size:60px;" id="Ausloesezeit" name="Ausloesezeit" placeholder="ms" min="0" max="100" /> <span class="validity"></span> <b>ms</b>














 <center><button type="submit" style="font-size:60px;width:900px; height:100px; id="Übernehmen">Übernehmen</button></center>

</form>
</fieldset>
 </div>
       <div id=untenrechts>

    </div>
       <div id=untenlinks>

    </div>
</body>
</html>
)=====";

Gruß Daniel

Hast Du Dir mit einem unserer Tools mal die Datei herunter geladen und angeschaut?

Gruß Tommy

Schmittchen:
Leider kommen auch hier beim auslesen andere Zahlen bei raus, wie beim einlesen.
Was mache ich falsch?

Deine Eingaben werden richtig geschrieben!
Das einlesen ist verkehrt.
Du willst int einlesen.

parseInt();

void handleLicht()  {
  if (server.arg("Laufzeit").toInt() >= 1)
  { File f = SPIFFS.open("/file.txt", "w");
    f.printf("%s\n%s\n", server.arg("Laufzeit").c_str(), server.arg("Ausloesezeit").c_str());
    f.close();
  }
  String s = MAIN_page; //Read HTML contents
  server.send(200, "text/html", s); //Send web page
}


  File f = SPIFFS.open("/file.txt", "r");
  Laufzeit = f.parseInt();
  Ausloestzeit = f.parseInt();
  f.close();
  Serial.printf("Laufzeit: %d\nAuslöstzeit: %d\n", Laufzeit, Ausloestzeit);

Gruß Fips