journal-sd.ino

M5Stack Core (ESP32) — famille Basic / Gray (K001 / K002) · Fichier : journal-sd.ino · Langage : Arduino · Usage : Enregistrer des mesures sur la carte micro SD

Le boîtier a tout pour la station autonome : SD interne, horloge NTP, pile. Ce logger écrit une ligne CSV toutes les 5 s avec flush — la donnée survit à la coupure, contrairement au tampon.

Matériel requis

Un M5Stack Core Basic/Gray (ESP32 dans un boîtier avec écran TFT 320×240, 3 boutons A/B/C, haut-parleur, micro SD, batterie 110 mAh). 1 carte micro SD (FAT32, ≤ 32 Go conseillés) dans le logement latéral.

Branchement

Aucun câblage : le logement SD est sur le bus SPI interne. Retirer la carte contact coupé évite la corruption.

Fonctionnement

SD.begin monte le bus, open(FILE_APPEND) crée ou complète le fichier, flush force l'écriture physique. time/localtime_r donnent l'heure NTP dès que le Wi-Fi est synchrone. Dans l'Arduino IDE (paquet esp32), carte « M5Stack-Core-ESP32 » ; installez la bibliothèque « M5Stack » (ou M5Unified) via le gestionnaire, puis Téléverser.

Pour aller plus loin

Tronquez le fichier au-delà de 1 Mo, ou ajoutez un capteur Grove sur le port A pour enrichir les colonnes.

journal-sd.ino

// Journal CSV sur la micro SD interne (SPI HS) + horloge NTP.
#include <M5Stack.h>
#include <SD.h>
#include <WiFi.h>
#include <time.h>

const char *SSID = "votre-wifi", *CLE = "votre-cle";
File journal;
unsigned long precedent = 0;

void setup() {
  M5.begin(true, true, true, false);
  Serial.begin(115200);
  if (!SD.begin()) { M5.Lcd.drawString("SD absente!", 10, 10, 2); for (;;); }
  WiFi.begin(SSID, CLE);
  configTime(3600 * 2, 0, "pool.ntp.org");   // heure locale +2, sans DST
  journal = SD.open("/mesures.csv", FILE_APPEND);
  if (!journal) for (;;);
  if (journal.size() == 0) journal.println("epoch;heure;tension_mv;bouton");
}

void loop() {
  if (millis() - precedent < 5000) return;
  precedent = millis();
  time_t maintenant = time(nullptr);
  struct tm t; localtime_r(&maintenant, &t);
  char horo[24]; strftime(horo, sizeof(horo), "%F %T", &t);

  journal.printf("%ld;%s;%d;%d\n", (long)maintenant, horo,
                 M5.Power.getBatteryLevel(), M5.GetPowerKey());
  journal.flush();                       // survit a une coupure d'alim
  Serial.printf("%s ecrit\n", horo);
}

← Retour à la fiche