Sistemas de Archivos Flash: SPIFFS y LittleFS
SPIFFS (SPI Flash File System) y LittleFS son sistemas de archivos especializados para chips de memoria flash en microcontroladores como el ESP32. Estos sistemas permiten almacenamiento no volátil, manteniendo los datos incluso después de reiniciar o apagar el dispositivo.
SPIFFS
- Sistema más antiguo y estable
- Ideal para archivos pequeños
- Ampliamente documentado
- No soporta directorios
LittleFS
- Sistema más moderno
- Soporta directorios
- Mejor rendimiento
- Menor fragmentación
Aplicaciones en Mecatrónica e IoT
En aplicaciones industriales y de mecatrónica, estos sistemas de archivos son fundamentales para:
Logging de Datos
Registro histórico de sensores y eventosConfiguraciones
Parámetros de sistema y calibracionesBackup Seguro
Respaldo de datos críticos del sistemaImplementación en ESP32
El ESP32 incluye soporte nativo para ambos sistemas de archivos a través de las bibliotecas SPIFFS.h
y LittleFS.h
. La configuración se realiza mediante particiones en la memoria flash.
Ejemplo: Operaciones Básicas con SPIFFS
#include "SPIFFS.h"
void setup() {
Serial.begin(115200);
// Inicializar SPIFFS
if (!SPIFFS.begin(true)) {
Serial.println("Error montando SPIFFS");
return;
}
// Información del sistema de archivos
Serial.println("=== SPIFFS Iniciado ===");
Serial.printf("Espacio total: %u bytes\n", SPIFFS.totalBytes());
Serial.printf("Espacio usado: %u bytes\n", SPIFFS.usedBytes());
// Escribir archivo
escribirArchivo("/config.txt", "temperatura_max=85\nhumedad_min=20\nalarma=true");
// Leer archivo
leerArchivo("/config.txt");
// Listar archivos
listarArchivos("/");
}
void escribirArchivo(const char* path, const char* mensaje) {
Serial.printf("Escribiendo archivo: %s\n", path);
File file = SPIFFS.open(path, FILE_WRITE);
if (!file) {
Serial.println("Error abriendo archivo para escritura");
return;
}
if (file.print(mensaje)) {
Serial.println("Archivo escrito exitosamente");
} else {
Serial.println("Error escribiendo archivo");
}
file.close();
}
void leerArchivo(const char* path) {
Serial.printf("Leyendo archivo: %s\n", path);
File file = SPIFFS.open(path);
if (!file || file.isDirectory()) {
Serial.println("Error abriendo archivo para lectura");
return;
}
Serial.println("Contenido del archivo:");
while (file.available()) {
Serial.write(file.read());
}
Serial.println();
file.close();
}
void listarArchivos(const char* dirname) {
File root = SPIFFS.open(dirname);
if (!root || !root.isDirectory()) {
Serial.println("Error abriendo directorio");
return;
}
Serial.println("Archivos en SPIFFS:");
File file = root.openNextFile();
while (file) {
if (!file.isDirectory()) {
Serial.printf(" %s (%u bytes)\n", file.name(), file.size());
}
file = root.openNextFile();
}
}
void loop() {
// Mostrar estadísticas cada 30 segundos
Serial.printf("Memoria libre: %u bytes\n", SPIFFS.totalBytes() - SPIFFS.usedBytes());
delay(30000);
}
Ejercicios Prácticos
Objetivo: Crear un sistema que guarde y lea configuraciones desde SPIFFS.
Características:
- Archivo de configuración JSON
- Comandos por Serial para modificar valores
- Restauración de configuración por defecto
Objetivo: Implementar un sistema de logging con sensor DHT22 usando LittleFS.
Funcionalidades:
- Registro de datos con timestamp
- Rotación de archivos por día
- Compresión de datos antiguos
Proyecto: Sistema de Monitoreo Industrial
Datalogger Industrial con Web Interface
Desarrollar un sistema completo que combine LittleFS para almacenamiento local con interface web para monitoreo remoto.
Características del Sistema:
- Sensores múltiples (T°, humedad, presión)
- Timestamp NTP para sincronización
- Base de datos local en LittleFS
- Interface web responsive
- Export CSV de datos históricos
- Sistema de alertas configurable
Materiales Necesarios
Hardware:
- ESP32 DevKit (x1)
- Sensor DHT22 (x1)
- Sensor BMP280 (x1)
- Display OLED 128x64 (x1)
- Resistencias pull-up 4.7kΩ (x2)
Software:
- Arduino IDE 2.x
- Bibliotecas: LittleFS, ArduinoJson
- Library: ESP32WebServer
- Tools: ESP32 Data Upload
Troubleshooting y Mejores Prácticas
Problemas Comunes
Error montando sistema de archivos
Causa: Partición no configurada o corrompida
Solución: Formatear con format()
o reconfigurar particiones
Archivo no se puede abrir
Causa: Path incorrecto o permisos
Solución: Verificar path con exists()
Mejores Prácticas
-
Siempre verificar retorno de
begin()
- Cerrar archivos después de usar
- Implementar rotación de logs
- Monitorear espacio disponible
- Usar LittleFS para nuevos proyectos