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 Internet sat projekat - 2 sata višebojni prikaz vremena i datuma
ESP32-S3 RGB NeoMatrix Internet Sat s prikazom vremena i datuma
Ovaj projekat je poboljšani ESP32-S3 RGB Matrix Internet sat koji ne samo da prikazuje trenutno vrijeme, već i povremeno prikazuje datum. ESP32-S3 se povezuje na Wi-Fi, sinhronizuje vrijeme sa NTP servera i pomiče ili HH:MM ili datum (na primjer SEP 21) preko 8×8 RGB NeoMatrix ekrana. Displej podržava automatsku kontrolu svjetline za dan/noć i prilagodljive RGB boje.

Šta ovaj sat radi
Nakon povezivanja na vašu Wi-Fi mrežu, ESP32-S3 preuzima trenutno lokalno vrijeme sa interneta. Sat normalno pomiče vrijeme, ali u fiksnom intervalu prelazi na prikaz datuma. Boja teksta može biti fiksna na jednu boju ili se automatski mijenjati kroz više korisnički definiranih boja. Svjetlina se automatski smanjuje noću kako bi displej bio lakši za oči.
Korištene biblioteke
Ovaj sketch zavisi od sljedećih biblioteka:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Instalirajte Adafruit NeoMatrix iz Arduino Library Manager-a. Sve potrebne zavisnosti kao što su Adafruit GFX Library i Adafruit NeoPixel će se automatski instalirati.

Važna korisnička konfiguracija
Wi-Fi SSID i lozinka (osjetljivo na velika/mala slova)
Morate zamijeniti Wi-Fi kredencijale sa informacijama vaše mreže:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
Važno: Wi-Fi SSID-ovi su osjetljivi na velika/mala slova. Na primjer, SSID nazvan "Book" nije isti kao "book". Ako se velika i mala slova ne poklapaju tačno, ESP32 neće uspjeti da se poveže.
NTP server, vremenska zona i ljetno računanje vremena
Sat koristi internet vremenski server:
const char* ntpServer = "pool.ntp.org";
Lokalno vrijeme se izračunava koristeći ove offsete:
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: Vaš UTC offset u sekundama (primjer: UTC-5 =-5 * 3600)daylightOffset_sec: Koristite3600za ljetno računanje vremena ili0ako se ljetno računanje vremena ne koristi
Ove postavke se primjenjuju koristeći:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Kontrola svjetline (dan / noć)
Ovaj projekat automatski prilagođava svjetlinu na osnovu sata u danu:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
Između 22:00 i 6:00, svjetlina se smanjuje kako bi displej bio manje ometajući u tamnim okruženjima. Ove vrijednosti možete prilagoditi prema vašim željama.
RGB konfiguracija boja
Sat podržava i fiksni način boja i automatsko mijenjanje boja. Korisnički definirane RGB boje se pohranjuju u niz:
uint8_t userColors[][3] = {
{17, 43, 171}, // Svijetlo plava
{255, 0, 0}, // Crvena
{0, 255, 0}, // Zelena
{255, 165, 0}, // Narandžasta
{255, 0, 255} // Magenta
};
Svaka boja koristi RGB (crvena, zelena, plava) vrijednosti u rasponu od 0 do 255. Promjenom ovih brojeva možete kreirati gotovo bilo koju boju za displej. Ako je useFixedColor postavljen na true, sat uvijek koristi jednu boju. Ako je postavljen na false, boja se automatski mijenja nakon svakog punog pomicanja.
Da brzo pronađete tačne RGB vrijednosti za bilo koju boju koju želite, koristite RGB Color Picker alat Color Picker .
Formatiranje vremena i datuma
Vrijeme je formatirano kao HH:MM i pohranjeno u mali karakter bafer. Datum je formatiran kao string s velikim slovima kao što je SEP 21. Displej se automatski prebacuje između vremena i datuma u fiksnom intervalu.
Logika pomicanja na 8×8 displeju
Pošto je 8×8 matrica premala da prikaže cijeli tekst odjednom, sketch pomiče tekst horizontalno. Kada tekst potpuno napusti displej, boja se ažurira i sadržaj se prebacuje između vremena i datuma kada je potrebno.
Demonstracija
Nakon uploada sketch-a:
- ESP32 se povezuje na Wi-Fi
- Vrijeme se sinhronizuje sa interneta
- Trenutno vrijeme se pomiče preko matrice
- Datum se pojavljuje periodično
- Svjetlina se automatski prilagođava za dan i noć
Preuzimanja i linkovi
Kompletan izvorni kod je dat ispod ovog članka. Linkovi za dijelove, alate i tehničke listove također su dostupni 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 Wi-Fi + NTP sat vremena projekat -1 Osnovni sat
- 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
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 2
Multi color
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT839
* Author: 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 when text finishes a full scroll.
* 3. Auto-Brightness: Dims the LEDs during night hours (User-configurable).
* 4. Periodic Date: Scrolls the date (e.g., "JAN 07") every 2 minutes.
* * USER CONFIGURATION GUIDE:
* -------------------------
* - WiFi: Change 'WIFI_SSID' and 'WIFI_PASSWORD' to your local network.
* - Colors: Add or remove {R, G, B} sets in the 'userColors' array.
* - Night Mode: Adjust 'NIGHT_START_HOUR' and 'NIGHT_BRIGHTNESS'.
* =====================================================================================
*/
#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;
const int NIGHT_END_HOUR = 6;
// --- 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]);
// --- DATE/TIME INTERVALS ---
unsigned long lastDateShowMs = 0;
const uint32_t dateIntervalMs = 30000; // 2 minutes
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";
char dateText[10] = "";
char currentDisplayText[12] = "";
int16_t scrollX = 8;
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
void updateTimeAndDate() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
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]);
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);
// FIXED LOGIC: Uses currentColorIndex which only changes at the end of a scroll
int idx = useFixedColor ? fixedColorIndex : currentColorIndex;
matrix.setTextColor(matrix.Color(userColors[idx][0], userColors[idx][1], userColors[idx][2]));
matrix.setCursor(scrollX, 0);
matrix.print(currentDisplayText);
matrix.show();
scrollX--;
int16_t textWidth = strlen(currentDisplayText) * 6;
// THE TRIGGER POINT: This happens only when text is fully off-screen
if (scrollX < -textWidth) {
scrollX = matrix.width();
// 1. Cycle the color now and only now
if (!useFixedColor) {
currentColorIndex = (currentColorIndex + 1) % totalColors;
}
// 2. Decide whether to switch between Time and Date
if (millis() - lastDateShowMs > dateIntervalMs) {
strcpy(currentDisplayText, dateText);
lastDateShowMs = millis();
} else {
strcpy(currentDisplayText, timeText);
}
}
}
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);
updateTimeAndDate();
strcpy(currentDisplayText, timeText);
}
void loop() {
unsigned long now = millis();
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeAndDate();
}
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollDisplay();
}
}
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