Crear y cargar SPIFFS a ESP8266 con mkspiffs y esptool

Desde hace un tiempo mantengo un Makefile para evitar tener que usar Arduino IDE al programar los ESP8266. Detesto tener que usarlo, y la hora de subir los sistemas de archivos SPIFFS al ESP8266 no me quedaba más remedio.

Resulta que el desarrollador que mantiene el repositorio de ESP8266-Arduino también mantiene una herramienta llamada mkspiffs para crear sistemas de archivos SPIFFS a partir de un directorio, o extraer los archivos de la imágen un sistema SPIFFS.

Esta herramienta es muy fácil de usar. Tan solo necesita el directorio, el tamaño del sistema de archivos en bytes y el archivo de salida:

mkspiffs --create [directorio] -s [tamaño] [archivo de salida]

Incluye otra serie de opciones como tamaño de los bloques y el páginado, pero las veces que lo he utilizado con NodeMCU no lo he necesitado.

Para subir el sistema de archivos he utilizado esptool.

esptool --port [puerto] --baud 115020 write_flash [dirección] spiffs.bin

La direccion de inicio del sistema de archivos la he conseguido del archivo boards.txt del módulo para ESP8266 para Arduino IDE, en mi caso en la opción nodemcuv2.menu.build.spiffs_start

Para asegurarme de que todo funcionaba correctamente he usado el siguiente código:

#include "FS.h"
void setup(void){
  Serial.begin(115200);
  SPIFFS.begin();
  File f = SPIFFS.open("/test.txt", "r");
  if (!f) {
    Serial.println("Error al abrir el archivo");
  }
  while(f.available()) {
    String line = f.readStringUntil('\n');
    Serial.println(line);
  }
}
void loop(void){
}

He introducido los cambios para que con mi Makefile, con el comando make filesystem, se cree y cargue automáticamente un sistema de archivos SPIFFS con el contenido de una carpeta con nombre data que resida en la carpeta del proyecto.