EEPROM Sketch funktioniert mit NANO aber nicht mit ESP8266

Hallo zusammen,

ich steh mal wieder auf dem Schlauch.

Hab mir einen recht einfachen Sketch zum Auslesen meines Gaszählers geschrieben.

Dieser funktioniert in meinem Testaufbau mit einem Arduino NANO tadellos.
Hab mich ein wenig in die EEPROM Thematik eingelesen (nicht zu oft beschreiben, Adressspeicher sind nur ein byte groß etc.)

Da ich nur diesen einen Wert habe verwende ich den Befehl: EEPROM.put(adresse, Daten)

Zu Beginn beschreibe den EEPROM Speicher durch einmaliges Hochladen.
Danach kommentiere ich die entsprechenden Zeilen aus.

Nun ist mein Problem, dass der ESP scheinbar nichts in das EEPROM geschrieben hat (der NANO aber schon) und nach dem Start 0 ausgibt.

Sketch:

#include <EEPROM.h>                                               // EEPROM Lib einbinden
#include <Arduino.h>


// --- Deklaration EEPROM ---
//float Gasstand = 1999.123;                                       // für einmaliges Ebschreiben des EEProm
float Gasstand;
int adresse = 0;
float Gasstandalt;
bool  GasImpuls;


// --- Zeitzähler ---
unsigned long aktuelleMillis;                                     // Speicher aktuelle Millis
unsigned long SpeicherMillisGas = 0 ;                             // Speicher aktuelle Millis
const long TGas      = 3600000;                                   // Speicher Zykluszeit TGas = 1 Stunde

// --- Taster / reed Schalter ---
int Taster  = 14;
int reed    = 15;


//--------------------------------------------------------------------------------------------
//--- Setup ----------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
void setup() {

  // --- serieller PC Schnittstelle ---
  Serial.begin(115200);
  while (!Serial);
  delay(100);
  Serial.println ("Programmstart:");


  // --- Taster / reed Schalter ---
  pinMode(Taster, INPUT);                                                      // Pin Tastereingang
  pinMode(reed, INPUT);                                                        // Pin REED Schalter


  // --- einmalige Test Beschreibung! ---
  //EEPROM.put(adresse, Gasstand);


  // --- Gaswert nach Neustart aus EEPROM holen ---
  EEPROM.get(adresse, Gasstand);
}

//--------------------------------------------------------------------------------------------
//--- Hauptprogramm --------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
void loop()
{
  aktuelleMillis = millis();                                                          // schreibe in aktuelle Mills die Mills des Arduino
  delay(100);
  Serial.print ("Gasstand: ");    Serial.println (Gasstand, 2);                       // Kontrollausgabe

  // --- Impulserkennung reed Schalter ---
  if (digitalRead(reed) == LOW)  GasImpuls = true;                                    // Impuls: Fallende Flanke erkannt
  if (GasImpuls == true && (digitalRead(reed) == HIGH))                               // Impuls vorbei
  {
    GasImpuls = false;                                                                // Flag zurücksetzen
    Gasstand = Gasstand + 0.01;                                                       // Zählerstand hochzählen
  }


  // --- Manuelle Korrektur ---
  if (digitalRead(Taster) == LOW) {
    Gasstand = Gasstand + 0.01;
  }


  // --- EEProm beschreiben ---
  if ((aktuelleMillis - SpeicherMillisGas > TGas) && Gasstandalt != Gasstand) {       // frage ab: ist aktuelle Mills - SpeicherMills noch größer als Wunschzeit
    SpeicherMillisGas = aktuelleMillis;                                               // Zeit zurücksetzen
    Gasstandalt = Gasstand;                                                           // Sichere neuen Stand für nächste betrachtung
    EEPROM.put(adresse, Gasstand);
    Serial.print ("Schreibe in EPROM: ");  Serial.println (Gasstand, 2);              // Kontrollausgabe
  }
}

Was mache ich falsch oder wo ist der Denkfehler?

Grüße Nicolas

Der ESP8266 hat kein echtes EEPROM, sondern emuliert das im Flash.
Deshalb ist der Ablauf dort ein wenig anders.
Am Ende des Schreibens muss ein EEPROM.commit();

Gruß Tommy

Ich zähle auch Gas, mit einem Nano und über Modbus - vielleicht kannst Du hier ein bisschen klauen: GasCounter - Github.

Super, danke !!!
Hat geklappt :ok_hand:

Dann bitte bei der passenden Antwort auf
grafik
klicken.

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