ESP8266 NodeMCU с VS Code и PlatformIO: загрузка файлов в файловую систему (LittleFS)
Узнайте, как загружать файлы в файловую систему платы ESP8266 NodeMCU (LittleFS) с помощью VS Code и расширения PlatformIO IDE (быстро и просто). Использование файловой системы с ESP8266 может быть полезно для сохранения HTML, CSS и JavaScript файлов для создания веб-сервера, вместо того чтобы писать всё внутри скетча Arduino.
Если вы используете Arduino IDE, следуйте этому руководству: Установка загрузчика файловой системы ESP8266 в Arduino IDE.
Знакомство с SPIFFS/LittleFS
Существует две файловые системы, которые вы можете использовать для встроенной flash-памяти ESP8266: SPIFFS и LittleFS.
SPIFFS и LittleFS позволяют вам обращаться к flash-памяти так же, как вы работали бы с обычной файловой системой на вашем компьютере, но проще и с большими ограничениями. Вы можете читать, записывать, закрывать и удалять файлы.
SPIFFS:
оригинальная файловая система;
идеальна для приложений с ограничением по объёму памяти и оперативной памяти, использующих много файлов;
не поддерживает директории – всё сохраняется в плоской структуре;
накладные расходы файловой системы на flash-память минимальны;
SPIFFS в настоящее время устарела и может быть удалена в будущих версиях ядра.
LittleFS:
новая;
ориентирована на более высокую производительность;
поддерживает директории;
более высокие накладные расходы на файловую систему и на каждый файл (минимум 4 КБ по сравнению с минимальной единицей выделения файлов SPIFFS в 256 байт).
Для получения дополнительной информации о SPIFFS и LittleFS обратитесь к документации Arduino Core для ESP8266.
SPIFFS в настоящее время устарела и может быть удалена в будущих версиях ядра ESP8266. Рекомендуется использовать LittleFS вместо неё.
LittleFS находится в активной разработке, поддерживает директории и во много раз быстрее для большинства операций. Методы, используемые для SPIFFS, совместимы с LittleFS, поэтому мы можем просто использовать выражение LittleFS вместо SPIFFS при конвертации кода из SPIFFS в LittleFS.
Например, конвертация большинства приложений из SPIFFS в LittleFS просто требует замены SPIFFS.begin() на LittleFS.begin() и SPIFFS.open() на LittleFS.open().
Использование файловой системы с платой ESP8266 особенно полезно для:
Создания файлов конфигурации с настройками;
Постоянного сохранения данных;
Создания файлов для хранения небольших объёмов данных вместо использования карты microSD;
Сохранения HTML, CSS и JavaScript файлов для создания веб-сервера;
Сохранения изображений, рисунков и иконок;
И многое другое.
Загрузка файлов в LittleFS ESP8266 NodeMCU
Файлы, которые вы хотите загрузить в файловую систему ESP8266, должны быть помещены в папку с именем data внутри папки проекта. Чтобы вы поняли, как всё работает, мы загрузим файл .txt с произвольным текстом. Вы можете загрузить любой другой тип файла.
Если вы не знакомы с VS Code + PlatformIO IDE, сначала следуйте следующему руководству:
Использование LittleFS в качестве файловой системы по умолчанию
SPIFFS в настоящее время устарела и может быть удалена в будущих версиях ядра ESP8266. Рекомендуется использовать LittleFS вместо неё. LittleFS находится в активной разработке, поддерживает директории и во много раз быстрее для большинства операций. Поэтому мы будем использовать LittleFS в этом руководстве.
В VS Code + PlatformIO, при загрузке файлов, мы должны указать, что хотим использовать файловую систему LittleFS вместо SPIFFS (по умолчанию), поэтому вам нужно добавить следующую строку в файл конфигурации platformio.ini для ESP8266.
board_build.filesystem = littlefs
Создание папки data
Создайте папку с именем data внутри папки вашего проекта. Это можно сделать в VS Code. С помощью мыши выберите папку проекта, с которым вы работаете. Нажмите на иконку New Folder, чтобы создать новую папку.
Эта новая папка должна называться data, иначе ничего не будет работать.
Затем выберите только что созданную папку data и создайте файлы, которые вы хотите загрузить, нажав на иконку New File. В этом примере мы создадим файл с именем text.txt. Вы можете создавать и загружать любые другие типы файлов, например файлы .html, .css или .js.
Напишите произвольный текст внутри этого файла .txt.
Папка data должна находиться внутри папки проекта, и файлы, которые вы хотите загрузить, должны быть внутри папки data. В противном случае ничего не будет работать.
Загрузка образа файловой системы
После создания и сохранения файла или файлов, которые вы хотите загрузить, в папку data, выполните следующие шаги:
Нажмите на иконку PIO в левой боковой панели. Должны открыться задачи проекта.
Выберите env:nodemcuv2 (название может отличаться в зависимости от используемой платы).
Разверните меню Platform.
Выберите Build Filesystem Image.
Наконец, нажмите Upload Filesystem Image.
Примечание
Важно: для успешной загрузки образа файловой системы вы должны закрыть все последовательные соединения (Serial Monitor) с вашей платой.
Через некоторое время вы должны получить сообщение об успешной загрузке.
Устранение неполадок
Вот распространённая ошибка:
Could not open port «COMX» Access is denied
Эта ошибка означает, что у вас открыто последовательное соединение с вашей платой в VS Code или в любой другой программе. Закройте все программы, которые могут использовать последовательный порт платы, и убедитесь, что вы закрыли все последовательные соединения в VS Code (нажмите на иконку корзины в окне терминала).
Тестирование
Теперь давайте просто проверим, действительно ли файл был сохранён в файловую систему ESP8266. Скопируйте следующий код в файл main.cpp и загрузите его на вашу плату.
/*********
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp8266-nodemcu-vs-code-platformio-littlefs/
*********/
#include <Arduino.h>
#include "LittleFS.h"
void setup() {
Serial.begin(9600);
if(!LittleFS.begin()){
Serial.println("An Error has occurred while mounting LittleFS");
return;
}
File file = LittleFS.open("/text.txt", "r");
if(!file){
Serial.println("Failed to open file for reading");
return;
}
Serial.println("File Content:");
while(file.available()){
Serial.write(file.read());
}
file.close();
}
void loop() {
}
Вам может потребоваться изменить следующую строку в зависимости от имени вашего файла.
File file = LittleFS.open("/text.txt");
Откройте Serial Monitor, и он должен вывести содержимое вашего файла.
Вы успешно загрузили файлы в файловую систему ESP8266 (LittleFS) с помощью VS Code + PlatformIO.
Заключение
В этом руководстве вы узнали, как загружать файлы в файловую систему ESP8266 (LittleFS) с помощью VS Code + PlatformIO. Это быстро и просто.
Это может быть особенно полезно для загрузки HTML, CSS и JavaScript файлов для создания проектов веб-серверов с платами ESP8266 NodeMCU.
У нас есть аналогичное руководство для ESP32: ESP32 с VS Code и PlatformIO: загрузка файлов в файловую систему (SPIFFS)
Узнайте больше о ESP8266 NodeMCU с помощью наших ресурсов: