reveil.ino
El reloj NTP del sketch SD se vuelve despertador: comparación de la hora actual con la franja 07:30, alarma sonora en el altavoz, parada limpia con el botón A. El snooze apañado con desplazamiento NTP muestra el precio de no tener RTC.
Hardware necesario
Un M5Stack Core Basic/Gray (ESP32 en carcasa con TFT de 320×240, botones A/B/C, altavoz, ranura microSD, batería de 110 mAh). Wi-Fi para la hora; ningún componente.
Cableado
Sin cableado. Si cae el Wi-Fi, la hora se congela: la alarma deja de sonar (fallo seguro).
Funcionamiento
configTime pilota el reloj del sistema vía SNTP; el bucle compara tm_hour/tm_min. wasPressed evita el rebote en la parada. El snooze reconfigura el offset para atrasar la hora 10 minutos. En el Arduino IDE (paquete esp32), placa « M5Stack-Core-ESP32 »; instale la biblioteca « M5Stack » (o M5Unified) desde el gestor y suba.
Para ir más lejos
En el M5StickC Plus2 (RTC interno) la alarma sobrevive a los cortes; aquí, añada un zumbador autónomo a batería.
reveil.ino
// Reveil NTP : sonne a 7 h 30, arret par bouton A, snooze 10 min par B.
#include <M5Stack.h>
#include <WiFi.h>
#include <time.h>
const char *SSID = "votre-wifi", *CLE = "votre-cle";
bool sonne = false;
void setup() {
M5.begin(true, false, true, true);
WiFi.begin(SSID, CLE);
configTime(3600 * 2, 0, "pool.ntp.org");
M5.Lcd.setTextSize(2);
}
void loop() {
M5.update();
struct tm t;
time_t maintenant = time(nullptr);
localtime_r(&maintenant, &t);
M5.Lcd.setCursor(10, 60);
M5.Lcd.printf("%02d:%02d:%02d", t.tm_hour, t.tm_min, t.tm_sec);
if (!sonne && t.tm_hour == 7 && t.tm_min == 30) sonne = true;
if (sonne) {
M5.Speaker.tone(1200, 200);
M5.Lcd.setTextColor(TFT_RED);
M5.Lcd.drawString("REVEIL !", 100, 130, 3);
if (M5.BtnA.wasPressed()) { sonne = false; M5.Speaker.mute(); }
if (M5.BtnB.wasPressed()) { // snooze 10 min
sonne = false;
configTime(3600 * 2 - 600, 0, "pool.ntp.org"); // trick : heure -10 min
}
}
delay(200);
}