🛠 Station météo autonome en deep sleep
Objetivos
Construir una estación meteorológica autónoma: medir la temperatura y la humedad con un SHT31, y luego poner el ESP32 en modo de sueño profundo entre dos mediciones. En modo de sueño profundo, el ESP32 consume aproximadamente 150 µA: solo el temporizador y el RTC permanecen activos, y la memoria RTC conserva las variables marcadas con RTC_DATA_ATTR. Dominarás la causa de la reactivación, el protocolo I2C y la disciplina de alimentación.
Material
- 1 placa ESP32 DevKit v1
- 1 sensor SHT31 en I2C (SDA GPIO21, SCL GPIO22, dirección 0x44)
- Opcional: microamperímetro en serie con la alimentación
Código completo
#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
Verificación esperada
En cada reactivación, la consola muestra una medición con un contador que aumenta (la memoria RTC se conserva correctamente), y luego la placa permanece en silencio durante 15 minutos. Con un microamperímetro, se mide aproximadamente 40 mA durante la medición y aproximadamente 150 µA en modo de sueño profundo.
Errores frecuentes
- Olvidar
Serial.flushantes deesp_deep_sleep_start: las últimas líneas se cortan. - Creer en el sueño profundo cuando el regulador y el SHT31 siguen alimentados: la placa de desarrollo consume mucho más que 150 µA; esa cifra corresponde al módulo desnudo.
- Variable sin
RTC_DATA_ATTR: se reinicia a 0 en cada reactivación. - Prever una reactivación mediante un botón en un pin no RTC:
ext0solo está disponible en los GPIO RTC (0, 2, 4, 12-15, 25-27, 32-39).
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino