Forum: Mikrocontroller und Digitale Elektronik Probleme mit Blynk und EEPROM bei ESP8266


von Rknios S. (rkinos)


Angehängte Dateien:

Lesenswert?

Moin,

Ich möchte eine alte Espressomaschine etwas digitalisieren und einen PID 
Regler einbauen und die Analogen Schalter durch Taster ersetzten um 
einige Parameter während des Bezugs einfach immer gleich zu haben. Dafür 
gibt es auch schon ein fertiges Projekt, allerdings bin ich damit nicht 
zu 100 % zufrieden und möchte das auch einfach selber machen um das 
ganze besser zu verstehen. Das Programm läuft auch schon genau so wie 
ich es mir vorgestellt habe. Allerdings möchte ich die Parameter gerne 
über Blynk auf die Maschine übertragen, wo die Probleme beginnen.

Das Problem ist, dass die Werte, die ich der Maschine über Blynk 
mitgeteilt habe nach einem Neustart der Maschine immer wieder auf 0 
gesetzt werden, und ich dann erst in der APP alle INPUTS einmal 
anklicken muss, damit die Maschine die Werte wieder hat die ich zuvor 
eingestellt habe. Da die Maschine auch ohne W-Lan laufen soll, habe ich 
versucht das Problem zu lösen, indem ich die Werte im EEPROM des ESP8266 
speicher. Das klappt aber nicht. Sobald ich die Maschine ausschalte und 
wieder anschalte sind die vorherigen Werte nicht mehr eingestellt, 
sondern irgendwelche anderen, aber immer die gleichen.

Außerdem verliert die Maschine während Bezug-Funktion sowie der 
Rückspülfunktion die Verbindung zu Blynk, was ich allerdings erstmal 
verkraften kann.

Vielleicht hat einer von euch auch sonstige Anmerkungen oder Vorschläge 
wie ich meinen Code verbessern kann.

Vielen Dank im Voraus dass ihr versucht zu helfen.

von Dr. Z. (Gast)


Lesenswert?

Seit wann schreibt man Code in txt-Dateien?


Rknios S. schrieb:
> versucht das Problem zu lösen, indem ich die Werte im EEPROM des ESP8266
> speicher. Das klappt aber nicht. Sobald ich die Maschine ausschalte und
> wieder anschalte sind die vorherigen Werte nicht mehr eingestellt,
> sondern irgendwelche anderen, aber immer die gleichen.


Kein Wunder, der ESP8266 hat nämlich kein EEPROM.

von Thomas R. (r3tr0)


Lesenswert?

Dr. Z. schrieb:
> Kein Wunder, der ESP8266 hat nämlich kein EEPROM.

Freilich, der ESP8266 hat ein 512 Byte EEPROM.

von Rknios S. (rkinos)


Lesenswert?

Dachte den hier als TXT Datei hochzuladen wäre gut. Welches Format ist 
denn üblich?

von Rknios S. (rkinos)


Lesenswert?

Thomas R. schrieb:

> Freilich, der ESP8266 hat ein 512 Byte EEPROM.

kennst du dich mit dem ESP8266 aus und weißt, wo mein Fehler ist?

von Einer K. (Gast)


Lesenswert?

Natürlich hat der ESP kein EEPROM.
Es wird simuliert und liegt so im Flashbereich.

Ich sehe kein EEPROM.commit() oder EEPROM.end() im Code.
Also werden die Daten auch niemals gespeichert.

Lesetipp:
https://arduino-esp8266.readthedocs.io/en/latest/libraries.html#eeprom

Rknios S. schrieb:
> Dachte den hier als TXT Datei hochzuladen wäre gut. Welches Format ist
> denn üblich?
Als *.ino Datei, dann tuts auch der Syntaxerheller ordentlich.

Beitrag #6454355 wurde von einem Moderator gelöscht.
von Rknios S. (rkinos)


Lesenswert?

Arduino Fanboy D. schrieb:
> Natürlich hat der ESP kein EEPROM.
> Es wird simuliert und liegt so im Flashbereich.
>
> Ich sehe kein EEPROM.commit() oder EEPROM.end() im Code.
> Also werden die Daten auch niemals gespeichert.
>
> Lesetipp:
> https://arduino-esp8266.readthedocs.io/en/latest/libraries.html#eeprom
>
> Rknios S. schrieb:
>> Dachte den hier als TXT Datei hochzuladen wäre gut. Welches Format ist
>> denn üblich?
> Als *.ino Datei, dann tuts auch der Syntaxerheller ordentlich.

Alles klar, vielen Dank! ich werde mir das mal durchlesen und hoffe, 
dass meine Fragen danach geklärt sind.

Nächstes mal wird eine .ino datei hochgeladen.

von Rknios S. (rkinos)


Lesenswert?

Arduino Fanboy D. schrieb:
> Natürlich hat der ESP kein EEPROM.
> Es wird simuliert und liegt so im Flashbereich.
>
> Ich sehe kein EEPROM.commit() oder EEPROM.end() im Code.
> Also werden die Daten auch niemals gespeichert.
>
> Lesetipp:
> https://arduino-esp8266.readthedocs.io/en/latest/libraries.html#eeprom
>
> Rknios S. schrieb:
>> Dachte den hier als TXT Datei hochzuladen wäre gut. Welches Format ist
>> denn üblich?
> Als *.ino Datei, dann tuts auch der Syntaxerheller ordentlich.

Vielen Dank für deine Antwort!

Heißt das, dass der simulierte EEPROM deutlich öfter Beschrieben werden 
kann, da es ja eigentlich ein Flashspeicher ist?

von Einer K. (Gast)


Lesenswert?

Rknios S. schrieb:
> Heißt das, dass der simulierte EEPROM deutlich öfter Beschrieben werden
> kann, da es ja eigentlich ein Flashspeicher ist?

Das Gegenteil ist der Fall.
(Warum verlinke ich dir überhaupt den Text?)

von Rknios S. (rkinos)


Lesenswert?

ok, sorry mein Englisch ist nicht so mega dufte, habe es jetzt aber 
verstanden. Dann ist der ESP8266 wohl eher nicht für mein vorhaben 
geeigent. Kennst du dich mit Blynk zufällig auch aus und kennst eine 
möglichkeit wie man das anders lösen kann?
Oder gibt es einen Microcontroller der ähnliche eigenschaften wie der 
ESP8266 hat nur mit einem echtem EEPROM?

von ??? (Gast)


Lesenswert?

für solche Werte gibts serielle EEPROM die brauchen nicht viel Platz und 
wenig I/O...

von Stefan F. (Gast)


Lesenswert?

Rknios S. schrieb:
> Da die Maschine auch ohne W-Lan laufen soll, habe ich
> versucht das Problem zu lösen, indem ich die Werte im EEPROM des ESP8266
> speicher.

Genau genommen hat der Chip gar kein EEPROM.

Du kannst Daten im Flash Speicher ablegen, aber der verschleißt im 
Vergleich zu EEPROM sehr schnell. Wenn du da öfter als 100x drauf 
zugreifen willst, dann mache dir Gedanken um einen Wear-Levelling 
Algorithmus. Bei sehr viel mehr Zugriffen ist das ohnehin auch bei einem 
EEPROM nötig.

Die EEPROM Klasse von deinem ESP9266 Core simuliert EEPROM mit RAM. Wie 
Arduino Fanboy D. anmerkte, wird das RAM erst beim Aufruf von 
EEPROM.commit() ins den Flash Speicher übertragen.

> Oder gibt es einen Microcontroller der ähnliche eigenschaften wie der
> ESP8266 hat nur mit einem echtem EEPROM?

Ich glaube: nein

Was den Verbindungsverlust angeht:
Vermutlich fehlt in irgendeiner Schleife ein yield(). Generell wäre es 
besser, das Programm mit einem Zustandsautomaten neu zu strukturieren, 
so dass gar keine blockierenden Schleifen nötig sind. Siehe dazu 
http://stefanfrings.de/multithreading_arduino/index.html

von Rknios S. (rkinos)


Lesenswert?

Alles Klar, vielen Dank. ich denke ich werde dann mit einem externen 
EEPROM Arbeiten und mich nochmal mit den zustandsautomaten Beschäftigen.

von Stefan F. (Gast)


Lesenswert?

Rknios S. schrieb:
> ich denke ich werde dann mit einem externen EEPROM Arbeiten

Guck dir auch mal FRAM an, das hält länger und benötigt keinen Wear 
Levelling Algorithmus. Z.B. FM24C04

von Rknios S. (rkinos)


Lesenswert?

Stefan ⛄ F. schrieb:

> Guck dir auch mal FRAM an, das hält länger und benötigt keinen Wear
> Levelling Algorithmus. Z.B. FM24C0

Habe ich mir gerade mal angeschaut. Dann muss ich mir ja absolut keine 
Sorgen zu machen, gerade für Andere Projekte sehr interessant. Leider 
findet man recht wenig über das FRAM und den ESP :/. Habe mir mal eins 
bestellt und werde es Probieren.

von Einer K. (Gast)


Lesenswert?

Rknios S. schrieb:
> Leider
> findet man recht wenig über das FRAM und den ESP :/.

Was erwartest du?
Es gibt die Wire Doku und das Datenblatt zum Fram.
Auch finden sich die I2C Spezifikationen, wenn man nur will.
Da steht alles drin, was es zu wissen gilt!

Zudem ist es eine feine Gelegenheit dein English zu üben.

Auch könnte ich dir eine I2C EEPROM Lib zukommen lassen, welche auch für 
viele der üblichen FRAM funktioniert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.