Acest tutorial face parte din: Matrice LED RGB ESP32-S3
Proiect interesant de creat pentru aplicații distractive și practice folosind modulul ESP32-S3 RGB Matrix. Linkuri către alte videoclipuri sunt sub acest articol.
Proiect de ceas internet cu matrice LED RGB ESP32-S3 - 4 culori aleatorii
Ceas Internet ESP32-S3 cu Culori RGB Aleatorii
Acest proiect este un Ceas Internet cu Matrice RGB ESP32-S3 care se conectează la Wi-Fi, sincronizează ora locală de la un server NTP și defilează ora în format HH:MM pe matricea RGB NeoMatrix integrată de 8×8. În această versiune, orele, două punctele și minutele sunt redate fiecare în culori aleatorii selectate la fiecare ciclu complet de defilare, creând un afișaj de ceas dinamic și jucăuș care se schimbă constant.

Cum funcționează acest ceas
După alimentarea plăcii prin USB-C, ESP32-S3 se conectează la rețeaua ta Wi-Fi și preia ora locală curentă de pe internet. Ora este împărțită în trei părți—ore, două puncte și minute—și fiecare parte este desenată separat pe matricea RGB. Când textul se deplasează complet în afara ecranului, sunt alese noi culori aleatorii pentru următoarea trecere.
Biblioteci utilizate
Acest sketch folosește următoarele biblioteci:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Instalează Adafruit NeoMatrix din Managerul de Biblioteci Arduino. Dependențele necesare, cum ar fi Adafruit GFX Library și Adafruit NeoPixel, vor fi instalate automat.

Configurare importantă pentru utilizator
Pinul de date al matricei (matrice RGB integrată)
Deși matricea RGB este integrată pe placă, pinul de date trebuie totuși definit în cod:

#define MATRIX_PIN 14
GPIO 14 este folosit frecvent pe plăcile cu matrice RGB ESP32-S3. Dacă varianta plăcii tale folosește un alt pin, actualizează această valoare în consecință.
SSID-ul și parola Wi-Fi (sensibile la majuscule)
Înlocuiește credențialele Wi-Fi cu detaliile rețelei tale:
const char* WIFI_SSID = "SSID-ul tău Wi-Fi";
const char* WIFI_PASSWORD = "parola";
Important: SSID-urile Wi-Fi sunt sensibile la majuscule. Un SSID numit "Book" nu este același cu "book". Dacă majusculele nu se potrivesc exact, ESP32-S3 nu se va putea conecta.
Server NTP, fus orar și ora de vară
Sincronizarea orei se face folosind un server NTP de pe internet:
const char* ntpServer = "pool.ntp.org";
Ora locală este calculată folosind offseturile UTC și de oră de vară:
// Aproximativ Toronto: UTC-5, plus 1 oră pentru ora de vară
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: Offsetul UTC în secunde (ajustează pentru locația ta)daylightOffset_sec: Folosește3600când ora de vară este activă, sau0în caz contrar
Aceste setări sunt aplicate folosind:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Luminozitate automată zi / noapte
Ceasul ajustează automat luminozitatea în funcție de ora curentă:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
Între 22:00 și 6:00, afișajul se diminuează pentru a reduce strălucirea în medii întunecate. În timpul orelor de zi, matricea revine la luminozitate normală.
Comportamentul culorilor RGB aleatorii
O listă predefinită de culori RGB este stocată într-un array, unde fiecare culoare este definită folosind valori de Roșu, Verde și Albastru cuprinse între 0 și 255:
uint8_t userColors[][3] = {
{255, 0, 0}, // Roșu
{0, 255, 0}, // Verde
{0, 0, 255}, // Albastru
{255, 165, 0}, // Portocaliu
{255, 0, 255}, // Magenta
{0, 255, 255}, // Cyan
{255, 255, 0} // Galben
};
La fiecare ciclu complet de defilare:
- Cifrele orelor primesc o culoare aleatorie
- Două punctele primesc o culoare aleatorie diferită
- Cifrele minutelor primesc o altă culoare aleatorie
Acest lucru produce o combinație de culori în continuă schimbare care menține ceasul interesant din punct de vedere vizual. Pentru a crea propriile culori personalizate, poți folosi instrumentul RGB Color Picker: RGB Color Picker.
Logica de afișare a orei
Ora este împărțită în trei componente:
- Ore:
HH - Două puncte:
: - Minute:
MM
Fiecare parte este desenată individual pentru a putea avea propria culoare, în timp ce toate părțile se mișcă împreună pentru a forma o animație fluidă de defilare pe afișajul de 8×8.
Generarea culorilor aleatorii
Pentru a asigura aleatorietatea culorilor, sketch-ul inițializează generatorul de numere aleatorii la pornire folosind un pin analogic neconectat:
randomSeed(analogRead(0));
Acest lucru asigură că combinațiile de culori sunt diferite la fiecare pornire și la fiecare ciclu de defilare.
Demonstrație
După încărcarea sketch-ului și alimentarea plăcii prin USB-C:
- ESP32-S3 se conectează la rețeaua ta Wi-Fi
- Ora este sincronizată de pe internet
- Ora defilează în format
HH:MM - Orele, două punctele și minutele se schimbă în culori aleatorii la fiecare ciclu
- Afișajul se diminuează automat noaptea
Descărcări și linkuri
Codul sursă complet este furnizat mai jos în acest articol. Instrumente utile și referințe sunt legate mai jos în acest articol.
Acest tutorial face parte din: Matrice LED RGB ESP32-S3
- Proiect ESP32-S3 cu Matrice LED RGB 1 - Punct de bază
- Proiect ESP32-S3 cu Matrice LED RGB 2 - Text Derulant
- Proiect 3 cu matrice LED RGB ESP32-S3 - Text de pe telefonul mobil
- Proiect ESP32-S3 cu matrice LED RGB 4 - Punct de înclinare
- Proiect ESP32-S3 cu matrice LED RGB 5 - Săgeata mereu în sus
- Proiect Matrice LED RGB ESP32-S3 6 - Joc Cible
- Proiect de ceas Wi-Fi + NTP cu matrice LED RGB ESP32-S3 -1 Ceas de bază
- Proiect de ceas cu matrice LED RGB ESP32-S3 conectat la internet - Afișaj de oră și dată în 2 ceasuri multicolore
- Proiect de ceas cu matrice LED RGB ESP32-S3 conectat la internet - 3 culori de noapte cu dată
- Proiect de ceas internet cu matrice LED RGB ESP32-S3 - 5 culori curcubeu
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 4- Random Color
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT843
* Author: Gemini (AI Thought Partner) & Ahmad Shamshiri (Robojax.com)
* Date: 07 Jan 2026
* * FEATURES:
* 1. WiFi/NTP Time: Syncs automatically with internet time servers.
* 2. Cycle-Based Color: Color changes ONLY after the time finishes a full scroll.
* 3. Auto-Brightness: Dims the LEDs during night hours (User-configurable).
* =====================================================================================
*/
/*
* =====================================================================================
* ESP32-S3 INTERNET CLOCK - MULTI-COLOR ELEMENTS
* =====================================================================================
* Each part of the time (HH : MM) gets a different random color from your list.
* Colors only change once the full scroll cycle is finished.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// --- CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
uint8_t userColors[][3] = {
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{0, 0, 255}, // Blue
{255, 165, 0}, // Orange
{255, 0, 255}, // Magenta
{0, 255, 255}, // Cyan
{255, 255, 0} // Yellow
};
int totalColors = sizeof(userColors) / sizeof(userColors[0]);
// Variables to store the current random color indices
int hourColorIdx = 0;
int colonColorIdx = 1;
int minColorIdx = 2;
// --- GLOBALS ---
Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
NEO_RGB + NEO_KHZ800);
char hourText[3], minText[3];
int16_t scrollX = 8;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "your WiFi SSID";
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
void updateTimeParts() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
snprintf(hourText, sizeof(hourText), "%02d", timeinfo.tm_hour);
snprintf(minText, sizeof(minText), "%02d", timeinfo.tm_min);
if (timeinfo.tm_hour >= NIGHT_START_HOUR || timeinfo.tm_hour < NIGHT_END_HOUR) {
matrix.setBrightness(NIGHT_BRIGHTNESS);
} else {
matrix.setBrightness(DAY_BRIGHTNESS);
}
}
void scrollTime() {
matrix.fillScreen(0);
int x = scrollX;
// 1. Draw Hours
matrix.setTextColor(matrix.Color(userColors[hourColorIdx][0], userColors[hourColorIdx][1], userColors[hourColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(hourText);
x += 12; // Move 12 pixels (2 digits * 6px)
// 2. Draw Colon
matrix.setTextColor(matrix.Color(userColors[colonColorIdx][0], userColors[colonColorIdx][1], userColors[colonColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(":");
x += 6; // Move 6 pixels
// 3. Draw Minutes
matrix.setTextColor(matrix.Color(userColors[minColorIdx][0], userColors[minColorIdx][1], userColors[minColorIdx][2]));
matrix.setCursor(x, 0);
matrix.print(minText);
matrix.show();
scrollX--;
// Total width is roughly 30 pixels (HH=12, :=6, MM=12)
if (scrollX < -30) {
scrollX = matrix.width();
// Pick NEW random colors for the next cycle
hourColorIdx = random(0, totalColors);
colonColorIdx = random(0, totalColors);
minColorIdx = random(0, totalColors);
}
}
void setup() {
Serial.begin(115200);
// Seed the random generator using an unconnected analog pin
randomSeed(analogRead(0));
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(500);
// 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);
}
void loop() {
if (millis() % 1000 == 0) updateTimeParts();
if (millis() - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = millis();
scrollTime();
}
}
Resurse și referințe
-
Video
-
Internă🎨 Color picker Toolrobojax.com
Fișiere📁
Fișier Fritzing
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB