🛠 Enregistreur de mouvement sur mémoire flash (LittleFS)
Objetivos
Construir un registrador de datos de movimiento. Atención: la M5StickC Plus2 no tiene ninguna ranura SD/TF — los datos se almacenan en la memoria flash de 8 MB mediante LittleFS. Muestreamos la IMU, solo registramos las sacudidas (magnitud de aceleración por encima de un umbral), escribimos líneas CSV con marca de tiempo proporcionada por el RTC BM8563, y leemos el registro a través del puerto serie.
Material
- 1× M5StickC Plus2 (v2)
- Cable USB-C + controlador CH9102
- Arduino IDE / PlatformIO: M5Unified + plugin LittleFS (menú «ESP32 Sketch Data Upload» o
pio run -t uploadfs)
Código completo
// Data-logger mouvement sur LittleFS (PAS de carte SD sur Plus2 — flash 8 Mo)
#include <M5Unified.h>
#include <LittleFS.h>
const char* FICHIER = "/mouvement.csv";
const float SEUIL = 1.6f; // g : au-dessus = secousse
uint32_t nbLignes = 0;
void ecrireLigne(float ax, float ay, float az, float n) {
File f = LittleFS.open(FICHIER, "a");
if (!f) return;
f.printf("%lu,%.3f,%.3f,%.3f,%.3f\n", (unsigned long)millis, ax, ay, az, n);
f.close;
nbLignes++;
}
void setup {
auto cfg = M5.config;
M5.begin(cfg);
Serial.begin(115200);
if (!LittleFS.begin(true)) { M5.Display.println("LittleFS KO"); return; }
M5.Display.setRotation(1);
M5.Display.setTextSize(2);
M5.Display.setTextColor(TFT_ORANGE, TFT_BLACK);
if (M5.BtnB.isPressed) { // B au boot = effacer le journal
LittleFS.remove(FICHIER);
Serial.println("Journal efface.");
}
}
void loop {
M5.update;
float ax, ay, az;
M5.Imu.getAccel(&ax, &ay, &az);
float n = sqrtf(ax * ax + ay * ay + az * az);
M5.Display.setCursor(0, 10);
M5.Display.printf("lignes: %lu\n", (unsigned long)nbLignes);
if (n > SEUIL) {
ecrireLigne(ax, ay, az, n);
M5.Speaker.tone(1200, 40);
}
if (M5.BtnA.wasPressed) { // A = vider le journal sur le port serie
File f = LittleFS.open(FICHIER, "r");
if (!f) { Serial.println("journal vide"); }
else { while (f.available) Serial.write(f.read); f.close; }
}
vTaskDelay(50 / portTICK_PERIOD_MS);
}
Verificación esperada
Después de cargar el programa, agite el stick: un pitido valida cada escritura y el contador «líneas» aumenta. Presione A y luego abra el monitor serie a 115200 para mostrar el CSV millis,ax,ay,az,norme. Mantener presionado B durante el arranque restablece el registro a cero.
Errores frecuentes
- Buscar un puerto para tarjeta SD: la Plus2 no tiene ninguno (a diferencia de otras tarjetas ESP32); todo se gestiona mediante LittleFS en la memoria flash interna.
- Olvidar formatear la partición LittleFS en el primer arranque (
LittleFS.begin(true)lo hace, pero también es necesario grabar la imagenuploadfssi el esquema de particiones ha cambiado). - Abrir/cerrar el archivo a 100 Hz: el desgaste de la memoria flash y la latencia se disparan; solo se registra cuando se supera el umbral.
- Escribir sin cerrar nunca el archivo con
f.close: se pierden líneas en el próximo reinicio. - Leer el registro con un
Serial.printgigante que rompe el flujo: enviar byte a byte conSerial.writecomo se muestra aquí.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
hello-stick.inoArduinoboutons.inoArduinobuzzer.inoArduinoinclinometre.inoArduinohorloge.inoArduinoir-tv.inoArduino