ESP8266 NodeMCU с VS Code и PlatformIO: загрузка файлов в файловую систему (LittleFS)

Узнайте, как загружать файлы в файловую систему платы ESP8266 NodeMCU (LittleFS) с помощью VS Code и расширения PlatformIO IDE (быстро и просто). Использование файловой системы с ESP8266 может быть полезно для сохранения HTML, CSS и JavaScript файлов для создания веб-сервера, вместо того чтобы писать всё внутри скетча Arduino.

ESP8266 NodeMCU с VS Code и PlatformIO IDE загрузка файлов в файловую систему LittleFS

Если вы используете 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
Использование LittleFS в качестве файловой системы по умолчанию ESP8266 VS Code + PlatformIO

Создание папки data

Создайте папку с именем data внутри папки вашего проекта. Это можно сделать в VS Code. С помощью мыши выберите папку проекта, с которым вы работаете. Нажмите на иконку New Folder, чтобы создать новую папку.

Эта новая папка должна называться data, иначе ничего не будет работать.

Создание папки data в VS Code PlatformIO ESP8266

Затем выберите только что созданную папку data и создайте файлы, которые вы хотите загрузить, нажав на иконку New File. В этом примере мы создадим файл с именем text.txt. Вы можете создавать и загружать любые другие типы файлов, например файлы .html, .css или .js.

Создание файлов в папке data VS Code с PlatformIO ESP8266

Напишите произвольный текст внутри этого файла .txt.

Папка data должна находиться внутри папки проекта, и файлы, которые вы хотите загрузить, должны быть внутри папки data. В противном случае ничего не будет работать.

Создание текстового файла VS Code PlatformIO ESP8266

Загрузка образа файловой системы

После создания и сохранения файла или файлов, которые вы хотите загрузить, в папку data, выполните следующие шаги:

  1. Нажмите на иконку PIO в левой боковой панели. Должны открыться задачи проекта.

  2. Выберите env:nodemcuv2 (название может отличаться в зависимости от используемой платы).

  3. Разверните меню Platform.

  4. Выберите Build Filesystem Image.

  5. Наконец, нажмите Upload Filesystem Image.

Загрузка образа файловой системы VS Code PlatformIO ESP8266

Примечание

Важно: для успешной загрузки образа файловой системы вы должны закрыть все последовательные соединения (Serial Monitor) с вашей платой.

Через некоторое время вы должны получить сообщение об успешной загрузке.

Сообщение об успешной загрузке образа файловой системы ESP8266 VS Code PlatformIO

Устранение неполадок

Вот распространённая ошибка:

Could not open port «COMX» Access is denied

Ошибка отказа в доступе при загрузке образа файловой системы ESP8266 VS Code PlatformIO

Эта ошибка означает, что у вас открыто последовательное соединение с вашей платой в VS Code или в любой другой программе. Закройте все программы, которые могут использовать последовательный порт платы, и убедитесь, что вы закрыли все последовательные соединения в VS Code (нажмите на иконку корзины в окне терминала).

VS Code PlatformIO закрытие окна терминала

Тестирование

Теперь давайте просто проверим, действительно ли файл был сохранён в файловую систему 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, и он должен вывести содержимое вашего файла.

Чтение содержимого файла LittleFS ESP8266 VS Code PlatformIO

Вы успешно загрузили файлы в файловую систему ESP8266 (LittleFS) с помощью VS Code + PlatformIO.

Заключение

В этом руководстве вы узнали, как загружать файлы в файловую систему ESP8266 (LittleFS) с помощью VS Code + PlatformIO. Это быстро и просто.

Это может быть особенно полезно для загрузки HTML, CSS и JavaScript файлов для создания проектов веб-серверов с платами ESP8266 NodeMCU.

У нас есть аналогичное руководство для ESP32: ESP32 с VS Code и PlatformIO: загрузка файлов в файловую систему (SPIFFS)

Узнайте больше о ESP8266 NodeMCU с помощью наших ресурсов: