esp32-p4-hydra-sd-card-logging.ino

Adafruit Metro ESP32-P4 Hydra · File : esp32-p4-hydra-sd-card-logging.ino · Language : C++ (Arduino) · Use case : Enregistrer des données sur la carte microSD via l'interface SDIO 4 bits.

Uses the built-in microSD reader to save periodic data, leveraging 4-bit SDIO speed.

Insert a microSD card formatted in FAT32. The code uses the standard SD library. On the ESP32-P4, the SDIO controller is native. If the card is not detected, it may be necessary to use specific ESP-IDF APIs for high-speed SDIO mode or verify exact pinout for CS (Chip Select) if SPI mode is used as fallback.

esp32-p4-hydra-sd-card-logging.ino

#include <Arduino.h>
#include <SD.h>
#include <SPI.h>

// La Hydra utilise un slot microSD SDIO 4 bits.
// Sur l'ESP32-P4, l'accès SDIO via la bibliothèque Arduino standard peut nécessiter 
// des configurations spécifiques ou l'utilisation de l'interface SPI si SDIO n'est pas mappé par défaut.
// Cependant, le P4 possède un contrôleur SDIO natif. 
// Pour cet exemple, nous utilisons l'interface SD standard qui devrait mapper vers le contrôleur approprié.
// Note : Vérifiez les pins SDIO dans le schéma Hydra (souvent GPIO 39-44 pour SDIO).

#define SD_CS_PIN 10 // À adapter : Sur certaines cartes P4, le CS est géré par le contrôleur SDIO ou un pin spécifique.
                     // Si SD.begin() échoue, essayez SD.begin(SD_CS_PIN, SPI) ou vérifiez la doc ESP-IDF pour SDIO.
                     // Pour l'instant, testons l'approche générique.

void setup() {
  Serial.begin(115200);
  Serial.println("Metro ESP32-P4 Hydra: SD Card Logging");

  if (!SD.begin()) {
    Serial.println("Card Mount Failed");
    return;
  }
  uint8_t cardType = SD.cardType();
  if (cardType == CARD_NONE) {
    Serial.println("No SD card attached");
    return;
  }
  Serial.print("SD Card Type: ");
  if (cardType == CARD_MMC) Serial.println("MMC");
  else if (cardType == CARD_SD) Serial.println("SDSC");
  else if (cardType == CARD_SDHC) Serial.println("SDHC");
  else Serial.println("UNKNOWN");

  uint64_t cardSize = SD.cardSize() / (1024 * 1024);
  Serial.printf("SD Card Size: %lluMB\n", cardSize);
}

void loop() {
  File dataFile = SD.open("datalog.txt", FILE_APPEND);
  if (dataFile) {
    dataFile.printf("Time: %lu, Value: %d\n", millis(), random(100));
    dataFile.close();
    Serial.println("Data logged");
  } else {
    Serial.println("Error opening datalog.txt");
  }
  delay(5000);
}

← Back to the board