Bonjour,
Lorsque je monitor mon ESP32 après lui avoir télécharger le programme suivant je vois ce retour: rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
11:21:51.069 -> invalid header: 0xffffffff
11:21:51.113 -> invalid header: 0xffffffff
11:21:51.146 -> invalid header: 0xffffffff
11:21:51.178 -> invalid header: 0xffffffff
11:21:51.264 -> invalid header: 0xffffffff
11:21:51.310 -> invalid header: 0xffffffff
11:21:51.342 -> invalid header: 0xffffffff
11:21:51.375 -> invalid header: 0xffffffff
11:21:51.414 -> ets Jul 29 2019 12:21:46 Et ainsi de suite. J'ai essayer d'effacer le flash avant d'envoyer mon programme aucun changement.
#include "HX711.h"
#include "SD.h"
#include "SPI.h"
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>
#include "DHT.h"
#include"Adafruit_Sensor.h"
#include <pthread.h>
#include <ESPAsyncWebServer.h>
#include <WiFi.h>
#include <SPIFFS.h>
#include <ESP32Time.h>
#include <FS.h>
#include <math.h>
const char* ssid = "Ruche 1";
const char* password = "Motdepasse";
AsyncWebServer serveur(80);
IPAddress IP(1,5,20,21);
IPAddress gateway(1,5,20,21);
IPAddress subnet(255,255,255,0);
int pinButton = 27; // Bouton éteint
LiquidCrystal ecran(12, 13, 14, 17, 16, 15);
#define DHTPIN 25
#define DHTTYPE DHT22
#define calibrationFactor 1800
#define chipSelct 5
float poidRuche = 0;
float temperature = 0;
float humidite = 0;
SemaphoreHandle_t mutex = xSemaphoreCreateMutex();
TaskHandle_t Task1;
TaskHandle_t Task2;
void setup() {
//-----------------------------------------------------SERIAL
Serial.begin(9600);
Serial.print('12');
Serial.println("\n");
//-----------------------------------------------------SPIFFS
if(!SPIFFS.begin()){
Serial.println("Erreur SPIFFS...");
return;
}
File root = SPIFFS.open("/");
File file = root.openNextFile();
while(file){
Serial.print("File: ");
Serial.println(file.name());
file.close();
file = root.openNextFile();
}
//-----------------------------------------------------Button wifi
pinMode(pinButton, INPUT);
//-----------------------------------------------------THREADS
xTaskCreatePinnedToCore(
Task1code, /* Task function. */
"Task1", /* name of task. */
10000, /* Stack size of task */
NULL, /* parameter of the task */
1, /* priority of the task */
&Task1, /* Task handle to keep track of created task */
0); /* pin task to core 0 */
xTaskCreatePinnedToCore(
Task2code, /* Task function. */
"Task2", /* name of task. */
10000, /* Stack size of task */
NULL, /* parameter of the task */
1, /* priority of the task */
&Task2, /* Task handle to keep track of created task */
1); /* pin task to core 1 */
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Peut etre a suprimer---------------------------------------------------------------------------
/// Gestion de la requête de téléchargement de fichier
void handleDownload(AsyncWebServerRequest *request) {
String fileName = request->arg("file");
// Vérifier si le fichier existe sur la carte SD
if (!SD.exists(fileName)) {
request->send(404, "text/plain", "Fichier non trouvé !");
return;
}
// Ouvrir le fichier pour le téléchargement
File file = SD.open(fileName);
if (file) {
request->send(file, fileName, "application/octet-stream"); // Télécharger le fichier
file.close();
} else {
request->send(500, "text/plain", "Erreur lors de l'ouverture du fichier !");
}
}
// Gestion de la requête de suppression de fichier
void handleDelete(AsyncWebServerRequest *request) {
String fileName = request->arg("file");
// Vérifier si le fichier existe sur la carte SD
if (!SD.exists(fileName)) {
request->send(404, "text/plain", "Fichier non trouvé !");
return;
}
// Supprimer le fichier
if (SD.remove(fileName)) {
request->send(200, "text/plain", "Fichier supprimé avec succès !");
} else {
request->send(500, "text/plain", "Erreur lors de la suppression du fichier !");
}
}
// Gestion de la requête pour récupérer la liste des fichiers sur la carte SD
void handleFileList(AsyncWebServerRequest *request) {
String fileList = "";
File root = SD.open("/");
while (File file = root.openNextFile()) {
fileList += file.name();
fileList += " ";
fileList += String(file.size());
fileList += "\n";
file.close();
}
request->send(200, "text/plain", fileList);
}
//Peut etre a supprimer---------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Fonction coeur 0:
void Task1code( void * pvParameters ){
pinMode(pinButton, INPUT_PULLUP);
while(true){
int stateButton = digitalRead(pinButton);
if (stateButton == LOW && WiFi.status()==WL_DISCONNECTED){
//-----------------------------------------------------WIFI
WiFi.softAP(ssid, password);
delay(500);
WiFi.softAPConfig(IP, gateway, subnet);
delay(500);
Serial.print("Adresse IP: ");
Serial.println(WiFi.softAPIP());
//-----------------------------------------------------SERVEUR
serveur.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/index.html", "text/html");
});
serveur.on("/w3.css", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/w3.css", "text/css");
});
serveur.on("/script.js", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/script.js", "text/javascript");
});
serveur.on("/lirePoids", HTTP_GET, [](AsyncWebServerRequest *request){
String poidRuch = String(poidRuche);
request->send(200, "text/plain", poidRuch);
});
serveur.on("/lireHumidite", HTTP_GET, [](AsyncWebServerRequest *request){
String humidit = String(humidite);
request->send(200, "text/plain", humidit);
});
serveur.on("/liretemperature", HTTP_GET, [](AsyncWebServerRequest *request){
String temperatur = String(temperature);
request->send(200, "text/plain", temperatur);
});
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Peut etre a suprimer---------------------------------------------------------------------------
serveur.on("/dossierSD.html", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/dossierSD.html");
});
serveur.on("/api/download", HTTP_GET, handleDownload);
serveur.on("/api/delete", HTTP_POST, handleDelete);
serveur.on("/api/files", HTTP_GET, handleFileList);
//Peut etre a supprimer---------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
serveur.begin();
delay(500);
Serial.println("Serveur actif");
}
if (stateButton !=LOW && WiFi.status()==WL_CONNECTED){
WiFi.disconnect();
}
}
}
// Fonction coeur 1:
void Task2code( void * pvParameters ){
//-----------------------------------------------------Date et heure
Serial.begin(9600);
SD.begin(chipSelct);
ESP32Time rtc(3600);
int secondes = 0;
int minutes = 0;
int heures = 0;
int jour = 2;
int mois = 8;
int annee = 2023-1;
rtc.setTime(secondes, minutes, heures, jour, mois, annee);
String dateAndTime;
int nombreEnregistrementsParJour=8;
int timeHeure;
int timeMinute;
int timeSeconde;
int dernierEnregistrementH;
int dernierEnregistrementM;
int dernierEnregistrementS;
int tempsEnregistrementH;
int tempsEnregistrementM;
int tempsEnregistrementS;
String nomDossier;
String nomFichier;
String cheminAccesFichier;
String texteData;
File fichier;
DHT dht(DHTPIN, DHTTYPE);
HX711 scale;
scale.begin(16, 4);
scale.set_scale(calibrationFactor);
ecran.begin(3, 2);
int nbSecondeAvantEnregistrement=floor(24*60*60/nombreEnregistrementsParJour);
tempsEnregistrementH= (nbSecondeAvantEnregistrement/3600);
nbSecondeAvantEnregistrement%3600;
tempsEnregistrementM= nbSecondeAvantEnregistrement/60;
tempsEnregistrementS= nbSecondeAvantEnregistrement%60;
while(true){
ecran.clear();
if (xSemaphoreTake(mutex, 200)==1){
temperature = dht.readTemperature();
humidite = dht.readHumidity();
poidRuche = round(scale.get_units()*1000)/1000.0;
if (isnan(humidite) || isnan(temperature)) {
humidite=-1;
temperature=-1;
Serial.println("Impossible de lire le capteur de temperature et d'humiditée (DHT22)");
}
xSemaphoreGive(mutex);
}
ecran.setCursor(0, 0);
ecran.print("Poids: ");
ecran.print(poidRuche, 3);
ecran.print("Kg");
ecran.setCursor(0, 1);
ecran.print("Température: ");
ecran.print(temperature);
ecran.print("°C ");
ecran.print(" Humidité: ");
ecran.print(humidite, 2);
ecran.print("%");
dateAndTime = rtc.getTime("%D, %H:%M:%S");
timeHeure = rtc.getTime("%H").toInt();
timeMinute = rtc.getTime("%M").toInt();
timeSeconde = rtc.getTime("%S").toInt();
nomDossier = "/" + rtc.getTime("%G");
nomFichier = "/" + rtc.getTime("%m")+String(".txt");
cheminAccesFichier = nomDossier + nomFichier;
texteData = dateAndTime + " Poids:" + String(poidRuche) + " Température:" + String(temperature) + " Humidité:" + String(humidite);
if (timeHeure - dernierEnregistrementH >= tempsEnregistrementH && timeMinute - dernierEnregistrementM >= tempsEnregistrementM && timeSeconde - dernierEnregistrementS == tempsEnregistrementS){
if (SD.exists(nomDossier)){
if (SD.exists(cheminAccesFichier)){
fichier = SD.open(cheminAccesFichier, FILE_APPEND);
fichier.println(texteData);
fichier.close();
}
else{
fichier = SD.open(cheminAccesFichier, FILE_WRITE);
fichier.close();
fichier = SD.open(cheminAccesFichier, FILE_APPEND);
fichier.println(texteData);
fichier.close();
}
}
else{
SD.mkdir(nomDossier);
if (SD.exists(cheminAccesFichier)){
fichier = SD.open(cheminAccesFichier, FILE_APPEND);
fichier.println(texteData);
fichier.close();
}
else{
fichier = SD.open(cheminAccesFichier, FILE_WRITE);
fichier.close();
fichier = SD.open(cheminAccesFichier, FILE_APPEND);
fichier.println(texteData);
fichier.close();
}
}
}
delay(2000);
}
}
void loop() {
}
Si vous avez une idée concernant le problème, merci d'avance de m'en faire part.