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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Rknios S. (rkinos)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


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

von Rknios S. (rkinos)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
Beitrag #6454355 wurde vom Autor gelöscht.
von Rknios S. (rkinos)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Stefan ⛄ F. (stefanus)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
1 lesenswert
nicht 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

: Bearbeitet durch User
von Rknios S. (rkinos)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht 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.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.