Zápisník experimentátora
Hierarchy: ESP8266
Mikrokontrolér ESP8266 umožňuje ukládat data pomocí souborového systému SPIFFS. Údaje jsou ukládány do interní Flash paměti. Flash paměť je rozdělena na několik bloků. Do každého bloku lze uložit údaje, aniž byly ovlivněny ostatní bloky. Mikrokontrolér se nejčastěji prodává na desce, kde se nacházejí 4 MB Flash. Paměť je rozdělena na oblasti.
V nastavení velikosti Flash si můžete vybrat velikost, která se má na souborový systém SPIFFS rezervovat.
Jednotlivé položky se od sebe liší pouze velikostí. Při prvním nastavení velikosti a spuštění programu v mikrokontroléru se souborový systém inicializuje, což trvá několik sekund. Při každé změně nastavení se znovu inicializuje. Soubory se zachovají. Je rozumné si předem promyslet, kolik místa budete potřebovat a nastavit to podle toho.
Toto je jednoduchý projekt, proto nám bude stačit některá deska s mikrokontrolérem ESP8266, kterou lze přímo připojit do USB. Abyste se vyhnuli případnému zkratu, můžete desku zastrčit do breadboardu.
Můžete vyzkoušet následující program, který vám vypíše základní údaje o vaší SPIFFS.
#include <FS.h>
void setup() {
Serial.begin(115200);
bool res = SPIFFS.begin();
Serial.print("SPIFFS.begin() = ");
Serial.println(res);
if (res) {
FSInfo fs_info;
SPIFFS.info(fs_info);
Serial.print("fs_info.totalBytes = ");
Serial.println(fs_info.totalBytes);
Serial.print("fs_info.usedBytes = ");
Serial.println(fs_info.usedBytes);
Serial.print("fs_info.blockSize = ");
Serial.println(fs_info.blockSize);
Serial.print("fs_info.pageSize = ");
Serial.println(fs_info.pageSize);
Serial.print("fs_info.maxOpenFiles = ");
Serial.println(fs_info.maxOpenFiles);
Serial.print("fs_info.maxPathLength = ");
Serial.println(fs_info.maxPathLength);
}
}
void loop() {
}
Výsledek bude vypadat takto.
SPIFFS.begin() = 1 fs_info.totalBytes = 957314 fs_info.usedBytes = 0 fs_info.blockSize = 8192 fs_info.pageSize = 256 fs_info.maxOpenFiles = 5 fs_info.maxPathLength = 32
Souborový systém používá následující objekty a třídy.
SPIFFS
- Tento globální objekt zabezpečuje základní ovládání souborového systému SPIFFS.File
- Pokud chcete pracovat s obsahem souboru, požádáte SPIFFS pomocí funkce open
o jeho vytvoření nebo otevření. Funkce má dva parametry, název souboru a mód na jeho otevření. Módy jsou kompatibilně s funkcí fopen
jazyka C.Dir
- Pokud chcete pracovat s adresáři, požádáte SPIFFS o obsah adresáře pomocí funkce openDir
. SPIFFS ve skutečnosti žádné adresáře nezná, ale pokud v názvu souboru budete používat znak /, je možné simulovat práci s adresáři. Na celou cestu k souboru ale můžete použít maximálně 31 znaků.Napsal jsem příklad, který ukáže použití několika základních operací. SPIFFS poskytuje více funkcí, toto je ale základ prakticky každé práce se soubory. Vytvoření souboru, přečtení obsahu souboru, vymazání souboru a zobrazení seznamu souborů v adresáři.
#include <FS.h>
void setup() {
Serial.begin(115200);
bool res = SPIFFS.begin();
Serial.print("SPIFFS.begin() = ");
Serial.println(res);
if (res) {
testCreate();
printFiles();
printExample();
testDelete();
printFiles();
}
}
void loop() {
}
void testCreate() {
Serial.println(__FUNCTION__);
// create file
File f = SPIFFS.open("example.txt", "w");
if (!f)
Serial.println("File 'example.txt' open failed.");
else {
f.println("abc");
f.println("def");
f.println("ghi");
f.close();
}
}
void printFiles() {
Serial.println(__FUNCTION__);
Dir dir = SPIFFS.openDir("");
while (dir.next()) {
Serial.print(dir.fileName());
Serial.print(" - ");
Serial.println(dir.fileSize());
}
}
void printExample() {
Serial.println(__FUNCTION__);
File f = SPIFFS.open("example.txt", "r");
if (!f)
Serial.println("File 'example.txt' open failed.");
else {
while (f.available())
Serial.write(f.read());
f.close();
}
}
void testDelete() {
Serial.println(__FUNCTION__);
SPIFFS.remove("example.txt");
}
Výstup z programu vypadá takto.
printFiles example.txt - 15 printExample abc def ghi testDelete printFiles
Soubory můžete do SPIFFS nahrát i z vašeho disku. Potřebujete si na to nainstalovat plugin ESP8266FS
. Musíte si ho stáhnout z Internetu z adresy https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.3.0/ESP8266FS-0.3.0.zip.
tools
a rozbalte do něj obsah staženého ZIP souboru. Celá cesta k souboru musí vypadat takto <home_dir>/Arduino/tools/ESP8266FS/tool/esp8266fs.jar
.data
a nahrajte do něj všechny soubory.Tools/ESP8266 Sketch Data Upload
. Nahrávání souborů do ESP8266 bude trvat dost dlouho.Po nahrání souborů si můžete obsah SPIFFS zkontrolovat pomocí následujícího programu. Program obsahuje také vzorový adresář data s jedním souborem example.txt
. Na výpisu si všimněte, že soubor bude uložen do SPIFFS jako /example.txt
.
#include <FS.h>
void setup() {
Serial.begin(115200);
bool res = SPIFFS.begin();
Serial.print("SPIFFS.begin() = ");
Serial.println(res);
if (res) {
printFiles();
printExample();
}
}
void loop() {
}
void printFiles() {
Serial.println(__FUNCTION__);
Dir dir = SPIFFS.openDir("");
while (dir.next()) {
Serial.print(dir.fileName());
Serial.print(" - ");
Serial.println(dir.fileSize());
}
}
void printExample() {
Serial.println(__FUNCTION__);
File f = SPIFFS.open("/example.txt", "r");
if (!f)
Serial.println("File '/example.txt' open failed.");
else {
while (f.available())
Serial.write(f.read());
f.close();
}
}
Zdrojový kód se nachází na serveru GitHub.
21.05.2019