Minden, ami elektronika

Elektronikával hobbi szinten foglalkozó oldal

ESP8266 fájlrendszer kezelés Arduino IDE alól

2018. október 12. 23:01 - raptor13

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

Szólj hozzá!

A bejegyzés trackback címe:

https://electro.blog.hu/api/trackback/id/tr5214297159

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása