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 - 3 nočné farby s dátumom
ESP32-S3 RGB NeoMatrix internetové hodiny s automatickým jasom deň/noc
Tento projekt je ESP32-S3 RGB Matrix internetový hodinový displej, ktorý automaticky upravuje jas počas dňa a noci. ESP32-S3 sa pripojí k Wi-Fi, synchronizuje aktuálny čas z NTP servera a zobrazuje čas vo formáte HH:MM posúvaním cez 8×8 RGB NeoMatrix. Hodiny tiež podporujú pevné alebo cyklické RGB farby pre text displeja.

Čo tieto hodiny robia
Po zapnutí sa ESP32-S3 pripojí k vašej Wi-Fi sieti a získa aktuálny miestny čas z internetu. Čas sa plynulo posúva cez LED maticu. Počas nočných hodín sa displej automaticky stlmí na nižší jas, zatiaľ čo cez deň sa prepne späť na jasnejšiu úroveň.
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 z Arduino Library Manager. Všetky potrebné závislosti, ako napríklad Adafruit GFX Library a Adafruit NeoPixel, sa nainštalujú automaticky.

Dôležitá konfigurácia používateľa
Wi-Fi SSID a heslo (rozlišujú sa veľké a malé písmená)
Nahraďte nasledujúce hodnoty vlastnými Wi-Fi prihlasovacími údajmi:

const char* WIFI_SSID = "WiFi";
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 to isté ako "book". Ak sa veľkosť písmen presne nezhoduje, ESP32 sa nepripojí.
NTP server, časové pásmo a letný čas
Hodiny synchronizujú čas pomocou nasledujúceho NTP servera:
const char* ntpServer = "pool.ntp.org";
Miestny čas sa vypočíta pomocou týchto offsetov:
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_secdefinuje váš UTC offset v sekundáchdaylightOffset_secpridá jednu hodinu, keď je aktívny letný čas (použite0, ak nie je potrebný)
Tieto hodnoty sa aplikujú pomocou:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Automatický jas deň / noc
Jas displeja sa automaticky mení na základe aktuálnej hodiny:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22; // 10 PM
const int NIGHT_END_HOUR = 6; // 6 AM
Medzi 22:00 a 6:00 sa jas matice zníži, aby bol pohodlný v tmavom prostredí. Mimo týchto hodín sa obnoví plný denný jas. Tieto hodnoty môžete upraviť podľa osvetlenia vašej miestnosti.
Konfigurácia RGB farieb
Farba textu hodín je definovaná pomocou RGB (červená, zelená, modrá) hodnôt, kde každý kanál sa pohybuje od 0 do 255. Viacero farieb môže byť uložených v poli a automaticky cyklovaných:
uint8_t userColors[][3] = {
{17, 43, 171}, // Svetlo modrá
{255, 0, 0}, // Červená
{0, 255, 0}, // Zelená
{255, 165, 0}, // Oranžová
{255, 0, 255} // Purpurová
};
Ak je useFixedColor nastavené na true, hodiny vždy používajú jednu farbu. Ak je nastavené na false, farba sa automaticky zmení po každom úplnom posunutí času.
Na rýchle nájdenie presných RGB hodnôt pre akúkoľvek farbu použite nástroj RGB Color Picker: Color Picker .
Zobrazenie času a posúvanie
Aktuálny čas je formátovaný ako HH:MM a uložený v malom znakovom bufferi. Pretože displej je široký iba 8 pixelov, text sa plynulo posúva sprava doľava. Keď čas úplne opustí displej, vyberie sa ďalšia farba (ak je povolená) pre ďalší prechod.
Demonštrácia
Po nahraní náčrtu:
- ESP32-S3 sa pripojí k Wi-Fi
- Čas sa synchronizuje z internetu
- Aktuálny čas sa posúva cez RGB maticu
- Jas sa automaticky mení medzi dňom a nocou
- Farba textu zostáva pevná alebo cykluje podľa vašich nastavení
Stiahnutia a odkazy
Kompletný zdrojový kód je uvedený nižšie v tomto článku. Odkazy na diely, nástroje a datasheety sú dostupné 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 - 5 dúhových farieb
- Projekt internetových hodín s RGB LED maticou ESP32-S3 - 4 náhodné farby
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 3- Night color with Date
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT840
* 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).
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// --- BRIGHTNESS CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22; // 10 PM
const int NIGHT_END_HOUR = 6; // 6 AM
// --- COLOR CONFIGURATION ---
bool useFixedColor = false;
int fixedColorIndex = 0;
uint8_t userColors[][3] = {
{17, 43, 171}, // Light Blue
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{255, 165, 0}, // Orange
{255, 0, 255} // Magenta
};
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
int currentColorIndex = 0;
int totalColors = sizeof(userColors) / sizeof(userColors[0]);
// --- INTERVALS ---
unsigned long lastTimeUpdateMs = 0;
const uint16_t timeUpdateIntervalMs = 1000;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
// --- GLOBAL VARIABLES ---
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";
int16_t scrollX = 8;
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
void updateTimeText() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min);
// Apply Auto-Brightness
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);
// Pick the color (Fixed or Cycle)
int idx = useFixedColor ? fixedColorIndex : currentColorIndex;
matrix.setTextColor(matrix.Color(userColors[idx][0], userColors[idx][1], userColors[idx][2]));
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
// Width for "HH:MM" is roughly 30 pixels
int16_t textWidth = 30;
// TRIGGER: When time is fully off-screen
if (scrollX < -textWidth) {
scrollX = matrix.width(); // Reset position to right side
// Cycle to the next color in the array for the next pass
if (!useFixedColor) {
currentColorIndex = (currentColorIndex + 1) % totalColors;
Serial.print("Next cycle color index: ");
Serial.println(currentColorIndex);
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(DAY_BRIGHTNESS);
updateTimeText();
}
void loop() {
unsigned long now = millis();
// Update time digits and brightness once per second
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeText();
}
// Handle the scrolling animation
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollTime();
}
}
Things you might need
-
Amazon
-
eBay
-
AliExpressPurchase ESP32-S3 RGB Matrix from AliExpresss.click.aliexpress.com
-
AliExpressPurchase ESP32-S3 RGB Matrix from AliExpress (2)s.click.aliexpress.com
Resources & references
-
Video
-
Internal🎨 Color picker Toolrobojax.com
Files📁
Fritzing File
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB