esp32-p4-hydra-sd-card-logging.ino
Utiliza el lector microSD integrado para guardar datos periódicos, aprovechando la velocidad SDIO de 4 bits.
Inserte una tarjeta microSD formateada en FAT32. El código usa la biblioteca SD estándar. En el ESP32-P4, el controlador SDIO es nativo. Si la tarjeta no se detecta, puede ser necesario usar API específicas de ESP-IDF para el modo SDIO de alta velocidad o verificar el pinout exacto para CS (Chip Select) si se usa el modo SPI como alternativa.
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);
}