Módulo 8

Lectura y escritura en SPIFFS y LittleFS

Almacenamiento y Manejo de Datos

ESP32 Mecatrónica IoT UNAM

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 eventos
Configuraciones
Parámetros de sistema y calibraciones
Backup Seguro
Respaldo de datos críticos del sistema

Implementació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

C++ - Arduino IDE
#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

1

Sistema de Configuración

Principiante 25 min

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
2

Logger de Sensores con LittleFS

Intermedio 35 min

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

Referencias y Recursos Adicionales