🛠 Station météo autonome en deep sleep
Objectifs
Construire une station météo autonome : mesurer température et humidité avec un SHT31, puis endormir l'ESP32 entre deux mesures. En deep sleep, l'ESP32 tombe à environ 150 µA — seuls le timer et l'RTC restent actifs, et la mémoire RTC conserve les variables marquées RTC_DATA_ATTR. Vous maîtriserez la cause de réveil, le I2C et la discipline d'alimentation.
Matériel
- 1 carte ESP32 DevKit v1
- 1 capteur SHT31 en I2C (SDA GPIO21, SCL GPIO22, adresse 0x44)
- Optionnel : micro-ampèremètre en série avec l'alimentation
Code complet
#include <Wire.h>
#include <Adafruit_SHT31.h>
Adafruit_SHT31 sht31 = Adafruit_SHT31;
RTC_DATA_ATTR uint32_t compteur = 0; // survit au deep sleep
void setup {
Serial.begin(115200);
delay(200);
esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause;
Serial.printf("\nReveil : %d (4 = timer)\n", (int)cause);
Wire.begin(21, 22);
sht31.begin(0x44);
float t = sht31.readTemperature;
float h = sht31.readHumidity;
compteur++;
Serial.printf("Mesure %u : %.2f C, %.1f %%\n", compteur, t, h);
esp_sleep_enable_timer_wakeup(900ULL * 1000000ULL); // 15 min
Serial.println(F("Endormissement..."));
Serial.flush;
esp_deep_sleep_start;
}
void loop {} // jamais atteint : tout se passe dans setup
Vérification attendue
À chaque réveil, la console affiche une mesure avec un compteur qui augmente (la mémoire RTC est bien conservée), puis la carte se tait 15 minutes. Avec un micro-ampèremètre, on mesure environ 40 mA en mesure et environ 150 µA en sommeil profond.
Erreurs fréquentes
- Oublier Serial.flush avant esp_deep_sleep_start : les dernières lignes sont coupées.
- Croire au deep sleep alors que le régulateur et le SHT31 restent alimentés : la carte de dev consomme bien plus que 150 µA ; le chiffre concerne le module nu.
- Variable sans RTC_DATA_ATTR : elle repart à 0 à chaque réveil.
- Prévoir un réveil par bouton sur une broche non RTC : ext0 n'est disponible que sur les RTC GPIO (0, 2, 4, 12-15, 25-27, 32-39).
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino