🛠 Enregistreur de mouvement sur mémoire flash (LittleFS)

M5StickC Plus2 (M5Stack) — kit portable « stick » ESP32-PICO-V3-02 (SKU K016-P2) · intermediaire · Schéma : IMG-m5stack-stick-c-plus-2-intermediaire-2-m5stick-c2-enregistreur-littlefs.svg — Coupe de la M5StickC Plus2 montrant la puce SiP ESP32-PICO-V3-02 et ses 8 Mo de flash avec le système de fichiers LittleFS, l'IMU écrivant des lignes CSV, sans emplacement carte SD.

Objectifs

Construire un data-logger de mouvement. Attention : la M5StickC Plus2 n'a aucun emplacement SD/TF — les données vivent dans la flash de 8 Mo via LittleFS. On échantillonne l'IMU, on ne consigne que les secousses (norme d'accélération au-delà d'un seuil), on écrit des lignes CSV horodatées par le RTC BM8563, et on relit le journal par le port série.

Matériel

Code complet

// 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 série
    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);
}

Vérification attendue

Après téléversement, secouer le stick : un bip valide chaque écriture et le compteur « lignes » grimpe. Appuyer sur A puis ouvrir le moniteur série à 115200 affiche le CSV millis,ax,ay,az,norme. Maintenir B pendant le boot remet le journal à zéro.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels