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 - 3 noćne boje sa datumom
ESP32-S3 RGB NeoMatrix Internet Sat s automatskim podešavanjem svjetline za dan/noć
Ovaj projekat je ESP32-S3 RGB Matrix Internet sat koji automatski podešava svjetlinu tokom dana i noći. ESP32-S3 se povezuje na Wi-Fi, sinhronizuje trenutno vrijeme sa NTP servera i pomiče vrijeme u HH:MM formatu preko 8×8 RGB NeoMatrix ekrana. Sat također podržava fiksne ili ciklične RGB boje za tekst na ekranu.

Šta ovaj sat radi
Nakon uključivanja, ESP32-S3 se povezuje na vašu Wi-Fi mrežu i preuzima trenutno lokalno vrijeme s interneta. Vrijeme se glatko pomiče preko LED matrice. Tokom noćnih sati, ekran se automatski prigušuje na nižu svjetlinu, dok se tokom dana vraća na svjetliji nivo.
Korištene biblioteke
Ovaj sketch koristi sljedeće biblioteke:

#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 poput 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)
Zamijenite sljedeće vrijednosti svojim Wi-Fi kredencijalima:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
Važno: Wi-Fi SSID-ovi su osjetljivi na velika/mala slova. 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 sinhronizuje vrijeme koristeći sljedeći NTP 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_secdefinira vaš UTC offset u sekundamadaylightOffset_secdodaje jedan sat kada je ljetno računanje vremena aktivno (koristite0ako nije potrebno)
Ove vrijednosti se primjenjuju sa:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Automatska svjetlina za dan/noć
Svjetlina ekrana se automatski mijenja na osnovu trenutnog sata:
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
Između 22:00 i 6:00, svjetlina matrice se smanjuje kako bi bila ugodna u tamnim okruženjima. Izvan tih sati, vraća se puna dnevna svjetlina. Ove vrijednosti možete prilagoditi osvjetljenju svoje prostorije.
RGB konfiguracija boja
Boja teksta sata definirana je pomoću RGB (crvena, zelena, plava) vrijednosti, gdje svaki kanal ide od 0 do 255. Više boja može se pohraniti u niz i automatski ciklirati:
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
};
Ako je useFixedColor postavljen na true, sat uvijek koristi jednu boju. Ako je postavljen na false, boja se automatski mijenja nakon svakog punog prolaska vremena.
Da brzo pronađete tačne RGB vrijednosti za bilo koju boju, koristite RGB Color Picker alat: Color Picker .
Prikaz vremena i pomicanje
Trenutno vrijeme je formatirano kao HH:MM i pohranjeno u mali bafer znakova. Pošto je ekran širok samo 8 piksela, tekst se glatko pomiče s desna na lijevo. Kada vrijeme u potpunosti napusti ekran, sljedeća boja (ako je omogućena) se bira za sljedeći prolaz.
Demonstracija
Nakon uploada sketch-a:
- ESP32-S3 se povezuje na Wi-Fi
- Vrijeme se sinhronizuje s interneta
- Trenutno vrijeme se pomiče preko RGB matrice
- Svjetlina se automatski mijenja između dana i noći
- Boja teksta ostaje fiksna ili se ciklira na osnovu vaših postavki
Preuzimanja i linkovi
Kompletan izvorni kod je dat ispod ovog članka. Linkovi za dijelove, alate i tehničke listove dostupni su 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 - 2 sata višebojni prikaz vremena i datuma
- 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 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