journal-sd.ino

M5Stack Core (ESP32) — familia Basic / Gray (K001 / K002) · Archivo : journal-sd.ino · Lenguaje : Arduino · Uso : Enregistrer des mesures sur la carte micro SD

La carcasa tiene todo para la estación autónoma: SD interna, reloj NTP, pila. Este registrador escribe una línea CSV cada 5 s con flush: los datos sobreviven al corte de corriente, a diferencia del búfer.

Hardware necesario

Un M5Stack Core Basic/Gray (ESP32 en carcasa con TFT de 320×240, botones A/B/C, altavoz, ranura microSD, batería de 110 mAh). 1 tarjeta micro SD (FAT32, ≤ 32 Go recomendado) en el alojamiento lateral.

Cableado

Sin cableado: el alojamiento SD está en el bus SPI interno. Retire la tarjeta sin corriente para evitar corrupción.

Funcionamiento

SD.begin monta el bus, open(FILE_APPEND) crea o amplía el archivo, flush fuerza la escritura física. time/localtime_r dan la hora NTP en cuanto el Wi-Fi sincroniza. En el Arduino IDE (paquete esp32), placa « M5Stack-Core-ESP32 »; instale la biblioteca « M5Stack » (o M5Unified) desde el gestor y suba.

Para ir más lejos

Trunque el archivo pasado 1 Mo, o añada un sensor Grove al puerto A para enriquecer las columnas.

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);
}

← Volver a la ficha