Forum: Mikrocontroller und Digitale Elektronik Wie viel Arduino flash ROM Magic lässt sich kombinieren?


von A. S. (rava)


Lesenswert?

Hi,

ich benutze einen ESP8266 (Wemos D1) und habe mich durch diverse Arduino 
libs geklickt. Spannend finde ich gerade alles, das kreativ mit dem 
Flash ROM umgeht. Da habe ich mich gefragt, kann man irgendwie diese 
beiden Funktionalitäten kombinieren:
* Over the air updates
* EEPROM Emulation

Ich stelle mir das so vor, dass mein Gerät einmal am Tag mit meinem 
server verbindet und prüft ob eine neue binary zur Verfügung steht. 
Falls ja, flasht es sich selbst.

Außerdem kann man jederzeit einige config-structs im RAM via Terminal 
ändern (z.B. hostname). Diese werden dann über eine EEPROM Emulation im 
Flash abgelegt.

Bei der Interaktion dieser beiden Funktionen würde ich mir wünschen, 
dass die config-structs während dem flash-Vorgang im RAM erhalten 
bleiben. Überall wo sich das Datenformat durch das software update nicht 
geändert hat (könnte man z.B. über eine Versionsnummer als erste 
variable im struct erkennen), wird das bekannte struct aus dem RAM nach 
dem update direkt in den Flash geschrieben. Alle anderen müssen 
gezwungenermaßen auf ihre neuen defaults gesetzt bleiben.

Erst wenn das alles erledigt ist, kann das Gerät neu gestartet werden 
und das OTA Update ist beendet.

Je kleiner man die structs macht, desto weniger settings gehen so durch 
updates verloren.

Gibt es bereits eine library die das alles kann? Zugegebenermaßen sind 
die die OTA Libs etwas unübersichtlich.
Hat jemand von euch so etwas schon mal in einem Arduino verwendet?

von Stefan F. (Gast)


Lesenswert?

Arduino ist wie Ravioli aus der Dose. Das nimmt man so wie es ist, oder 
gar nicht.

Features die in der aktuellen Doku nicht beschrieben sind, sollte man 
besser nicht benutzen. In den Arduino Bibliotheken ist viel zu viel 
Bewegung drin, als dass es sich großartig lohnt, ihre Quelltexte zu 
analysieren und Workarounds drumherum zu bauen.

Bei so speziellen Anforderungen würde ich lieber mit dem SDK von 
Espressif arbeiten.

Ist meine persönliche Meinung dazu.

von Cyblord -. (cyblord)


Lesenswert?

A. S. schrieb:
> Ich stelle mir das so vor, dass mein Gerät einmal am Tag mit meinem
> server verbindet und prüft ob eine neue binary zur Verfügung steht.
> Falls ja, flasht es sich selbst.

Ich stelle mir vor, dass eine blutjunge Halle Berry ein mal am Tag nackt 
vor meiner Tür steht.
Passiert auch nicht. Ist aber deutlich wahrscheinlicher als dass DU 
diese beknackten Anforderungen jemals wirst umsetzen können.

: Bearbeitet durch User
von Arzt (Gast)


Lesenswert?

Cyblord -. schrieb:
> Ist aber deutlich wahrscheinlicher als dass DU
> diese beknackten Anforderungen jemals wirst umsetzen können.

Oh Gott, bist Du scheiße.
Hast Du wieder aufgehört Deine Pillen zu nehmen?

von mm (Gast)


Lesenswert?

A. S. schrieb:
> * Over the air updates
> * EEPROM Emulation
...
> Gibt es bereits eine library die das alles kann?

Zugegebenermaßen kenne ich die Arduino-Libs nicht. Aber auch nur 
halbwegs brauchbaren Libs für sowas kann man sagen in welchen 
Adressbereichen sie unterwegs sein dürfen. Sofern die Adressbereiche 
keine Überschneidung haben und man die Flash-Pages beachtet können die 
auch durchaus koexistieren.
Über die Qualität der Arduino-Libs sage ich lieber nichts.

von Jens M. (schuchkleisser)


Lesenswert?

Keine Ahnung wie es gemacht wird, aber Tasmota kann und konnte genau 
das.
Die Konfig bleibt über einen (sogar doppelten) OTA erhalten, würde ja 
auch gar keinen Sinn machen sonst.
Und das Ding könnte sich selber updaten, allerdings finde ich es besser 
wenn der User an schubsen muss, wobei das über einen Klick auf der 
Webseite geht oder ein MQTT-Kommando. Da einen Timer dranzufrickeln 
sollte kein Thema sein.
Lief früher unter Arduino auch schon so, aber das Projekt ist 
mittlerweile so groß und überscihtlich das es auf PlatformIO konvertiert 
wurde.

Hacker Tobi hier aus dem Forum hat auch eine ähnliche Firmware am Start, 
die ebenfalls OTA und persistente Settings hat. Das ist allerdings 
natives Espressif-IDE, soweit ich weiß.

Muss also irgendwie gehen... ;)

von Εrnst B. (ernst)


Lesenswert?

Jens M. schrieb:
> Lief früher unter Arduino auch schon so, aber das Projekt ist
> mittlerweile so groß und überscihtlich das es auf PlatformIO konvertiert
> wurde.

Für's Protokoll: Tasmota ist immer noch ein Arduino-Projekt, benutzt 
aber platformio um Compiler, Ardiuno-Core und Bibliotheken in den 
passenden Versionen herunterzuladen und zu kompilieren.

Zur Frage: mit "ArduinoOTA" und ein bisschen Logik am Server wäre das 
einfach umzusetzen. Am ESP:

https://github.com/esp8266/Arduino/blob/master/libraries/ArduinoOTA/examples/BasicOTA/BasicOTA.ino

und der ESP sendet regelmäßig seine aktuelle Versionsnummer an den 
Server, und wenn der was Neueres hätte, startet der Server den Upload, 
mit:

https://github.com/esp8266/Arduino/blob/master/tools/espota.py

Beides Teile vom normalen ESP8266-Arduino-Core.

von A. S. (rava)


Lesenswert?

super, dank euch.

Ich dachte schon ich muss den Thread hier auch Minus machen, als der 
Kollege oben versucht hat lustig zu sein.

Dann fange ich mit dem ArduinoOTA an.

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.