This tutorial is part of: ESP32-S3 RGB LED matica
Skvelý projekt na tvorbu zábavných a praktických aplikácií s použitím modulu ESP32-S3 RGB Matrix. Odkazy na ďalšie videá nájdete pod týmto článkom.
Projekt internetových hodín s RGB LED maticou ESP32-S3 - 4 náhodné farby
ESP32-S3 internetové hodiny s náhodnými RGB farbami
Tento projekt je ESP32-S3 RGB Matrix internetový hodinový displej, ktorý sa pripája k Wi-Fi, synchronizuje miestny čas z NTP servera a posúva čas vo formáte HH:MM cez vstavanú 8×8 RGB NeoMatrix. V tejto verzii sú hodiny, dvojbodka a minúty zobrazené v náhodných farbách, ktoré sa vyberajú pri každom úplnom cykle posúvania, čím vytvárajú dynamický a hravý hodinový displej, ktorý sa neustále mení.

Ako tieto hodiny fungujú
Po napájaní dosky cez USB-C sa ESP32-S3 pripojí k vašej Wi-Fi sieti a získa aktuálny miestny čas z internetu. Čas je rozdelený na tri časti—hodiny, dvojbodku a minúty—a každá časť je vykreslená samostatne na RGB matici. Keď sa text úplne posunie z obrazovky, pre ďalší prechod sa vyberú nové náhodné farby.
Použité knižnice
Tento náčrt používa nasledujúce knižnice:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Nainštalujte Adafruit NeoMatrix zo správcu knižníc Arduino. Požadované závislosti ako Adafruit GFX Library a Adafruit NeoPixel sa nainštalujú automaticky.

Dôležitá konfigurácia používateľa
Pin dát matice (vstavaná RGB matica)
Hoci je RGB matica integrovaná na doske, pin dát musí byť stále definovaný v kóde:

#define MATRIX_PIN 14
GPIO 14 sa bežne používa na ESP32-S3 RGB maticových doskách. Ak váš variant dosky používa iný pin, aktualizujte túto hodnotu podľa potreby.
Wi-Fi SSID a heslo (rozlišujú sa veľké a malé písmená)
Nahraďte Wi-Fi prihlasovacie údaje údajmi vašej vlastnej siete:
const char* WIFI_SSID = "your WiFi SSID";
const char* WIFI_PASSWORD = "passW0rd";
Dôležité: Wi-Fi SSID rozlišuje veľké a malé písmená. SSID s názvom "Book" nie je rovnaké ako "book". Ak sa veľkosť písmen presne nezhoduje, ESP32-S3 sa nepripojí.
NTP server, časové pásmo a letný čas
Synchronizácia času sa vykonáva pomocou internetového NTP servera:
const char* ntpServer = "pool.ntp.org";
Miestny čas sa vypočíta pomocou UTC a offsetov letného času:
// Toronto-ish: UTC-5, plus 1 hodina DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: UTC offset v sekundách (upravte podľa vašej polohy)daylightOffset_sec: Použite3600, keď je aktívny letný čas, alebo0v opačnom prípade
Tieto nastavenia sa aplikujú pomocou:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Automatický jas deň / noc
Hodiny automaticky upravujú jas na základe aktuálnej hodiny:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
Medzi 22:00 a 6:00 sa displej stlmí, aby sa znížilo oslnenie v tmavom prostredí. Počas denných hodín sa matica vráti na normálny jas.
Správanie náhodných RGB farieb
Vopred definovaný zoznam RGB farieb je uložený v poli, kde každá farba je definovaná pomocou hodnôt červenej, zelenej a modrej v rozsahu od 0 do 255:
uint8_t userColors[][3] = {
{255, 0, 0}, // Červená
{0, 255, 0}, // Zelená
{0, 0, 255}, // Modrá
{255, 165, 0}, // Oranžová
{255, 0, 255}, // Purpurová
{0, 255, 255}, // Azúrová
{255, 255, 0} // Žltá
};
Pri každom úplnom cykle posúvania:
- Číslice hodín dostanú náhodnú farbu
- Dvojbodka dostane inú náhodnú farbu
- Číslice minút dostanú ďalšiu náhodnú farbu
To vytvára neustále sa meniacu farebnú kombináciu, ktorá udržiava hodiny vizuálne zaujímavé. Ak chcete vytvoriť vlastné farby, môžete použiť nástroj RGB Color Picker: RGB Color Picker.
Logika vykresľovania času
Čas je rozdelený na tri komponenty:
- Hodiny:
HH - Dvojbodka:
: - Minúty:
MM
Každá časť je vykreslená samostatne, aby mohla mať vlastnú farbu, pričom všetky časti sa pohybujú spolu a vytvárajú plynulú animáciu posúvania cez 8×8 displej.
Generovanie náhodných farieb
Aby sa zabezpečila náhodnosť farieb, náčrt na začiatku inicializuje generátor náhodných čísel pomocou nepripojeného analógového pinu:
randomSeed(analogRead(0));
To zaručuje, že farebné kombinácie sú pri každom zapnutí a každom cykle posúvania iné.
Demonštrácia
Po nahraní náčrtu a napájaní dosky cez USB-C:
- ESP32-S3 sa pripojí k vašej Wi-Fi sieti
- Čas sa synchronizuje z internetu
- Čas sa posúva vo formáte
HH:MM - Hodiny, dvojbodka a minúty sa každý cyklus menia na náhodné farby
- Displej sa v noci automaticky stlmí
Stiahnutia a odkazy
Kompletný zdrojový kód je uvedený nižšie v tomto článku. Užitočné nástroje a referencie sú prepojené nižšie v tomto článku.
This tutorial is part of: ESP32-S3 RGB LED matica
- Projekt ESP32-S3 RGB LED matice 1 – Základná bodka
- Projekt 2 s RGB LED maticou ESP32-S3 - Posúvajúci sa text
- Projekt 3 s RGB LED maticou ESP32-S3 - Text z mobilného telefónu
- Projekt ESP32-S3 RGB LED Matrix 4 - Náklon bodky
- Projekt ESP32-S3 RGB LED Matrix 5 - Šípka vždy hore
- Projekt ESP32-S3 RGB LED Matrix 6 - Hra Cible
- Projekt ESP32-S3 RGB LED matica Wi-Fi + NTP časové hodiny - 1 Základné hodiny
- Projekt internetových hodín s RGB LED maticou ESP32-S3 - 2 hodiny s viacfarebným zobrazením času a dátumu
- Projekt internetových hodín s RGB LED maticou ESP32-S3 - 3 nočné farby s dátumom
- Projekt internetových hodín s RGB LED maticou ESP32-S3 - 5 dúhových farieb
- 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();
}
}
Resources & references
-
Video
-
Internal🎨 Color picker Toolrobojax.com
Files📁
Fritzing File
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB