VIDI Project X #95: Datoteke i datotečni sustav SPIFFS

VIDI Project X #95: Datoteke i datotečni sustav SPIFFS

Datoteke i datotečni sustav SPIFFS

Ideja projekta je prikaz operacija rada s datotekama u našem X-u, odnosno otvaranje, kreiranje i pregledavanje datoteka. Spomenimo da je VIDI “X” proširiv sa SD karticama i to mu daje dovoljno prostora da može biti i malo skladište podataka. S tim ciljem demonstrirali smo nekoliko mikro projekata koji će prikazati kako se jednostavno može snimiti datoteka u memoriju X-a

Prvi mikro projekt prikazat će kako kreirati datoteku na X-u (file writing), dok će drugi projekt dati prikaz sadržaja zapisanih datoteka (file listing), na našem mikro X serveru. Projekti su namijenjeni početnicima koji prvi puta ulaze u svijet X-a, dok za naredne brojeve pripremamo nešto složenije primjere manipulacije tipovima datoteka korištenjem server biblioteka i to putem web browsera.

Kreiranje datoteka
Kao programsku platformu za razvoj ovog pokaznog projekta koristili smo poznati Arduino IDE i to u verziji 1.8.10. Za početak pisanja kôda smo učitali potrebne biblioteke (libraries), a sam projekt proširili smo djelomično tako da se status, osim u Serial Monitoru Arduino IDE-a, ispisuje i na TFT ekran našeg X-a, a što smo pojasnili u prethodnom broju.

#include <SPIFFS.h>
- biblioteka Flash datotečnog sustav serijskog perifernog sučelja (SPIFFS)
#include <Adafruit_GFX.h>
- jezgrena biblioteka svih grafičkih biblioteka
#include <Adafruit_ILI9341.h>
- biblioteka s funkcijama koje definiraju i upravljaju TFT ekranom

O SPI sustavu datoteka (SPIFSS)
U proteklom projektu web servera, ako se prisjećate, HTML i CSS kod pisali smo izravno u naš Arduino IDE i tako ga kompajlirali. Međutim, integracija HTML-a i CSS-a na jednom mjestu unutar source kôda čini kod težim za čitanje a i vrlo brzo bi mogli ostati bez memorije. Flash datotečni sustav serijskog perifernog sučelja ili skraćeno SPIFFS predstavlja datotečni sustav za mikrokontrolere sa SPI flash čipom. Ugrađeni flash čip ima dovoljno prostora za smještaj malih datoteka, posebno s verzijama od 2 ili 4 MB. Posebnost SPIFFS-a je mogućnost pristupa flash memoriji slično kao što to činimo na „standardnim“ datotečnim sustavima (primjerice FAT32, NTFS,….). Uporaba biblioteke SPIFFS #include <SPIFFS.h> daje našem serveru mogućnost manipulacije datotekama tako da ih možemo kreirati, pregledavati, prebacivati i slično. Sljedeći izraz provjerava proces mountanja datotečnog sustava:

if(!SPIFFS.begin(true)){
      Serial.println("Greška u pripremi datotečnog sustava");
      return;

Ako mountanje prođe u redu, naš je server spreman za zapis datoteka. Ako ne, prikazat će se greška i proces kreiranja datoteke će se zaustaviti. Za potrebe testa kreirat ćemo tekstualnu datoteku VIDI.txt, a kako bismo istu i zapisali koristit ćemo konstantu FILE_WRITE. Kod u nastavku prikazuje metodu koja vraća objekt klase file koji će se koristiti prilikom kreiranja testne datoteke VIDI.txt.

File file = SPIFFS.open("/VIDI.txt", FILE_WRITE);

Kao provjeru za uspješnost kreiranja i otvaranje testne datoteke koristit ćemo izraz:

if(!file){

     Serial.println("Greška prilikom kreiranja datoteke");
     return;
}

Nakon uspješnog kreiranja i otvaranja testne datoteke, iskoristiti ćemo naredbu print za upis teksta “Neki tekst u VIDI testu”. Pozivanjem funkcije file.close zatvaramo našu datoteku.

if(file.print("Neki tekst u VIDI testu")) {
    Serial.println("Datoteka uspješno zapisana");
}else {
    Serial.println("Neuspješan zapis");
}
file.close();

file list

 Uporaba biblioteke SPIFFS  #include <SPIFFS.h> daje našem serveru mogućnost manipulacije datotekama tako da ih možemo kreirati, pregledavati, prebacivati i slično

file write

 Modificirana verzija primjera za zapis datoteka na SPIFFS datotečni sustav proširena s funkcijom ekranskog prikaza statusa zapisa

Prikaz kreiranih datoteka i mapa
Nakon što smo kreirali i upisali sadržaj u našu testnu, tekstualnu datoteku, sada ćemo prikazati mogućnost file listinga unutar našeg SPIFFS datotečnog sustava i to kroz sljedeći mikro projekt:

file write TFT Izvorni kod primjera projekta file listinga. Projekt smo također započeli pozivanjem SPIFFS biblioteke <SPIFFS.h>, što je preduvjet za bilo kakvu manipulaciju s datotečnim sustavom tj. Kako bismo imali pristup svim funkcionalnostima

20200213 114951

https://github.com/me-no-dev/arduino-esp32fs-plugin/releases/.

Važno!

SPIFFS datotečni sustav ne podržava kreiranje i operacije s direktorijima. Ako se kreira datoteka s putanjom /neki_direktorij/datoteka.txt, stvorit će se datoteka s punim nazivom “/neki_direktorij/datoteka.txt”.

File root = SPIFFS.open(“/”);
- Kako direktoriji zapravo ne postoje u SPIFFS-u, ovim izrazom dobiti ćemo sve datoteke koje se trenutno nalaze u datotečnom sustavu i to počevši od "/", bez obzira na duljinu drugih znakova. Oznaka "/" postoji u njihovim imenima simulirajući ugniježđene foldere.

File file = root.openNextFile();
- Nakon imenovanja i kreiranja datoteke, ponovno se poziva metoda openNextFile sve dok u datotečnom sustavu ima datoteka.

file = root.openNextFile();
- Na kraju kôda koristimo navedeni izraz i koristimo file objekt kako bismo zaustavili izvođenje petlje nakon izlistâ svih datoteka.

Alati koji život znače

Kako bi jednostavnije prebacivali datoteke na mikrokontroler platformu, postoji nešto što se zove Arduino ESP32 Filesystem Uploader, a dostupan je na githubu na linku https://github.com/me-no-dev/arduino-esp32fs-plugin/releases/.

Radi se o dodatku (pluginu) za Arduino IDE, a omogućava prijenos datoteka izravno na SPIFFS datotečni sustav i to izravno iz mape s korisničkog računala.

FS uploader

 Instalacija Filesystem Uploadera je jednostavna, a potrebno je raspakirati skinuti fajl u direktorij gdje je instaliran Arduino IDE te raspakirani .jar (java) file smjestiti u mapu Tools (Tool) te restartati IDE. Nakon toga u izborniku Tools bi se trebala pojaviti nova opcija.

Može li drugačije?


Na Githubu pronašli smo Async Web Server biblioteku koja nam omogućava podešavanje ruta na kojima će naš poslužitelj slušati dolazne HTTP zahtjeve i izvršavati zahtijevane funkcije na toj ruti. Prevedeno, kada poslužitelj primi zahtjev klijenta na korijenskom URL-u “/”, isti odgovara slanjem index.html datoteke prema klijentu. To znači da nakon kreiranja zasebnih .html i .css datoteka na računalu npr., iste prebacimo na naš X, a funkcija server.on u source kodu Arduino IDE-a odradit će ostalo (pri tome ne miješamo html/css kod s izvornim kodom prilikom kompajliranja, već se on nalazi zasebno u html/css datotekama). Kao primjer može se navesti dio izvornog kôda Async Web Server biblioteke korištenjem on metode na server objektu:

server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/index.html", String(), false, processor);
});



Za kraj

Ovim mikro primjerima pokazali smo kako manipulirati datotekama na našem X-u. SPIFFS nije idealan, ali je upotrebljiv uz sva svoja ograničenja. Pri tome ne treba zaboraviti da se radi o vrlo ograničenom memorijskom prostoru za pohranu datoteka i da je zona komfora poprilično skučena u odnosu na današnje memorijske veličine. Kao nedostatak istaknimo nemogućnost rada s direktorijima, barem ne na onakav način na koji smo navikli. Ipak, za pomoć postoje alati poput Filesystem Uploader-a koji nam mogu olakšati rad s datotekama.

 

Primjere koda potražite na linkovima:

https://github.com/VidiLAB-com/Vidi-X/tree/master/SPIFFS_list_files

https://github.com/VidiLAB-com/Vidi-X/tree/master/SPIFFS_make_file

Ocijeni sadržaj
(0 glasova)

// možda će vas zanimati

Newsletter prijava


Kako izgleda naš posljednji newsletter pogledajte na ovom linku.

Copyright © by: VIDI-TO d.o.o. Sva prava pridržana.