horloge.ino
Le grand classique du stick : l'heure NTP en gros chiffres, deux-points qui clignote à la seconde. L'exemple montre configTime et le repli visuel quand le Wi-Fi lâche.
Matériel requis
Un M5StickC Plus2 (ESP32-PICO-V3-02, écran 135×240, boutons A/B/C, buzzer passif G2, IR + LED rouge G19, IMU MPU6886, micro, batterie 200 mAh). Un point d'accès Wi-Fi 2,4 GHz.
Branchement
Aucun câblage. L'antenne du stick est capricieuse en métal : testez près du routeur.
Fonctionnement
configTime arme la SNTP du noyau ESP32 ; localtime_r remplit une structure tm à chaque tour. L'affichage ne se met à jour qu'au rythme du delay, la source d'heure reste le noyau. Dans l'Arduino IDE (paquet esp32), carte « M5StickCPlus2 » ; bibliothèque « M5StickCPlus2 » ou M5Unified. Sur la v2 sans PMIC, maintenez le bouton C > 2 s pour allumer ; HOLD (G4) maintient l'alimentation.
Pour aller plus loin
Alarme + buzzer du sketch mélodie, ou affichage de la météo du serveur de votre choix en bas d'écran.
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);
}