ESP32 a permanentní uložení dat do flash paměti

Odpovědět
Pablo74
Příspěvky: 87
Registrován: 03 lis 2019, 17:00

ESP32 a permanentní uložení dat do flash paměti

Příspěvek od Pablo74 » 19 říj 2024, 14:01

Pro ESP32 existuje funkční řešení, jak trvale zapsat data do paměti flash. Zůstanou v paměti i po restartu či vypnutí ESP32.

Všechno to má na starosti knihovna Preferences.h, jak je vysvětleno ve skvělém článku: https://randomnerdtutorials.com/esp32-s ... eferences/

Pro inspiraci ostatním bastlířům - kterým se hodí trvale uložená data - přikládám malý prográmek k vyzkoušení.

Kód: Vybrat vše

/*
preferences library; store data to non-volatile memory (nvm)
*/

#include <Preferences.h>

Preferences preferences;

String deviceName = "ESP32 - A";
String deviceDate = "2024-10-19";
String deviceId = "9bc0b79b";

String device_Name;
String device_Date;
String device_Id;

void writeData(){
  preferences.begin("device", false);     // false -> RW (read/write), true -> RO (read only) 
  preferences.putString("name", deviceName); 
  preferences.putString("date", deviceDate);
  preferences.putString("id", deviceId);
  preferences.end();
}

void readData(){
  preferences.begin("device", true);     // false -> RW (read/write), true -> RO (read only) 
  device_Name = preferences.getString("name", "");
  device_Date = preferences.getString("date", "");
  device_Id = preferences.getString("id", "");
  preferences.end();
}

void setup() {
  writeData();
  readData();

}

void loop() {
  
}
Program je funkční, akorát se zdá, že nic nedělá :-)
Po přečtení dat - funkce readData() - s nimi můžete pracovat, třeba je vypsat do sériového monitoru. Já si je zobrazil na displeji, ale to už je implementace pro konkrétní desku, tady jsem vložil jen kód pro zápis a čtení.

Pochopitelně, data se zapíšou jednou a pak se volání funkce writeData() zakomentuje a při dalším spuštění ESP32 se data jen čtou.

Ať je vám tato informace inspirací :-)

AstroMiK
Příspěvky: 622
Registrován: 08 pro 2017, 19:05

Re: ESP32 a permanentní uložení dat do flash paměti

Příspěvek od AstroMiK » 19 říj 2024, 18:33

Osobně s těma deskama nemám skoro žádnou zkušenost, ale chci se zeptat, jakou to má výhodu proti klasickému arduinovskému EEPROM.write() a EEPROM.read()?
Podle návodů na internetu by tyhle funkce by měly být dostupné i pro ESP32.
Jen je tam třeba na závěr ještě fyzicky přepsat celý FLASH blok pomocí funkce EEPROM.commit().

Knihovnu "preferences.h" jsem detailně nestudoval, ale podle toho popisu se mi zdá, že se kromě ukládané hodnoty (VALUE) musí někam zaznamenávat i název té proměnné (KEY).
A při čtení hodnoty se pak zase v celém bloku té vyhrazené FLASH paměti musí vyhledat řetězec s názvem požadované proměnné a k němu přečíst přiřazenou hodnotu.

To se mi zdá trochu složitý a neefektivní.

Pablo74
Příspěvky: 87
Registrován: 03 lis 2019, 17:00

Re: ESP32 a permanentní uložení dat do flash paměti

Příspěvek od Pablo74 » 19 říj 2024, 18:54

Máš pravdu. Obě knihovny řeší podobnou záležitost, ale různým způsobem a s různou mírou abstrakce a efektivity.

Je to jako v programování obecně: buď totální low-level kód, ten zvládne jen pár lidí a kód bude velmi efektivní, ale málokdo mu bude rozumět a programování zůstane pro podivíny. Nebo se začnou používat prostředky s vyšší mírou abstrakce, nejen jazyky, ale i knihovny pro tyto jazyky a najednou otevřeš svět programování skoro všem.

Nechal jsem umělou porovnat oba přístupy (Preferences.h, EEPROM.h) a tady je výsledek:
Preferences.h:
Využívá NVS (Non-Volatile Storage) paměť ESP32
Umožňuje ukládat data ve formě klíč-hodnota
Podporuje různé datové typy (int, float, string, bool, atd.)
Umožňuje vytvářet více oddělených "namespaces" pro organizaci dat
Má vyšší úroveň abstrakce a je jednodušší na použití
Poskytuje lepší ochranu proti ztrátě dat při náhlém výpadku napájení
Má menší opotřebení flash paměti díky efektivnějšímu způsobu zápisu

Celková kapacita NVS je obvykle kolem 320 KB, ale může se lišit v závislosti na konfiguraci rozdělení flash paměti.
NVS je sdílený prostor pro různé účely, takže ne všechna kapacita je vždy dostupná pro uživatelská data.
Efektivní využitelná kapacita pro uživatelská data je obvykle menší, typicky kolem 64 KB až 128 KB.
Umožňuje efektivnější využití prostoru díky komprimaci dat a správě paměti.
EEPROM.h:
Emuluje EEPROM pomocí flash paměti
Pracuje s byty na konkrétních adresách
Vyžaduje manuální správu adres a velikostí dat
Je kompatibilní s kódem napsaným pro skutečnou EEPROM paměť
Může být méně efektivní z hlediska využití paměti a životnosti flash
Jednodušší pro přímý přístup k jednotlivým bytům

Emulovaná EEPROM na ESP32 má standardně velikost 512 bytů.
Tuto velikost lze zvýšit až na několik KB, ale je omezena dostupnou flash pamětí.
Typicky se používá maximálně 4 KB emulované EEPROM, i když technicky je možné nastavit i větší velikost.

Uživatelský avatar
Caster
Příspěvky: 434
Registrován: 11 zář 2019, 09:02

Re: ESP32 a permanentní uložení dat do flash paměti

Příspěvek od Caster » 19 říj 2024, 21:57

Ještě bych doplnil další kritérium a to je rychlost zápisu. Paměti většinou provádí zápis po blocích s tím, že nejdřív musí daný blok ještě vymazat (předpokládám opakované zápisy přes celou pamět). Problém může nastat např. při načítání hodnot zrychlení z MEMS senzoru MPU6050 rychlostí např. 50 Hz (20 ms) a jejich zápis do paměti pro pozdější zpracování.

Uživatelský avatar
kiRRow
Příspěvky: 1266
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: ESP32 a permanentní uložení dat do flash paměti

Příspěvek od kiRRow » 20 říj 2024, 12:21

Já se do programování ponořil tak někde od středu. První jazyk co jsem začal chápat byl BASIC. Od tamať jsem se vydal oběma směry najednou. Čím méně abstraktní jazyk, tím efektivnější a míra kontroly nad tím co se děje větší a větší, programování je čím dál tím složitější na chápání. Druhý směr je čím dál tím lehčí na obsluhu a pochopení, ale pro strojový čas neefektivní, míra kontroly je menší a často se stává, že dvě knihovny se umí poprat o HW prostředky.
Cílem programu je donutit něco dělat to co chceme. Čím více chápu to co se děje, tím efektivnější budu v přesvědčování. Ale zabere to více času se to naučit.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů