je souhaite transmettre (depuis un client ftp/nanoesp32) un petit fichier texte comprenant la date et une variable numérique:
est-il possible de l'envoyer directement, ou bien faut-il créer le fichier, l'enregistrer sur une carte mémoire externe, puis l'envoyer?
Cordialement
b-g-jp
la carte SD n’est pas indispensable, le fichier peut être enregistré dans la mémoire Flash en utilisant l’un des systèmes de fichiers disponibles pour ESP32 : Spiffs ou LIttleFS, des exemples sont disponibles ainsi que des tutoriels
je n'ai pas encore choisi de client ftp, domaine que je n'ai pas encore exploré, mais qui m'est nécessaire pour l'évolution d'une réalisation opérationnelle (envoi de valeurs d'un compteur par mail) vers un stockage des valeurs sur un serveur ftp externe
Je vais étudier votre suggestion
PS: merci d'avoir déplacé mon post, créé un peu trop vite dans celui des trois sous-forums le moins inadapté...
j'ai essayé d'adapter les suggestions de J-M-L avec les bibliothèques utilisées dans mon projet:
Arduino, WiFi, WiFiClientSecure, SPIFFS, FTPClient et time, mais sans beaucoup de réussite: j'arrive bien à créer un fichier sur un serveur ftp avec un nom fixe, mais n'arrive pas à ajouter au nom la date, ni à écrire dans ce fichier la valeur du compteur - de coupures d'une barrière IR- que ce soit avec buffer, ou avec String (counter), qui produisent chaque fois des erreurs de compilation...
Bref, je patine... en rond, et suis preneur de toute piste
si vous faites +1 vous prenez le caractère nul de fin de chaîne. Vous ne voulez pas l'envoyer, vous voulez juste envoyer votre texte avec le \n qui va faire le passage à la ligne - sinon votre fichier destination aura plein de caractères nuls disséminés à chaque fin de ligne
avec ça dans le setup, vous ne touchez pas la variable globale
ça sera viré par le compilateur.
idem votre client FTP
est local à au setup...
il y a du ménage à faire... (je suis toujours sur mon tel donc je ne peux pas tester pour le moment)
bonsoir à tous,
je poste le code du projet en ayant pris en compte les remarques de J-M-L, mais sans arriver à un code exploitable qui permettrait de créer un fichier sur un ftp distant lorsque l'heure de cette tâche sera détectée dans loop
Merci d'avance pour toute suggestion
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <SPIFFS.h>
#include <FTPClient.h>
#include <time.h>
#define WIFI_SSID "xxxxxxxxxx"
#define WIFI_PASSWORD "xxxxxxxxxx"
#define FTP_SERVER_ADDRESS "xxxxxxxxxx"
#define FTP_SERVER_PORT 21
#define FTP_USER_NAME "xxxxxxxxxx"
#define FTP_USER_PASSWORD "xxxxxxxxxx"
WiFiClientSecure ssl_client;
const int buttonPin = 2; // sortie du relais IR (état haut = faisceau coupé)
const int resetPin = 3;
int counter = 0;
int buttonState = 0; // état du relais IR (Haut ou Bas)
int lastButtonState = 0; // dernier état du relais IR
boolean compteurAun = false;
const char* timezone = "CET-1CEST,M3.5.0,M10.5.0/3";
const int task1Hour = 20;
const int task1Minute = 0;
int lastRunDayTask1 = -1;
unsigned long lastNTPUpdate = 0;
const unsigned long ntpSyncInterval = 60 * 60 * 1000;
void syncTime() {
Serial.print("synchro horloge NTP");
configTime(0, 0, "pool.ntp.org", "time.nist.gov");
time_t now = time(nullptr);
while (now < 24 * 3600) {
delay(100);
now = time(nullptr);
}
Serial.println(" ok");
setenv("TZ", timezone, 1);
tzset();
lastNTPUpdate = millis();
}
WiFiClient tcp_client,passive_tcp_client;
FTPClient ftp_client(&tcp_client,&passive_tcp_client);
if (ftp_client.open(FTP_SERVER_ADDRESS,FTP_SERVER_PORT,FTP_USER_NAME,FTP_USER_PASSWORD))Serial.println("ok");
else Serial.println("ko");
Serial.print("création fichier: ");
char text_to_write[]="test\n";
if (ftp_client.write_file("test.txt",(uint8_t*) text_to_write,strlen(text_to_write))) Serial.println("ok");
else Serial.println("ko");
Serial.print("Append to file: ");
char text_to_append[]= "texte de test\n";
if (ftp_client.append_file("test.txt",(uint8_t*) text_to_append,strlen(text_to_append))) Serial.println("ok");
else Serial.println("ko");
void dailyTask1() {
Serial.println(counter);
// code pour création/FTP fichier avec date et valeur counter
}
void setup() {
Serial.begin(115200);
Serial.println("\n");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(300);
}
Serial.println();
Serial.println("connecté IP: " + WiFi.localIP().toString());
ssl_client.setInsecure();
syncTime();
pinMode(buttonPin, INPUT);
pinMode(resetPin, INPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
counter++;
Serial.println(counter);
delay(2000);
}
lastButtonState = buttonState;
time_t now = time(nullptr);
struct tm timeinfo;
localtime_r(&now, &timeinfo);
if (timeinfo.tm_hour == task1Hour && timeinfo.tm_min == task1Minute && lastRunDayTask1 != timeinfo.tm_mday) {
dailyTask1();
lastRunDayTask1 = timeinfo.tm_mday;
}
if (millis() - lastNTPUpdate > ntpSyncInterval) syncTime();
delay(1000);
}
bool buttonPressed = false; // flag la coupure IR