
SPIFFS - (File Serial Peripheral Interface Flash File System) sistem file untuk memori flash yang terhubung melalui antarmuka periferal serial. Dengan kata-kata sederhana: ada mikrokontroler ESP32 (Gambar 1), ia memiliki memori NOR-memory non-volatile bawaan yang dapat ditulis ulang, yang menyimpan: Preferensi, bootloader, firmware (sketsa terkompilasi), sistem file (SPIFFS) dan yang lainnya sesuatu seperti pembaruan over-the-air (OTA).

Gambar 1. Diagram blok fungsional mikrokontroler ESP32
Memori NOR adalah jenis memori yang dapat ditulis ulang yang tidak mudah menguap yang memiliki kecepatan baca yang cukup tinggi, kecepatan menulis dan menghapus yang relatif rendah, dibandingkan dengan jenis memori NAND . Hampir mustahil untuk memenuhi memori NOR-kapasitas besar, biasanya terbatas pada 128 MB. Dalam kasus ESP32 - empat .
Saat ini SPIFFS memiliki beberapa kelemahan. kekurangan , termasuk: kurangnya dukungan folder; bukan tumpukan waktu nyata, sehingga operasi yang sama mungkin membutuhkan waktu yang berbeda; kurangnya kemampuan untuk menemukan dan memperbaiki blok yang rusak. Jika kekurangan yang tercantum tidak penting bagi Anda, maka kami terus membaca paragraf berikutnya.
Mari kita bicara tentang penggunaan
Sayangnya, di luar kotak, memori mikrokontroler tidak ditandai untuk SPIFFS, untuk menandainya, Anda perlu menggunakan plugin ESP32FS untuk lingkungan pengembangan IDE Arduino.
Setelah plugin diunduh, itu harus diinstal:
- Pastikan Anda memiliki versi terbaru dari lingkungan pengembangan Arduino IDE dan driver untuk perangkat Anda pada ESP32 yang diinstal . Saya memiliki driver M5Stack CP210X yang saya unduh dari tautan ini ;
- Salin folder alat yang diunduh dengan plugin yang tertanam di dalamnya ke folder / Arduino / tools / ESP32FS / ;
- Di macOS, folder ini berada di ~ / Documents / Arduino / ;
- Nyalakan kembali komputer dan periksa di lingkungan pengembangan di menu Tools , item Unggah Data Sketsa ESP32 muncul (Gambar 2) - itu artinya Anda melakukan semuanya dengan benar;

Gambar 2. Menu Alat
- Perhatikan folder data yang terletak di sebelah sketsa. Semua file yang terletak di folder ini akan dimuat ke dalam memori perangkat selama pemformatan;
- Jangan ragu untuk memilih item yang ditunjukkan dan tunggu hingga akhir memformat area memori. Harap perhatikan bahwa bagian lain dari memori TIDAK akan terpengaruh, yang berarti firmware akan tetap berada di memori perangkat dan akan berfungsi. Demikian pula dengan sketsa, ketika dikompilasi ke dalam firmware dan diunduh ke perangkat, sistem file tidak akan terpengaruh.
Jika Anda menginginkan kenyamanan
Jika Anda ingin menyentuh file dan melihat informasi tentang ruang kosong, maka unduh sketsa BRIDGE dan flash perangkat Anda ke sana.
Juga unduh dan kompilasi manajer file lintas-platform A-Explorer (Gambar 3). Pada GitHub, binari akan segera berada di folder bin .

Gambar 3 a. Manajer file A-Explorer untuk macOS

Gambar 3, b. Manajer file A-Explorer untuk Windows
Manajer file ini akan memungkinkan Anda untuk menemukan informasi tentang ruang kosong, mengunggah / mengunduh / menghapus file. Ada indikasi kemajuan operasi.
Seperti yang Anda lihat dari Gambar 3, plug-in mengalokasikan sekitar 1,38 MB memori di bawah SPIFFS.
Siapa BRIDGE ini?
BRIDGE adalah sketsa, dan pertama-tama, fungsi dengan nama yang sama yang bekerja dengan sistem file SPIFFS dan A-Explorer adalah shell grafis untuk itu. Yang terakhir mengirim satu perintah atau yang lain, dan fungsi ini memprosesnya di perangkat itu sendiri menggunakan perpustakaan FS dan SPIFFS . Mari kita lihat apa yang menarik di perpustakaan ini.
Mari kita mulai dengan melihat metode publik dari kelas SPIFFS :
Metode Bool begin (bool formatOnFail = false, const char * basePath = "/ spiffs", uint8_t maxOpenFiles = 10). Metode ini mencoba menginisialisasi instance kelas. Argumen pertama benar atau salah jika sistem file harus diformat jika sistem file tidak diformat. Argumen kedua mengambil jalur tempat root dari sistem file akan ditemukan. Argumen ketiga akan menentukan jumlah file yang dibuka secara bersamaan. Lebih baik membiarkan dua parameter terakhir menjadi default dan tidak mengubahnya. Jika sistem file hilang (plugin di atas tidak digunakan). maka fungsi tersebut akan mengembalikan false.
Metode bool format () akan memeriksa apakah sistem file diformat - mengembalikan true, jika tidak - false.
Metode size_t totalBytes (). Metode ini mengembalikan jumlah size_t-jumlah total byte yang dialokasikan untuk sistem file.
Metode Size_t usedBytes (). Metode ini mengembalikan jumlah size_t byte yang digunakan dalam sistem file.
Metode end () kosong. Metode ini menginisialisasi kelas ini. Setelah memanggil metode ini, tidak masuk akal untuk memanggil metode lain.
Segala sesuatu di kelas ini, tidak ada yang sangat menarik. Mari kita beralih ke kelas FS dan melihat apa yang bisa berguna dari sana.
Hal pertama yang menarik perhatian Anda adalah metode initializer dari kelas bool begin (). Metode ini tidak memerlukan argumen dan tidak perlu menyebutnya, karena kami akan segera menggunakan metode berikutnya.
Metode File terbuka (const char path, mode const char ) dan saudaranya File terbuka (const String & path, mode const char *). Metode ini mengambil dua argumen, yang pertama adalah simbol dan penunjuk string ke jalur file, dan yang kedua adalah mode pembukaan, yang bisa berupa konstanta berikut:
FILE_READ - terbuka hanya untuk membaca;
FILE_WRITE - terbuka hanya untuk menulis;
FILE_APPEND - terbuka untuk ditimpa.
Setelah kami membuka file, kami sekarang dapat melakukan operasi apa pun di atasnya.
- Metode size_t write (uint8_t) memungkinkan Anda untuk menulis satu bilangan bulat 8-bit unsigned di akhir file.
- Metode menulis size_t (const uint8_t * buf, size_t size) memungkinkan Anda untuk menulis serangkaian bilangan bulat tak bertanda dari panjang yang ditentukan dalam argumen kedua.
- Metode int available () menghitung jumlah karakter dari ujung ke penunjuk.
- Metode int read () membaca satu karakter dari file dan mengembalikannya sebagai integer, sementara kursor menggeser satu unit ke kanan.
- Metode size_t readBytes (char * buffer, size_t length) membaca karakter ke dalam buffer yang ditunjukkan oleh argumen pertama, dan jumlah karakter yang dilewati oleh argumen kedua. Mengembalikan jumlah karakter yang dibaca.
- Metode String readString () membaca baris dari file.
- Metode int peek () bekerja mirip dengan metode int read (), hanya kursor yang tetap ada.
- Metode bool seek (uint32_t pos, mode SeekMode) dan bool seek (uint32_t pos, mode SeekMode) menetapkan kursor ke lokasi yang ditentukan. Posisi dilewatkan sebagai argumen pertama, dan aturan kedua ( SeekSet - atur kursor). Jika berhasil - mengembalikan true, jika tidak - false.
- Metode size_t position () mengembalikan posisi kursor.
- Metode size_t size () mengembalikan ukuran file dalam Bytes.
- Metode const char * name () mengembalikan nama file.
- Metode const * * fullName (), dengan mempertimbangkan path lengkap.
- Metode bool isFile () mengembalikan true jika objek terbuka adalah file. Kalau tidak - bohong.
- Metode bool isDirectory () mengembalikan true jika objek terbuka adalah folder. Kalau tidak - bohong.
- Metode File openNextFile () mengembalikan pointer ke file berikutnya di root, jika tidak NULL.
- Bool ada (const char * path) dan bool ada (const String & path) metode mengambil nama lengkap file sebagai argumen, dan jika file seperti itu ada, ia mengembalikan true, jika tidak itu mengembalikan false.
- Metode bool remove (const char * path) dan bool remove (const String & path) mencoba menghapus file yang namanya dilewati oleh argumen. Jika berhasil, mengembalikan true, jika tidak - false.
- Metode bool rename (const char pathFrom, const char pathTo) dan bool rename (const String & pathFrom, const String & pathTo); menerima nama file lengkap sebagai argumen pertama, dan yang kedua sebagai nama file lengkap baru dan ganti namanya.
Ya, ya, Anda dapat mengambil fungsi ini dan menjalankannya di utas terpisah di sketsa lainnya
Terima kasih banyak atas waktu anda! Saya akan senang jika artikel ini menguntungkan Anda.
Referensi dan (atau) sumber:
- SPIFFS Filesystem di sini
- Bekerja dengan sistem file di addon ESP8266 di Arduino IDE di sini
- Pengunggah sistem file Arduino ESP32 di sini