A Flash memória felépítése
Az ESP8266-nál fájlrendszer ugyanazon a flash chipen tárolódik, mint a program, de a program feltöltésekor a fájlrendszer nem módosul. Ez lehetővé teszi a fájlrendszer használatát a programunk által létrehozott adatok, a konfigurációs fájlok vagy a webszerver tartalmának tárolására.
Az alábbi diagram az Arduino környezetben alkalmazott flash elrendezést szemlélteti:
|-------------------|-----------------|-------------------|--|--|--|--|--|
^ ^ ^ ^ ^
Programunk OTA frissítés Fájlrendszer EEPROM WiFi konfiguráció (SDK)
A fájlrendszer mérete a flash chip méretétől függ. Az IDE-ban kiválasztott kártyától függően a Flash mérete a következő:
Kártya | Flash chip méret, (byte) | Fájlrendszer méret, (byte) |
---|---|---|
Általános modul | 512k | 64k |
Általános modul | 1M | 64k, 128k, 256k, 512k |
Általános modul | 2M | 1M |
Általános modul | 4M | 3M |
Adafruit HUZZAH | 4M | 1M, 3M |
NodeMCU 0.9 | 4M | 1M, 3M |
NodeMCU 1.0 | 4M | 1M, 3M |
Olimex MOD-WIFI-ESP8266(-DEV) | 2M | 1M |
SparkFun Thing | 512k | 64k |
SweetPea ESP-210 | 4M | 1M, 3M |
WeMos D1 & D1 mini | 4M | 1M, 3M |
Megjegyzés: a fájlrendszer funkcióinak használatához adja hozzá a vázlathoz a következőket:
#include "FS.h"
Fájlok feltöltése a fájlrendszerbe
Az ESP8266FS egy eszköz, amely integrálódik az Arduino IDE-be. Hozzáad egy menüpontot az Eszközök menübe a vázlatadatkönyvtár tartalmának feltöltéséhez ESP8266 flash fájlrendszerbe.
- Töltse le: https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.1.3/ESP8266FS-0.1.3.zip.
- Az Arduino könyvtárában hozzon létre egy "tools" nevű mappát, ha még nem létezik
Csomagolja ki a letöltött fájlt a tools könyvtárba. Így kell kinéznie: <home_dir>/Arduino/tools/ESP8266FS/tool/esp8266fs.jar
)- Indítsa újra az Arduino IDE-t
- Nyisson meg egy vázlatot (vagy hozzon létre egy újat és mentse el)
- Nyissa meg a vázlat könyvtárát (Vázlat > Vázlat mappa mutatása)
Hozzon létre egy "data" nevű könyvtárat és helyezze ide az összes fájlt, amit fel szeretne tölteni
- Győződjön meg róla, hogy a megfelelő alaplap és feltöltési sebesség van kiválasztva. Zárja be a soros monitort, ha meg van nyitva.
- Válassza ki a következőt: Eszközök > ESP8266 Sketch Data Upload. Ennek el kell kezdenie a fájlok feltöltését az ESP8266 flash fájlrendszerbe. Ha elkészült, az IDE állapotsor megjeleníti az "SPIFFS Image Uploaded" üzenetet.
Fájlrendszer objektumok (SPIFFS)
begin
SPIFFS.begin()
Ez az eljárás csatolja az SPIFFS fájlrendszert. Meghívása szükséges az összes fájlrendszerkezelő objektum meghívása előtt. TRUE értéket ad vissza, amennyiben a fájlrendszer csatolása sikeres volt, ellenkező esetben az értéke FALSE.
format
SPIFFS.format()
Megformázza a fájlrendszert. Ez az eljárás meghívható a "begin" előtt és utána is. TRUE értéked ad vissza, ha a formázás sikeres volt.
.
open
SPIFFS.open(elérési_út, hozzáférés_módja)
Megnyitja a megadott fájlt. Ügyeljen rá, hogy a teljes elérési útvonalat adja meg, perjelekkel elválasztva, pl.: /dir/filename.txt. Hozzáférés módja: megadja, hogy milyen módon legyen a fájl megnyitva, a következő karakterek használhatóak: "r", "w", "a", "r+", "w+", "a+". Ez az eljárás ugyan az, mint C alatt az "fopoen". Fájl objektumot ad vissza. A megnyitás sikerességének ellenőrzéséhez használja a következő mintát:
File f = SPIFFS.open("/f.txt", "w");
if (!f) {
Serial.println("file open failed");
}
exists
SPIFFS.exists(elérési_út)
Lekérdezhető, hogy egy adott fájl létezik-e. TRUE az értéke, ha a fájl létezik, ellenkező esetben FALSE.
openDir
SPIFFS.openDir(elérési_út)
Megnyitja az adott könyvtárat, onnantól kezdve az lesz a teljes elérési útvonal kezdete. Dir objektumot ad vissza.
remove
SPIFFS.remove(elérési_út)
Törli az elérési útban megadott fájlt. TRUE az eredménye, ha a törlés sikeresen végrehajtódott.
rename
SPIFFS.rename(elérési_út_1, elérési_út_2)
Átnevezi/áthelyezi az 1. elérési útban megadott fájlt a 2. elérési úton megadott helyre. TRUE az eredménye, ha a művelet sikeresen végrehajtódott.
info
FSInfo fs_info;
SPIFFS.info(fs_info);
Kitölti a lejjebb részletezett adatstruktúrát a fájlrendszer adataival. TRUE az eredménye, ha a művelet sikeresen végrehajtódott.
Fájlrendszer információs struktúra felépítése
struct FSInfo {
size_t totalBytes;
size_t usedBytes;
size_t blockSize;
size_t pageSize;
size_t maxOpenFiles;
size_t maxPathLength;
};
Ez az a szerkezet, amelyet az FS :: info módszerrel lehet kitölteni.
totalBytes | teljes méret (byte) |
usedBytes | felhasznált méret (byte) |
blockSize | blokkméret |
pageSize | oldalméret |
maxOpenFiles | max megnyitott fájlok |
maxPathLength | max elérési útvonal hossz |
Könyvtár objektum (Dir)
A Dir objektum célja egy könyvtárban lévő fájlok közötti léptetés elvégzése. Három módszert kínál: next(), fileName(), openFile(). A következő példa megmutatja a használatát:
Dir dir = SPIFFS.openDir("/data");
while (dir.next()) {
Serial.print(dir.fileName());
File f = dir.openFile("r");
Serial.println(f.size());
}
dir.next()
TRUE az értéke egészen addig, amíg nem fogytak el a fájlok. Mindig meg kell hívni a fileName és az openFile funkciók előtt. Az openFile metódus az SPIFFS.open függvénnyel megegyező értelemben vett módú argumentumot veszi figyelembe.
Fájl objektum
Az SPIFFS.open és a dir.openFile fájl objektumot ad vissza. Ezt a típust támogatja az összes srteamelő metódus, mint például: readBytes, findUntil, parseInt, printLn.
Van néhány funkció, amit speciálisan a fájl objektumnál lehet használni:
seek
file.seek(offset, mode)
Ez a függvény úgy viselkedik, mint az Fseek a C nyelvben. A módtól függően a fájl aktuális pozícióját az alábbiak szerint mozgatja:
Ha a mód SeekSet, akkor a pozíció az elejétől kezdődően eltolódik.
Ha a mód SeekCur, az aktuális pozíció eltolásos byte-okkal van mozgatva.
ha a mód SeekEnd, akkor a pozíció a fájl végétől a byte-okhoz képest eltolódik.
TRUE az eredménye, ha a művelet sikeresen végrehajtódott.
position
file.position()
A fájlban lévő aktuális pozíciót bájtban adja vissza.
size
file.size()
A fájl méretét adja vissza, bájtban.
name
String name = file.name();
A fájl nevét adja vissza,a következő formában:
const char*
. Ha el szeretné tárolni akkor konvertálja stringgé.
close
file.close()
Zárja a fájlt, a művelet után más funkciót már nem lehet meghívni.
Forrás: http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html