horloge.ino
El clásico del stick: hora NTP en dígitos grandes con los dos puntos parpadeando cada segundo. El ejemplo enseña configTime y el repliegue visual cuando cae el Wi-Fi.
Hardware necesario
Un M5StickC Plus2 (ESP32-PICO-V3-02, pantalla de 135×240, botones A/B/C, zumbador pasivo en G2, IR + LED rojo en G19, IMU MPU6886, micrófono, batería de 200 mAh). Un punto de acceso Wi-Fi 2,4 GHz.
Cableado
Sin cableado. La antena del stick es caprichosa en metal: prueben cerca del router.
Funcionamiento
configTime arma el SNTP del núcleo ESP32; localtime_r rellena una estructura tm cada vuelta. La pantalla solo se refresca al ritmo del delay; la fuente de hora sigue siendo el núcleo. En el Arduino IDE (paquete esp32), placa « M5StickCPlus2 »; biblioteca « M5StickCPlus2 » o M5Unified. En la v2 sin PMIC, mantenga el botón C más de 2 s para encender; HOLD (G4) mantiene la alimentación.
Para ir más lejos
Alarma + zumbador del sketch melodía, o tiempo de su servidor elegido al pie de la pantalla.
horloge.ino
// Horloge NTP : l'heure reelle sur l'ecran du stick.
#include <M5Unified.h>
#include <WiFi.h>
#include <time.h>
const char *SSID = "votre-wifi";
const char *CLE = "votre-cle";
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
M5.Display.setRotation(1);
WiFi.begin(SSID, CLE);
for (int i = 0; i < 40 && WiFi.status() != WL_CONNECTED; i++) delay(250);
configTime(3600 * 2, 0, "pool.ntp.org", "time.google.com"); // UTC+2
}
void loop() {
M5.update();
struct tm t;
time_t maintenant = time(nullptr);
localtime_r(&maintenant, &t);
M5.Display.setTextSize(3);
M5.Display.setCursor(10, 30);
M5.Display.setTextColor(t.tm_sec % 2 ? TFT_WHITE : TFT_DARKGREY);
M5.Display.printf("%02d:%02d\n", t.tm_hour, t.tm_min);
M5.Display.setTextSize(1);
M5.Display.setTextColor(TFT_GREEN);
M5.Display.setCursor(10, 100);
M5.Display.printf("%04d-%02d-%02d %s",
t.tm_year + 1900, t.tm_mon + 1, t.tm_mday,
WiFi.status() == WL_CONNECTED ? "wifi" : "HORS LIGNE");
delay(200);
}