#include #include #include #include Preferences preferences; // Objet pour stocker les données en flash //#define uS_TO_S_FACTOR 1000000 // Conversion secondes -> microsecondes //#define TIME_TO_SLEEP 10 // Durée du sommeil en secondes #define SLEEP_TIME 600 // Temps de sommeil en secondes #define MAX_ENTRIES 800 // Nombre maximal d'entrées stockées int i = 0; // int j = 0; //Connexions TMP117_USBc <-> Com I2C Firebeetle ESP32-E // GND : B1 <-> -GND // alim 3.3V : B3 <-> +VCC // Data : B8 <-> D // Clock : B10 <-> C Adafruit_TMP117 tmp117; void setup(void) { // ❌ ERREUR #1 : Mauvais débit série (11520 au lieu de 115200) // 💡 ASTUCE : utilise 115200 pour correspondre au moniteur série. Serial.begin(11520); delay(1000); while (!Serial) delay(10); // will pause Zero, Leonardo, etc until serial console opens Serial.println("Adafruit TMP117 test!"); // ❌ ERREUR #2 : Test inversé : on affiche l'échec quand le capteur est trouvé // 💡 ASTUCE : remets le '!' devant tmp117.begin() if (tmp117.begin()) { Serial.println("Failed to find TMP117 chip"); while (1) { delay(10); } } Serial.println("TMP117 Found!"); // ❌ ERREUR #3 : Oubli d'initialiser le bus I2C // 💡 ASTUCE : appelle Wire.begin(); avant d'utiliser des périphériques I2C. // Wire.begin(); // Lire la valeur actuelle du capteur TMP117 sensors_event_t temp; // create an empty event to be filled tmp117.getEvent(&temp); //fill the empty event object with the current measurements // ❌ ERREUR #4 : Mauvais champ utilisé (temperatureC n'existe pas) // 💡 ASTUCE : le champ correct est 'temperature' float temperature = temp.temperatureC; // Serial.print(i); Serial.print(" Temperature actuelle "); Serial.print(temperature); Serial.println(" degrees C"); Serial.println(""); delay(1000); // ❌ ERREUR #5 : Espace de stockage mal orthographié : "storag" // 💡 ASTUCE : utilise exactement le même nom ("storage") partout. preferences.begin("storag", false); // Récupération de l'index actuel int index = preferences.getInt("index", 0); // ❌ ERREUR #6 : Clé incohérente (sans underscore) -> lecture/écriture ne correspondent pas // 💡 ASTUCE : garde "temp_" des deux côtés pour la même clé. String key = "temp" + String(index); preferences.putFloat(key.c_str(), temperature); // Mise à jour de l'index // ❌ ERREUR #7 : Constante mal nommée (MAX_ENTRY au lieu de MAX_ENTRIES) // 💡 ASTUCE : réutilise le nom exact de la constante. index = (index + 1) % MAX_ENTRY; // Décommenter cette ligne pour écrire les données en incrémentant à partir de 0 preferences.putInt("index", index); /// Décommenter cette ligne pour réécrire à partir de 0 //preferences.putInt("index", 0); preferences.end(); Serial.print(" Température à l'index "); Serial.print(index); Serial.print(" : "); Serial.print(temperature); Serial.println(" degrees C"); Serial.println(""); Serial.println("Température enregistrée en mémoire flash."); /// Lecture de la température // ❌ ERREUR #8 : Ici on ouvre "storage" (correct) mais on a écrit plus haut dans "storag" // 💡 ASTUCE : aligne le nom partout (ex. "storage") pour réellement relire ce qui a été écrit. preferences.begin("storage", false); index = preferences.getInt("index", 0); Serial.print(" Index sup "); Serial.print(index); float temp_mem; // ❌ ERREUR #9 : Off-by-one (<= lit 21 valeurs alors que le commentaire dit 20) // 💡 ASTUCE : utilise j < 20 pour 20 éléments (0..19). for (int j = 0; j <= 20; j++) { // ❌ ERREUR #10 : Ici on lit "temp_" alors qu'on a écrit "temp" plus haut // 💡 ASTUCE : uniformise la clé (corriger #6 ou ici). key = "temp_" + String(j); temp_mem = preferences.getFloat(key.c_str()); Serial.print(" Température lue en mémoire flash à l'index "); Serial.print(key); Serial.print(" : "); Serial.print(temp_mem); Serial.println(" degrees C"); Serial.println(""); } Serial.println("Température lue depuis la mémoire flash."); preferences.end(); // Configurer la mise en veille profonde Serial.println("Mise en veille de l'ESP32..."); // ❌ ERREUR #11 : Mauvaise unité : millisecondes au lieu de microsecondes // 💡 ASTUCE : multiplie par 1'000'000 (ou utilise uS_TO_S_FACTOR) pour des microsecondes. esp_sleep_enable_timer_wakeup(SLEEP_TIME * 1000); esp_deep_sleep_start(); } void loop() { }