Ce tutoriel fait partie de: Matrice LED RGB ESP32-S3
Projet amusant et pratique à réaliser avec le module matrice RGB ESP32-S3. Vous trouverez des liens vers d'autres vidéos ci-dessous.
Projet d'horloge Internet avec matrice LED RGB ESP32-S3 - 5 couleurs arc-en-ciel
Horloge Internet ESP32-S3 avec effet de couleur arc-en-ciel
Ce projet est une horloge Internet RGB Matrix ESP32-S3 qui se connecte au Wi-Fi, synchronise l'heure locale à partir d'un serveur NTP et défile l'heure dansHH:MMformat sur la matrice RGB NeoMatrix 8×8 intégrée. Contrairement aux versions de couleur unie ou aléatoire, cette horloge utilise une transition fluideeffet de couleur arc-en-ciel, où chaque caractère se déplace en continu à travers le spectre RGB pendant qu'il défile. L'horloge affiche également périodiquement la date et ajuste automatiquement la luminosité entre le jour et la nuit.

Comment fonctionne cette horloge
Une fois alimenté par USB-C, l'ESP32-S3 se connecte à votre réseau Wi-Fi et récupère l'heure locale actuelle depuis Internet. L'affichage défile normalement l'heure, mais à un intervalle défini, il passe pour afficher la date. L'heure et la date sont toutes deux affichées à l'aide d'un effet arc-en-ciel dynamique, créant un affichage vivant et animé sur la petite matrice 8×8.
Bibliothèques utilisées
Le croquis repose sur les bibliothèques suivantes :

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>InstallerAdafruit NeoMatrixen utilisant le Gestionnaire de Bibliothèques Arduino. Ses dépendances, y comprisAdafruit GFX LibraryetAdafruit NeoPixel, sera installé automatiquement.

Configuration utilisateur importante
Broche de données de matrice (matrice RGB intégrée)
Bien que la matrice RGB soit attachée à la carte ESP32-S3, la broche de données doit toujours être définie dans le code :

#define MATRIX_PIN 14Le GPIO 14 est couramment utilisé sur les cartes matricielles RGB ESP32-S3. Si votre variante de carte utilise une broche différente, mettez à jour cette valeur.
SSID Wi-Fi et mot de passe (sensible à la casse)
Remplacez les informations d'identification Wi-Fi par les détails de votre propre réseau :
const char* WIFI_SSID = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";Important :Les SSID Wi-Fi sontsensible à la casse. Un SSID nommé"Book"n'est pas la même chose que"book"Si la capitalisation ne correspond pas exactement, l'ESP32-S3 échouera à se connecter.
Serveur NTP, fuseau horaire et heure d'été
L'horloge synchronise l'heure en utilisant un serveur NTP sur Internet :
const char* ntpServer = "pool.ntp.org";L'heure locale est calculée en utilisant ces décalages :
// Toronto-ish: UTC-5, plus 1 hour DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;gmtOffset_secdécalage UTC en secondes (exemple : UTC-5 =-5 * 3600)daylightOffset_sec: Utiliser3600si le DST est actif, ou0s'il n'est pas utilisé
Ces valeurs sont appliquées en utilisant :
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);Luminosité automatique jour/nuit
La luminosité change automatiquement en fonction de l'heure actuelle :
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;Entre 22 h et 6 h, la matrice s'assombrit pour réduire l'éblouissement. Pendant les heures de jour, la luminosité normale est rétablie.
Effet de couleur arc-en-ciel
Ce projet utilise une roue de couleurs RGB classique pour générer des couleurs arc-en-ciel douces. Chaque caractère est dessiné avec un décalage de couleur légèrement différent, et les couleurs évoluent au fil du temps, produisant une animation arc-en-ciel fluide.
// Helper to create Rainbow Colors
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return matrix.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if (WheelPos < 170) {
WheelPos -= 85;
return matrix.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return matrix.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}Alors que le texte défile, chaque caractère progresse à travers le spectre RGB, créant un effet arc-en-ciel continu qui est particulièrement impressionnant sur le petit affichage 8×8.
Comportement d'affichage de l'heure et de la date
L'horloge maintient des tampons séparés pour l'heure et la date :
- Temps :
HH:MM - Date :
MMM DD(par exempleJAN 08)
La date est affichée à un intervalle fixe :
const uint32_t dateIntervalMs = 60000; // Show date every 1 minuteÀ la fin de chaque cycle de défilement complet, le code décide s'il doit continuer à afficher l'heure ou passer à la date.
Logique de défilement sur une matrice 8×8
Parce que l'affichage ne fait que 8 pixels de large, le texte défile en douceur de droite à gauche. Une fois que le texte a complètement quitté l'écran, le curseur se réinitialise et le prochain contenu (heure ou date) est chargé pour le passage suivant.
Démonstration
Après avoir téléchargé le croquis et alimenté la carte via USB-C :
- L'ESP32-S3 se connecte à votre réseau Wi-Fi.
- L'heure est synchronisée à partir d'Internet.
- Le temps défile.
HH:MMformat - La date apparaît périodiquement.
- Tout le texte est rendu avec un effet arc-en-ciel animé et fluide.
- L'affichage s'assombrit automatiquement la nuit et s'éclaire pendant la journée.
Téléchargements et liens
Le code source complet est fourni ci-dessous cet article. Des outils et références utiles, y compris le sélecteur de couleurs RGB, sont également liés ci-dessous cet article.
Ce tutoriel fait partie de: Matrice LED RGB ESP32-S3
- Projets de Matrice LED RGB ESP32-S3 (Jeu d'Inclinaison, Texte, Flèche, Démo WiFi)
- Projet 2 de matrice LED RGB ESP32-S3 - Texte défilant
- Projet de matrice LED RGB ESP32-S3 3 - Texte provenant du téléphone mobile
- Projet de matrice LED RGB ESP32-S3 4 - Point incliné
- Projet de matrice LED RGB ESP32-S3 5 - Flèche toujours vers le haut
- Projet de matrice LED RGB ESP32-S3 6 - Jeu cible
- Projet d'horloge de base ESP32-S3 Matrice LED RGB Wi-Fi + Horloge NTP - 1
- Projet d'Horloge Internet avec Matrice LED RGB ESP32-S3 - Affichage de l'heure et de la date en multi-couleurs
- Projet d'horloge Internet avec matrice LED RGB ESP32-S3 - 3 couleurs de nuit avec date
- Projet d'horloge Internet avec matrice LED RVB ESP32-S3 - 4 couleurs aléatoires
- Test de matrice LED RGB ESP32-S3 pour réglage RGB, GRB
/*
* =====================================================================================
* ESP32-S3 CLOCK - RAINBOW DATE & SOLID TIME - Project 5- RAINBOW MODE
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT842
* Author: Gemini (AI Thought Partner) & Ahmad Shamshiri (Robojax.com)
* Date: 07 Jan 2026
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK - RAINBOW MODE
* * FEATURES:
* - Full Rainbow: Time and Date use flowing rainbow colors.
* - Auto-Brightness: Dims at night (22:00 to 06:00).
* - Custom WiFi: Robust connection logic with retries.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";
// NTP (time) server
const char* ntpServer = "pool.ntp.org";
// Toronto-ish: UTC-5, plus 1 hour DST.
const long gmtOffset_sec = -5 * 3600; // -5 hours
const int daylightOffset_sec = 3600; // +1 hour for DST
// --- BRIGHTNESS CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
// --- INTERVALS & TRACKING ---
unsigned long lastDateShowMs = 0;
const uint32_t dateIntervalMs = 60000; // Show date every 1 minute
bool isShowingDate = false;
Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
NEO_RGB + NEO_KHZ800);
char timeText[6] = "00:00";
char dateText[10] = "";
char currentDisplayText[12] = "";
int16_t scrollX = 8;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
unsigned long lastTimeUpdateMs = 0;
// Helper to create Rainbow Colors
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return matrix.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return matrix.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return matrix.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
void updateClockData() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
// Update Time and Date strings
snprintf(timeText, sizeof(timeText), "%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min);
strftime(dateText, sizeof(dateText), "%b %d", &timeinfo);
for (int i = 0; dateText[i]; i++) dateText[i] = toupper(dateText[i]);
// Handle Night Dimming
if (timeinfo.tm_hour >= NIGHT_START_HOUR || timeinfo.tm_hour < NIGHT_END_HOUR) {
matrix.setBrightness(NIGHT_BRIGHTNESS);
} else {
matrix.setBrightness(DAY_BRIGHTNESS);
}
}
void scrollDisplay() {
matrix.fillScreen(0);
int len = strlen(currentDisplayText);
int16_t x = scrollX;
// Draw each character with a shifting rainbow color
for (int i = 0; i < len; i++) {
uint8_t colorPos = (uint8_t)((i * 30) + (millis() / 5));
matrix.setTextColor(Wheel(colorPos));
matrix.setCursor(x + (i * 6), 0);
matrix.print(currentDisplayText[i]);
}
matrix.show();
scrollX--;
int16_t textWidth = len * 6;
if (scrollX < -textWidth) {
scrollX = matrix.width();
// Switch between Date and Time at end of cycle
if (millis() - lastDateShowMs > dateIntervalMs) {
strcpy(currentDisplayText, dateText);
lastDateShowMs = millis();
isShowingDate = true;
} else {
strcpy(currentDisplayText, timeText);
isShowingDate = false;
}
}
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\nESP32-S3 Rainbow Clock Initializing...");
// Connect to WiFi
Serial.print("Connecting to WiFi: ");
Serial.println(WIFI_SSID);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
int retries = 0;
while (WiFi.status() != WL_CONNECTED && retries < 30) { // ~15s timeout
delay(500);
Serial.print(".");
retries++;
}
Serial.println();
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi connection FAILED");
} else {
Serial.print("WiFi connected. IP: ");
Serial.println(WiFi.localIP());
}
// Configure time via NTP
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Serial.println("Waiting for time...");
delay(2000); // small wait for initial sync
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(DAY_BRIGHTNESS);
updateClockData();
strcpy(currentDisplayText, timeText); // Load initial time
}
void loop() {
unsigned long now = millis();
// Update time digits and check brightness every second
if (now - lastTimeUpdateMs >= 1000) {
lastTimeUpdateMs = now;
updateClockData();
}
// Handle the scrolling animation
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollDisplay();
}
}
Ressources et références
-
Vidéo
-
InterneOutil de sélection de couleurrobojax.com
Fichiers📁
Fichier Fritzing
-
partie fritzing esp32-S3-supermini-tht
esp32-S3-supermini-tht.fzpz0.02 MB