EPS32 приклад використання SPIFFS
Один із моїх пет-проєктів — керований блок живлення на базі ESP32 з веб-інтерфейсом (GitHub репозиторій https://github.com/vshcryabets/Esp32AdjPsu). До цього я створював прості веб-сторінки безпосередньо в коді на C++. Однак у цьому проєкті я зрозумів, що так працювати далі неможливо — потрібно відокремити код прошивки від коду веб-застосунку. Найчастіше для цього використовують SPI Flash File System (SPIFFS) (офіційна документація https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/storage/spiffs.html). SPIFFS дозволяє зберігати дані у вигляді окремих файлів, які можна як читати, так і записувати.
Який розмір має SPIFFS? Давайте поглянемо на типове розподілення flash-пам’яті у випадку 4 МБ флешу (https://github.com/espressif/arduino-esp32/blob/master/tools/partitions/default.csv):# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x140000,
app1, app, ota_1, 0x150000,0x140000,
spiffs, data, spiffs, 0x290000,0x160000,
coredump, data, coredump,0x3F0000,0x10000,
Під SPIFFS виділено трохи більше третини пам’яті, а саме 0x160000 = 1408 КБ.
Оскільки я використовую PlatformIO, інструкція буде для цього середовища. У корені проєкту створимо папку data:
А в ній створимо файл index.html з ось таким змістом:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>Тестова сторінка з ESP32 SPIFFS</h1>
</body>
</html>
Тестовий скетч:
#include
#include
#include
WebServer server(80); // це наш http сервер
void handle_OnIndex()
{
// перевіримо ща такий файл у нас є
if (SPIFFS.exists("/index.html")) {
// відкриваємо та передаємо зміст файлу у відповідь
File file = SPIFFS.open("/index.html", "r");
server.streamFile(file, "text/html");
file.close();
} else {
server.send(404, "text/plain", "File Not Found");
}
}
void setup() {
Serial.begin(9600);
if(!SPIFFS.begin(true)){
Serial.println("SPIFFS failed");
return;
}
// під'єднаємось до Wifi мережі
WiFi.begin("wifiname", "wifipassword");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.print("Connected ");
Serial.println(WiFi.localIP());
server.on("/index.html", handle_OnIndex);
server.begin();
}
void loop() {
server.handleClient();
}
Заливаємо скетч на ESP32. Далі зберемо образ SPIFFS. У PlatformIO для
цього використовуються спеціальні команди. Відкрийте PlatformIO Terminal
і виконайте команду:
pio run --target buildfs
або використайте меню PlatformIO
Після завершення створення образу в консолі має з’явитися напис SUCCESS. Це означає, що образ SPIFFS готовий до заливки.
Щоб залити образ на ESP32, виконайте команду:pio run --target uploadfs
Або знову такиж це можна зробити через меню:
Важливо:
- SPIFFS можна перезбирати та заливати стільки разів, скільки потрібно. Це не впливає на головну прошивку.
- Переконайтеся, що розмір образу не перевищує виділений у таблиці розділів обсяг (у цьому випадку 1408 КБ).



Коментарі
Дописати коментар