Bonjour à tous, j'ai reussi à "coder" 90 % de mon projet qui consiste en collecter des données seconde par seconde, les stocker sur une carte SD.
le controleur esp est connecté au web et il devra exporter le fichier SD sous forme annéemois.txt (ou csv) via ftp pour que les données puissent etre exploités par l'accés à une page web.
mais je bloque sur la création du fichier et son changement de nom tout les mois, (202305.txt puis 202306.txt)
j'ai déjà dans mon code la bibliotheque time.h pour horodater les données dans le fichier.
Salut.
On ne définit pas une fonction à l'intérieur d'une autre fonction, bien que certains compilateurs le permettent.
Place la plutôt avant le setup().
C'est pas facile d'aider avec juste un petit morceau de code.
Le message d'erreur que tu donnes est tronqué, on ne sait pas quelle ligne est fautive. C'est peut-être le writeFile qui plante ?
Tu peux utiliser strftime pour créer directement le nom du fichier :
D'accord, mais où est défini le reste ? SD, c'est quoi ?
C'est pour éviter ce genre de perte de temps que je te dis qu'il faut fournir le code en entier.
Ici, timeString contient maintenant le nom du fichier en entier, plus besoin de faire ça : String filename = "/mesures_" + String(timeString) +".csv";
SD c'est ma carte SD et j'essai d'écrire "hello" pour tester
je veux bien TOUT envoyer mais c'est hyper brouillon avec des lignes // pour faire des essais , et en tout ça fait presque 500 lignes...
tu veux que j'envoie tout ce qui y'a avant le setup?
ok j'ai supprimé la ligne qui etait en "double" .....filename = " /mesures....
et ça me donne ça comme erreur : Compilation error: cannot convert 'String ()()' to 'const char '
// BIBLIOTHEQUES ET CONSTANTES
#include "Arduino.h" // lib arduino
// debut prog FTP
#ifdef ESP8266 // utilisation lib esp8266 pour le FTP
#include <ESP8266WiFi.h>
#elif defined ESP32
#include <WiFi.h>
#include "SPIFFS.h"
#endif
#include "ESP8266FtpServer.h"
FtpServer ftpSrv;
// fin ftp
#include <WiFiClient.h>
#include <ESP32_FTPClient.h>
#include <WiFiManager.h> // Utilisation de la librairie WiFiManager.h
#include <Adafruit_NeoMatrix.h> // Biblio matrice Leds
#include "FS.h"// bibliothèques pour le lecteur de carte SD:
#include <SPI.h>// bibliothèques pour le lecteur de carte SD:
#include <SD.h>// bibliothèques pour le lecteur de carte SD:
#include "WiFi.h"// bibliothèques pour la communication WiFi
#include <WebServer.h>// bibliothèques pour la communication WiFi
#include <time.h> // bibliothèque pour l'affichage de la date et de l'heure
#define ONBOARD_LED 2
#define SoundSensorPin 39 // entrée sig analogique carte son 39(A3),
#define VREF 5.0 // voltage ref entrée carte son
int lightPin = 36;// entrée analogique pour lecture lumiere ambiante
int lightReading;// var pour luminosité
int ledBrightness;// var pour luminosité
int m; // m variable pour decaler l'affichage qd 100 dB ou Sup
int x;// x variablepour texte defilant
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32,16,22,
// 32 nb de colonne, 16 nb de ligne, pin sortie 22
NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, NEO_GRB + NEO_KHZ800);
// constantes
WiFiManager wm; // Définition du nom du WifiManager = wm
const char* ssid = "AXXXXXX"; // nom du reseau de config
const char* password = "1XXXXXX"; // Mot de passe
const int delaiEnSecondes = 1; // secondes entre deux mesures consécutives
const int decalage = 1; // la valeur dépend de votre fuseau horaire.
unsigned long derniereMesure; // derniere fois qu'une mesure a été prise
int nb_de_donnees = 0; // nombre de données déjà stockées dans mesures et dateHeure
WebServer serveur(80);
void handle_root()
{ }
// ajout d'information sur le fichier dans la carte SD
void appendFile(fs::FS &fs, const char * path, const char * message) {
Serial.printf("Ecriture dans le fichier: %s\n", path);
File file = fs.open(path, FILE_APPEND);
if (!file) {
Serial.println("Echec de l'ouverture du fichier");
return;
}
if (file.print(message)) {
Serial.println("Modification du fichier reussie.");
}
else { Serial.println("Echec de la modification du fichier");
}
file.close();
}
void writeFile(fs::FS &fs, const char * path, const char * message){
Serial.printf("Writing file: %s\n", path);
File file = fs.open(path, FILE_WRITE);
if(!file){
Serial.println("Failed to open file for writing");
return;
}
if(file.print(message)){
Serial.println("File written");
} else {
Serial.println("Write failed");
}
file.close();
}
// creation fichier horadatage
String filename(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("echec à l'obtention de l'heure !");
return "";
}
char timeString[22];
strftime(timeString, sizeof(timeString), "/mesures_%Y-%m.csv", &timeinfo);
Serial.println(timeString);
//String filename = "/mesures_" + String(timeString) +".csv";
writeFile(SD, filename, "Hello ");
return filename;
}
mes 2 autres esp fonctionnent mais plus celui là..... cramé ? c'est possible ? c'est vrais que je le transporte sans trop le protéger .... (électricité statique? avec un frottement)
dès que j'ai pu avancer je reviens vers vous et j'effacerais ces posts hors sujet, bon week end !
Pas besoin d'effacer, ça comporte de l'information.
En général les cartes ESP32 sont assez robustes mais c'est possible que si tu les portes sans précaution, ça abime un composant
L'ESP reste injoignable...... il doit être HS a cause d'un manque de précaution de ma part.
je vais en commander 1 autre pour continuer à faire mes essais .
En attendant j'ai téléchargé les modifications dans un autre ESP et il n'y a aucun fichier qui se crée sur la carte SD .......