This tutorial is part of: ESP32-S3 RGB LED matrica
Kul projekat za kreiranje zabave i praktičnih aplikacija korištenjem ESP32-S3 RGB Matrix modula. Linkovi do drugih videa nalaze se ispod ovog članka.
ESP32-S3 RGB LED matrica Wi-Fi + NTP sat vremena projekat -1 Osnovni sat
ESP32-S3 Internet sat s 8×8 NeoMatrix (Wi-Fi + NTP vrijeme)
Ovaj projekat pretvara ESP32-S3 i 8×8 RGB NeoMatrix (NeoPixel/WS2812) u mali internet sat. ESP32 se povezuje na Wi-Fi, sinhronizuje lokalno vrijeme sa NTP servera, zatim pomiče vrijeme kao HH:MM preko 8×8 ekrana.

Kako radi (na visokom nivou)
1) ESP32-S3 se povezuje na vaš router koristeći <WiFi.h>.
2) Sinhronizuje vrijeme sa NTP servera koristeći "time.h" i configTime().
3) Vrijeme se formatira kao HH:MM i sprema u mali tekstualni bafer.
4) NeoMatrix prikazuje tekst i pomiče ga preko 8×8 panela.

RGB boja
Boja teksta sata se kontroliše koristeći RGB (crvena, zelena, plava) vrijednosti, gdje svaki kanal boje ide od 0 do 255 i različite kombinacije stvaraju različite boje na NeoMatrix-u. Podešavanjem color_RED, color_GREEN i color_BLUE varijabli, lako možete prilagoditi izgled sata bilo kojoj boji koju želite. Da brzo pronađete tačne RGB vrijednosti za određenu boju, možete koristiti online RGB Color Picker Color Picker .

Korišćene biblioteke
Ovi include-ovi vam tačno govore o čemu skica zavisi:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Instalirajte Adafruit NeoMatrix koristeći Arduino Library Manager. On će također povući potrebne zavisnosti kao što su Adafruit GFX Library i Adafruit NeoPixel.
Važna korisnička podešavanja koja MORATE izmijeniti
1) Boja teksta (RGB)
Postavite boju teksta sata koristeći vrijednosti 0–255:
//postavi boju ekrana napravljenu od crvene, zelene i plave
unsigned int color_RED = 17;
unsigned int color_GREEN = 43;
unsigned int color_BLUE = 171;
Ove vrijednosti se koriste ovdje:
matrix.setTextColor(matrix.Color(color_RED, color_GREEN, color_BLUE));
Napomena: Ako postavite sve boje na 0 (crna), tekst postaje nevidljiv. Skica uključuje sigurnosnu provjeru:
// ako je korisnik postavio sve boje na 0, ekran će biti ugašen pa ga postavi na zelenu
if (color_RED == 0 && color_GREEN == 0 && color_BLUE == 0) {
color_GREEN = 200;
}
Ovo osigurava da matrica nikada ne izgleda “mrtvo” zbog nevidljive postavke boje.
2) Wi-Fi SSID i lozinka
Zamijenite ovo sa vašim stvarnim Wi-Fi imenom i lozinkom:
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
Tokom pokretanja, ESP32 štampa napredak povezivanja u Serial Monitor-u i ističe nakon otprilike 15 sekundi (30 pokušaja × 500ms).
3) NTP server
Podrazumijevani NTP server je:
const char* ntpServer = "pool.ntp.org";
Možete ga ostaviti kako jeste. Ako ikada želite koristiti lokalni server, zamijenite naziv hosta sa vašim željenim NTP serverom.
4) Vremenska zona offset i ljetno vrijeme offset
Ova dva podešavanja kontrolišu lokalno vrijeme:
// Toronto-ish: UTC-5, plus 1 sat DST
const long gmtOffset_sec = -5 * 3600; // -5 sati
const int daylightOffset_sec = 3600; // +1 sat za DST
Kako ih postaviti:
gmtOffset_sec= (UTC offset sati) × 3600. Primjer: UTC-5 →-5*3600, UTC+2 →2*3600.daylightOffset_sec=0ako ne želite prilagođavanje za ljetno vrijeme, ili3600ako vaša regija trenutno primjenjuje ljetno vrijeme (+1 sat).
Ovo se primjenjuje ovdje:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Konfiguracija ekrana
Pin za podatke matrice
Pin za podatke je definisan ovdje:
#define MATRIX_PIN 14
Ako vaše povezivanje koristi drugačiji GPIO, promijenite ovaj broj da odgovara.
NeoMatrix raspored + redoslijed boja
Vaša matrica se inicijalizira ovako:
Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
NEO_RGB + NEO_KHZ800);
Dva česta razloga zašto ekran izgleda “pogrešno”:
- Rotacija / smjer povezivanja: Ako se tekst pojavi naopako ili zrcaljeno, prilagodite
NEO_MATRIX_*zastavice (TOP/BOTTOM, LEFT/RIGHT, ROWS/COLUMNS, PROGRESSIVE/ZIGZAG). - Redoslijed boja: Ovaj kod koristi
NEO_RGB. Neki paneli suNEO_GRB. Ako crvena/zelena/plava ne odgovaraju, promijeniteNEO_RGBu ispravan redoslijed.
Svjetlina
Svjetlina se postavlja u initMatrix():
matrix.setBrightness(40);
Povećajte za svjetliji ekran, smanjite za manje toplote i potrošnje energije.
Kako se vrijeme generiše kao HH:MM
Sat sprema formatirano vrijeme u bafer od 6 karaktera:
char timeText[6] = "00:00";
Zatim updateTimeText() čita lokalno vrijeme sinhronizovano s NTP-om i upisuje tekst:
// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d",
timeinfo.tm_hour,
timeinfo.tm_min);
Ovo se ažurira jednom u sekundi u glavnoj petlji.
Kako funkcioniše skrolanje na 8×8 displeju
Matrica 8×8 je preuska da bi prikazala HH:MM odjednom, pa skica skrola tekst. Crta vrijeme na promjenjivoj X poziciji (scrollX), zatim ga pomjera lijevo za jedan piksel pri svakom ažuriranju.
int16_t scrollX = 8;
const uint16_t scrollIntervalMs = 120;
Svaki korak skrolanja:
matrix.fillScreen(0);
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
Kada tekst u potpunosti izađe s lijeve strane, kod ga resetuje da počne ponovo s desne ivice:
int16_t textWidth = 30;
if (scrollX < -textWidth) {
scrollX = matrix.width();
}
Serijski monitor izlaz (debugiranje)
Ova skica ispisuje korisne poruke:
- Napredak Wi-Fi povezivanja i IP adresu
- Da li je sinhronizacija vremena uspjela
- Formatirani vremenski string (npr.,
Time text: 14:32)
Ako je displej prazan, Serijski monitor je prvo mjesto za provjeru kako bi se potvrdilo da Wi-Fi i NTP rade.
Demonstracija projekta
Nakon uploada i resetovanja:
- ESP32 se povezuje na Wi-Fi
- Sinhronizuje vrijeme s
pool.ntp.org - Kratko prikazuje
OKna matrici - Neprekidno skrola trenutno vrijeme kao
HH:MM
Preuzimanja i linkovi
Kompletan kod je dat ispod ovog članka. Dijelovi, alati i tehnički listovi su također povezani ispod ovog članka.
This tutorial is part of: ESP32-S3 RGB LED matrica
- ESP32-S3 RGB LED Matrix projekat 1 - Osnovna tačka
- ESP32-S3 RGB LED Matrix projekat 2 - Tekst koji se pomiče
- ESP32-S3 RGB LED Matrix projekat 3 - Tekst sa mobilnog telefona
- ESP32-S3 RGB LED Matrix projekat 4 - Tilt tačka
- ESP32-S3 RGB LED Matrica Projekat 5 - Strelica uvijek gore
- ESP32-S3 RGB LED Matrix projekat 6 - Cible igra
- ESP32-S3 RGB LED matrica Internet sat projekat - 2 sata višebojni prikaz vremena i datuma
- ESP32-S3 RGB LED matrica internet sat projekat - 3 noćne boje sa datumom
- ESP32-S3 RGB LED matrica internet sat projekat - 5 duginih boja
- ESP32-S3 RGB LED matrica internet sat projekat - 4 nasumične boje
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
This is ESP32 sketch that connects to the internet, gets the time and displays it on the RGB matrix
you must set your WiFi correctly to make sure it gets connected.
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT838
* Author: Ahmad Shamshiri (Robojax.com)
* Date: 07 Jan 2026
www.Robojax.com
https://youTube.com/@robojax
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
//set the color of diplay make of Red, Green and Blue
unsigned int color_RED = 17;
unsigned int color_GREEN = 43;
unsigned int color_BLUE = 171;
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
#define MATRIX_PIN 14
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;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 120;
unsigned long lastTimeUpdateMs = 0;
const uint16_t timeUpdateIntervalMs = 1000;
//prototypes
bool updateTimeText(); // forward declaration
void scrollTime(); // forward declaration
// 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
bool updateTimeText() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time for display");
return false;
}
// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d",
timeinfo.tm_hour,
timeinfo.tm_min);
Serial.print("Time text: ");
Serial.println(timeText);
return true;
}
void scrollTime() {
matrix.fillScreen(0);
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
// Rough width: 5 characters ("HH:MM") × 6 pixels each ≈ 30 px
int16_t textWidth = 30;
if (scrollX < -textWidth) {
scrollX = matrix.width(); // reset to right edge (8)
}
}
void initMatrix() {
matrix.begin();
matrix.setBrightness(40); // be careful with heat
matrix.setTextWrap(false);
matrix.setTextColor(matrix.Color(color_RED, color_GREEN, color_BLUE)); // color of text
}
void showMessage(const char* msg) {
matrix.fillScreen(0);
matrix.setCursor(0, 0); // top-left
matrix.print(msg);
matrix.show();
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
// Format: 2025-11-18 14:35:12
Serial.printf("%04d-%02d-%02d %02d:%02d:%02d\n",
timeinfo.tm_year + 1900,
timeinfo.tm_mon + 1,
timeinfo.tm_mday,
timeinfo.tm_hour,
timeinfo.tm_min,
timeinfo.tm_sec);
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println();
Serial.println("ESP32-S3 Internet Clock - WiFi + NTP test");
// 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());
}
// if user set all colors to 0, the dispaly will be turned off so set it green
if(color_RED ==0 & color_GREEN ==0 && color_BLUE ==0)
{
color_GREEN = 200;
}
// Configure time via NTP
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Serial.println("Waiting for time...");
delay(2000); // small wait for initial sync
printLocalTime(); // print once at startup
// NEW: init the LED matrix and show a test message
initMatrix();
showMessage("OK");
}
void loop() {
unsigned long now = millis();
// Update the time string "HH:MM" once per second
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeText(); // fills timeText[], e.g. "14:32"
}
// Scroll the time across the 8×8 every scrollIntervalMs
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollTime(); // uses timeText and scrollX
}
}
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
Files📁
Fritzing File
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB