Questo tutorial è parte di: Matrice LED RGB ESP32-S3
Fantastico progetto da realizzare per applicazioni pratiche e divertenti utilizzando il modulo RGB Matrix ESP32-S3. I link ad altri video si trovano più avanti in questo articolo.
Progetto di orologio Internet con matrice LED RGB ESP32-S3 - 5 colori arcobaleno
Orologio Internet ESP32-S3 con effetto colore arcobaleno
Questo progetto è un orologio Internet RGB Matrix ESP32-S3 che si connette al Wi-Fi, sincronizza l'ora locale da un server NTP e visualizza l'ora in scorrimento.HH:MMformat sul NeoMatrix RGB 8×8 integrato. A differenza delle versioni a colore solido o casuale, questo orologio utilizza un'effetto morbidoeffetto di colore arcobaleno, dove ogni carattere si sposta continuamente attraverso lo spettro RGB mentre scorre. L'orologio visualizza anche periodicamente la data e regola automaticamente la luminosità tra giorno e notte.

Come funziona questo orologio
Una volta alimentato tramite USB-C, l'ESP32-S3 si connette alla tua rete Wi-Fi e recupera l'ora locale corrente da internet. Il display di solito scorre l'ora, ma a un intervallo definito passa a mostrare la data. Sia l'ora che la data sono visualizzate utilizzando un effetto arcobaleno dinamico, creando un display vibrante e animato sul piccolo matrice 8×8.
Librerie utilizzate
Lo schizzo si basa sulle seguenti librerie:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>InstallaAdafruit NeoMatrixutilizzando il Gestore Librerie di Arduino. Le sue dipendenze, inclusiAdafruit GFX LibraryeAdafruit NeoPixel, sarà installato automaticamente.

Configurazione utente importante
Dati del pin della matrice (matrice RGB integrata)
Sebbene la matrice RGB sia collegata alla scheda ESP32-S3, il pin dei dati deve comunque essere definito nel codice:

#define MATRIX_PIN 14Il GPIO 14 è comunemente utilizzato sulle schede matrici RGB ESP32-S3. Se la variante della tua scheda utilizza un pin diverso, aggiorna questo valore.
SSID e password Wi-Fi (differentiati maiuscole e minuscole)
Sostituisci le credenziali Wi-Fi con i dettagli della tua rete:
const char* WIFI_SSID = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";Importante:Le SSID Wi-Fi sonosensibile alle maiuscole. Un SSID chiamato"Book"non è lo stesso di"book"Se la capitale non corrisponde esattamente, l'ESP32-S3 non riuscirà a connettersi.
Server NTP, fuso orario e ora legale
L'orologio sincronizza l'ora utilizzando un server NTP di internet:
const char* ntpServer = "pool.ntp.org";L'orario locale viene calcolato utilizzando questi offset:
// Toronto-ish: UTC-5, plus 1 hour DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;gmtOffset_sec: offset UTC in secondi (esempio: UTC-5 =-5 * 3600)daylightOffset_secUsa3600se l'ora legale è attiva, o0se non usato
Questi valori vengono applicati utilizzando:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);Luminosità automatica giorno / notte
La luminosità cambia automaticamente in base all'ora corrente:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;Tra le 22:00 e le 6:00, la matrice si attenua per ridurre il riflesso. Durante le ore diurne, la luminosità normale viene ripristinata.
Effetto arcobaleno
Questo progetto utilizza una classica ruota dei colori RGB per generare colori arcobaleno morbidi. Ogni carattere è disegnato con un leggero offset di colore diverso e i colori cambiano nel tempo, producendo un'animazione arcobaleno fluida.
// 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);
}Man mano che il testo scorre, ogni carattere avanza attraverso lo spettro RGB, creando un effetto arcobaleno continuo che appare particolarmente impressionante sul piccolo display 8×8.
Comportamento della visualizzazione di data e ora
L'orologio mantiene buffer separati per l'ora e la data:
- Tempo:
HH:MM - Data:
MMM DD(per esempioJAN 08)
La data è mostrata a un intervallo fisso:
const uint32_t dateIntervalMs = 60000; // Show date every 1 minuteAlla fine di ogni ciclo di scorrimento completo, il codice decide se continuare a mostrare l'ora o passare alla data.
Logica di scorrimento su una matrice 8×8
Poiché il display è largo solo 8 pixel, il testo scorre senza intoppi da destra a sinistra. Una volta che il testo esce completamente dallo schermo, il cursore si resetta e il contenuto successivo (ora o data) viene caricato per il passaggio successivo.
Dimostrazione
Dopo aver caricato lo sketch e alimentato la scheda tramite USB-C:
- L'ESP32-S3 si connette alla tua rete Wi-Fi
- Il tempo è sincronizzato da Internet.
- Il tempo scorre dentro
HH:MMformato - La data appare periodicamente.
- Tutto il testo viene visualizzato con un effetto arcobaleno animato e fluido.
- Il display si attenua automaticamente di notte e si illumina durante il giorno.
Download e collegamenti
Il codice sorgente completo è fornito sotto questo articolo. Strumenti e riferimenti utili, incluso il selettore di colori RGB, sono anch'essi collegati sotto questo articolo.
Questo tutorial è parte di: Matrice LED RGB ESP32-S3
- Progetti con Matrice LED RGB ESP32-S3 (Gioco Inclinazione, Testo, Freccia, Demo WiFi)
- Progetto Matrice LED RGB ESP32-S3 2 - Testo Scorrevole
- Progetto ESP32-S3 Matrice LED RGB 3 - Testo da telefono cellulare
- Progetto Matrice LED RGB ESP32-S3 4 - Punta inclinata
- Progetto Matrice LED RGB ESP32-S3 5 - Freccia sempre verso l'alto
- Progetto 6 della matrice LED RGB ESP32-S3 - Gioco Cible
- Progetto orologio di base ESP32-S3 Matrice LED RGB Wi-Fi + Orologio NTP -1
- Progetto Orologio Internet con Matrice LED RGB ESP32-S3 - Orologio a colori multipli con visualizzazione di Ora e Data
- Progetto Orologio Internet con Matrice LED RGB ESP32-S3 - Colore Notte 3 con Data
- Progetto Orologio Internet con Matrice LED RGB ESP32-S3 - 4 Colori casuali
- Test della matrice LED RGB ESP32-S3 per impostazione 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();
}
}
Risorse e riferimenti
-
Video
-
Interno🎨 Strumento selettore di colorerobojax.com
File📁
File Fritzing
-
esp32-S3-supermini-tht parte fritzing
esp32-S3-supermini-tht.fzpz0.02 MB