Bonjour, je rencontre un problème pour écrire sur une carte SD avec une carte ESP32.
Je suis parti du code que j'exécutais avec succès sur un Arduino UNO, mais mon programme plante sévère sur ESP32 et le seul équipement connecté que je n'avais pas testé séparément est le module SD (en "espérant" que ce soit ça le problème, sinon ça va être la galère, nouveau sujet à prévoir je crains..).
J'ai fait des recherches pour trouver un code proche de celui adapté à Arduino, j'ai trouvé celui qui suit, mais il n'ajoute pas le texte dans le fichier à la suite de ce qu'il y a déjà :
#include <SD.h>
#define PIN_SPI_CS 5 // The ESP32 pin GPIO5
// Problèmes :
//Remplace et n'ajoute pas le texte à la suite
// Affiche le texte au deuxième lancement de la carte
File myFile;
void setup() {
Serial.begin(115200); // modifier avec 115200
if (!SD.begin(PIN_SPI_CS)) {
while (1) {
Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));
delay(1000);
}
}
Serial.println(F("SD CARD INITIALIZED."));
// open file for writing
myFile = SD.open("/esp32.txt", FILE_WRITE);
if (myFile) {
myFile.println("Created by esp32io.com"); // write a line to esp32.txt
myFile.println("Learn ESP32 and SD Card test3"); // write another line to esp32.txt
myFile.close();
} else {
Serial.print(F("SD Card: Issue encountered while attempting to open the file esp32.txt"));
}
// open file for reading
myFile = SD.open("/esp32.txt", FILE_READ);
if (myFile) {
while (myFile.available()) {
char ch = myFile.read(); // read characters one by one from Micro SD Card
Serial.print(ch); // print the character to Serial Monitor
}
myFile.close();
} else {
Serial.print(F("SD Card: Issue encountered while attempting to open the file esp32.txt"));
}
}
void loop() {
}
J'ai donc poussé les recherches et trouvé un code sensé marcher pour l'ESP32 (fonction append pour ajouter du texte à la suite), et là, eh bien il ne se passe rien du tout... Compilation OK, et puis rien, le fichier .txt n'est pas créé, si je le crée il ne se remplit pas, pas de message d'erreur, même si la carte n'est pas présente... Bref c'est pire. Le code en question :
#include "FS.h"
#include "SD.h"
#include "SPI.h"
// Résultat : il ne se passe rien, pas d'écriture, pas de message moniteur, même si la carte n'est pas présente, pas de message d'erreur.
void appendFile(fs::FS &fs, const char * path, const char * message){
Serial.printf("Appending to file: %s\n", path);
File file = fs.open(path, FILE_APPEND);
if(!file){
Serial.println("Failed to open file for appending");
return;
}
if(file.print(message)){
Serial.println("Message appended");
} else {
Serial.println("Append failed");
}
file.close();
}
void setup() {
appendFile(SD, "hello.txt", "World!\n"); //écriture dans le fichier. Le \n fait un retour à la ligne
Serial.println("OK");
}
void loop() {
}
Vu que je n'ai besoin que d'écrire sur ma carte SD des valeurs à la suite et pas de les relire ou renommer, etc, est-ce que quelqu'un aurait un moyen simple de faire que le texte s'ajoute à partir du premier code présenté, ce qui est naturel sous Arduino ?
Code d'origine sous Arduino :
myFile = SD.open("stat.csv", FILE_WRITE); // ouvre le fichier csv en écriture, le crée si n'existe pas
if (myFile) { // écrit sur la carte
myFile.print(deltaT);myFile.print(";");myFile.println(distriJour);
myFile.close(); // ferme le fichier
} // fin écriture carte
Merci de vos lumières