ESP32 - Werte größer als 255 im EEPROM speichern

Hallo,

ich baue gerade ein Messgerät für mein Aquarium. Dafür wollte ich mittels Rotary Encoder eingelesene Kalibrierwerte im EEPROM speichern. Die Werte sind im Bereich 500-2000, was leider viel zu groß ist für das EEPROM, da es scheinbar nur 8Bit (also Werte von 0-255) unterstützt.

Ich habe das hier gefunden: Arduino Playground - EEPROMWriteAnything aber leider scheine ich nicht wirklich herausfinden zu können, wie ich einzelne (6 verschiedene insgesamt) int Werte hiermit abspeichere.
Vielleicht kann mir hier einer helfen, danke!

suche mal nach

EEPROM.get
EEPROM.put

ABER

lies auch

Muss ich, um EEPROM.put und EEPROM.get zu verwenden, das ganze erst in ein struct verpacken?

Weil so geht es nicht:

#include <EEPROM.h>

void setup() {
  Serial.begin(9600);
}

void loop() {
  float f=1003.2;
  EEPROM.put(0, f);
  float t = 0.0;
  EEPROM.get(0, t);
  Serial.println(t);
  delay(10000);
}

Fehlt da nicht ein EEPROM.begin() oder/und EEPROM.commit()?

crosswalkersam:
Muss ich, um EEPROM.put und EEPROM.get zu verwenden, das ganze erst in ein struct verpacken?

Nein, aber der ESP32 hat kein EEPROM, weshalb zusätzliche Vorkehrungen notwendig sind, siehe #4.

Getestet mit ESP32:

#include <EEPROM.h>
#define EEPROM_SIZE 8 // define the number of bytes you want to access

unsigned int EEPROMReadInt ( unsigned int eeAdresse )
{
  unsigned int wert;
  EEPROM.get( eeAdresse, wert );
  return wert;
}

void EEPROMWriteInt ( unsigned int eeAdresse , unsigned int wert )
{
  EEPROM.put(eeAdresse, wert);
}

void setup(void)
{
  delay(1000);
  Serial.begin(115200);
  Serial.println("Anfang");
  EEPROM.begin(EEPROM_SIZE); // initialize EEPROM with predefined size
  unsigned int eeAdresse = 0;
  unsigned int wert1 = EEPROMReadInt(eeAdresse);
  Serial.print("Adresse ");
  Serial.print(eeAdresse);
  Serial.print("\tWert von EEPROM: \t");
  Serial.println(wert1, HEX);
  eeAdresse = 4;
  unsigned int wert2 = EEPROMReadInt(eeAdresse);
  Serial.print("Adresse ");
  Serial.print(eeAdresse);
  Serial.print("\tWert von EEPROM: \t");
  Serial.println(wert2, HEX);
  Serial.println();

  eeAdresse = 0;
  wert1 = 0x4711;
  // wert1++;
  EEPROMWriteInt(eeAdresse, wert1);

  eeAdresse = 4;
  wert2 = 0x5566;
  //wert2++;
  EEPROMWriteInt(eeAdresse, wert2);
  EEPROM.commit();

  eeAdresse = 0;
  wert1 = EEPROMReadInt(eeAdresse);
  Serial.print("Adresse ");
  Serial.print(eeAdresse);
  Serial.print("\tWert von EEPROM: \t");
  Serial.println(wert1, HEX);
  eeAdresse = 4;
  wert2 = EEPROMReadInt(eeAdresse);
  Serial.print("Adresse ");
  Serial.print(eeAdresse);
  Serial.print("\tWert von EEPROM: \t");
  Serial.println(wert2, HEX);
  Serial.println("---------");
}

void loop(void) {}

crosswalkersam:
Muss ich, um EEPROM.put und EEPROM.get zu verwenden, das ganze erst in ein struct verpacken?

Nein. Das kann mit beliebigen Datentypen umgehen. Wie man das organisiert kann man sich aussuchen

combie:
Fehlt da nicht ein EEPROM.begin() oder/und EEPROM.commit()?

Ja, das hat funktioniert! Vielen Dank.

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