Objetivos
- Conectar el M5Stack Core a una red Wi-Fi 802.11 b/g/n de 2,4 GHz (el ESP32 clásico no admite 5 GHz).
- Obtener la hora mediante NTP con configTime y mostrarla en la pantalla.
- Comprender que esta tarjeta no dispone de RTC (a diferencia del Core2 y su BM8563): la hora se pierde cada vez que se apaga.
- Gestionar la visualización de la zona horaria Europe/Paris con las reglas de horario de verano/invierno mediante TZ.
Material
- 1 M5Stack Core + acceso a Wi-Fi de 2,4 GHz (SSID y contraseña conocidos).
- Batería cargada o alimentación USB de 5 V y mínimo 500 mA (el Wi-Fi provoca picos de corriente).
Código completo
#include <M5Unified.h>
#include <WiFi.h>
const char* SSID = "VOTRE_WIFI";
const char* PASS = "VOTRE_MOT_DE_PASSE";
// Europe/Paris : decalage -1 h, changement FR/dernier dimanche
const char* TZ_INFO = "CET-1CEST,M3.5.0,M10.5.0/3";
void setup {
Serial.begin(115200);
auto cfg = M5.config;
M5.begin(cfg);
M5.Display.setTextSize(2);
configTzTime(TZ_INFO, "pool.ntp.org", "time.cloudflare.com");
WiFi.begin(SSID, PASS);
Serial.print("Connexion Wi-Fi");
while (WiFi.status != WL_CONNECTED) {
delay(400); Serial.print(".");
M5.update;
if (M5.BtnA.wasPressed) { WiFi.disconnect; WiFi.begin(SSID, PASS); }
}
Serial.printf("\nIP : %s\n", WiFi.localIP.toString.c_str);
}
void loop {
struct tm t;
M5.Display.fillRect(0, 30, 320, 120, TFT_BLACK);
M5.Display.setCursor(10, 40);
if (getLocalTime(&t, 1000)) {
char buf[24];
strftime(buf, sizeof(buf), "%d/%m/%Y %H:%M:%S", &t);
M5.Display.println(buf);
Serial.println(buf);
} else {
M5.Display.println("Attente NTP...");
}
M5.Display.setCursor(10, 120);
M5.Display.printf("RSSI : %d dBm", WiFi.RSSI);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
Verificación esperada
- Tras unos segundos, la pantalla muestra la fecha y la hora locales (Europe/Paris) que avanzan al segundo, además del RSSI.
- El monitor serie muestra la dirección IP obtenida por DHCP.
- Tras reiniciar (doble clic en el botón rojo y volver a encender), la hora vuelve a mostrar «Esperando NTP...»: prueba de que no hay un reloj de tiempo real de hardware.
Errores frecuentes
- SSID de 5 GHz: el ESP32 solo ve la banda de 2,4 GHz — verificar la banda del router.
- Olvidar configTzTime antes de WiFi.begin o descuidar TZ: la hora mostrada está en UTC (desfasada 1 o 2 horas).
- Usar un sensor en el ADC2 (G2, G4, G12-15, G25...): el ADC2 está bloqueado mientras funciona el Wi-Fi; quedarse en el ADC1 (G32-39).
- Bucle de reconexión sin delay: brownout/reset en una alimentación USB débil (la tarjeta puede demandar hasta 500 mA).
- Creer que la hora se conserva sin alimentación: sin RTC ni pila, se pierde — repetir la sincronización NTP al arrancar.