This tutorial is part of: ESP32-S3 RGB LED матрица
Одличен проект за креирање за забавни и практични апликации со користење на ESP32-S3 RGB Matrix модулот. Линкови до други видеа се наоѓаат под оваа статија.
Проект за интернет часовник со RGB LED матрица базиран на ESP32-S3 - 4 случајни бои
Интернет часовник ESP32-S3 со случајни RGB бои
Овој проект е ESP32-S3 RGB Matrix интернет часовник кој се поврзува на Wi-Fi, ја синхронизира локалната временска зона од NTP сервер и го прикажува времето во HH:MM формат преку вградената 8×8 RGB NeoMatrix матрица. Во оваа верзија, часовите, две точки и минутите се прикажани во случајни бои избрани при секој целосен циклус на движење, создавајќи динамичен и разигран приказ на часовникот кој постојано се менува.

Како работи овој часовник
По напојувањето на плочката преку USB-C, ESP32-S3 се поврзува на вашата Wi-Fi мрежа и го презема моменталното локално време од интернет. Времето е поделено на три дела—часови, две точки и минути—и секој дел е нацртан одделно на RGB матрицата. Кога текстот целосно ќе се оддалечи од екранот, се избираат нови случајни бои за следниот премин.
Користени библиотеки
Овој код ги користи следниве библиотеки:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Инсталирајте го Adafruit NeoMatrix од Arduino Library Manager. Потребните зависности како Adafruit GFX Library и Adafruit NeoPixel ќе бидат инсталирани автоматски.

Важна корисничка конфигурација
Пин за податоци на матрицата (вградена RGB матрица)
Иако RGB матрицата е интегрирана на плочката, пинот за податоци сепак мора да биде дефиниран во кодот:

#define MATRIX_PIN 14
GPIO 14 најчесто се користи на ESP32-S3 RGB матрица плочките. Ако вашата варијанта на плочката користи различен пин, ажурирајте ја оваа вредност соодветно.
Wi-Fi SSID и лозинка (осетливи на големи/мали букви)
Заменете ги Wi-Fi акредитивите со деталите на вашата мрежа:
const char* WIFI_SSID = "your WiFi SSID";
const char* WIFI_PASSWORD = "passW0rd";
Важно: Wi-Fi SSID имињата се осетливи на големи/мали букви. SSID наречен "Book" не е исто што и "book". Ако големината на буквите не се совпаѓа точно, ESP32-S3 нема да може да се поврзе.
NTP сервер, временска зона и летно сметање на времето
Синхронизацијата на времето се прави преку интернет NTP сервер:
const char* ntpServer = "pool.ntp.org";
Локалното време се пресметува користејќи UTC и офсети за летно сметање на времето:
// Торонто-слично: UTC-5, плус 1 час летно сметање
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: UTC офсет во секунди (прилагодете за вашата локација)daylightOffset_sec: Користете3600кога летното сметање е активно, или0во спротивно
Овие поставки се применуваат користејќи:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Автоматска осветленост за ден/ноќ
Часовникот автоматски ја прилагодува осветленоста врз основа на моменталниот час:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
Помеѓу 22:00 и 06:00, екранот се затемнува за да го намали отсјајот во темни средини. Во текот на дневните часови, матрицата се враќа на нормална осветленост.
Однесување на случајни RGB бои
Предефинирана листа на RGB бои е складирана во низа, каде што секоја боја е дефинирана со вредности за црвена, зелена и сина боја кои се движат од 0 до 255:
uint8_t userColors[][3] = {
{255, 0, 0}, // Црвена
{0, 255, 0}, // Зелена
{0, 0, 255}, // Сина
{255, 165, 0}, // Портокалова
{255, 0, 255}, // Магента
{0, 255, 255}, // Цијан
{255, 255, 0} // Жолта
};
При секој целосен циклус на движење:
- На цифрите за часови им се доделува случајна боја
- Двете точки добиваат различна случајна боја
- Цифрите за минути добиваат друга случајна боја
Ова произведува постојано менувачка комбинација на бои што го прави часовникот визуелно интересен. За да креирате свои сопствени бои, можете да ја користите алатката RGB Color Picker: RGB Color Picker.
Логика за прикажување на времето
Времето е поделено на три компоненти:
- Часови:
HH - Две точки:
: - Минути:
MM
Секој дел е нацртан поединечно за да може да има своја боја, додека сите делови се движат заедно за да формираат мазна анимација на движење низ 8×8 екранот.
Генерирање случајни бои
За да се обезбеди случајност на боите, кодот го иницијализира генераторот на случајни броеви при стартување користејќи неповрзан аналоген пин:
randomSeed(analogRead(0));
Ова осигурува дека комбинациите на бои се различни при секое вклучување и при секој циклус на движење.
Демонстрација
По поставувањето на кодот и напојувањето на плочката преку USB-C:
- ESP32-S3 се поврзува на вашата Wi-Fi мрежа
- Времето се синхронизира од интернет
- Времето се движи во
HH:MMформат - Часовите, двете точки и минутите се менуваат во случајни бои при секој циклус
- Екранот автоматски се затемнува ноќе
Преземања и линкови
Целосниот изворен код е даден под овој напис. Корисни алатки и референци се поврзани под овој напис.
This tutorial is part of: ESP32-S3 RGB LED матрица
- ESP32-S3 RGB LED матричен проект 1 - Основна точка
- ESP32-S3 RGB LED матричен проект 2 - Лизгачки текст
- Проект 3 со RGB LED матрица на ESP32-S3 - Текст од мобилен телефон
- Проект 4 со RGB LED матрица на ESP32-S3 - Тилт точка
- ESP32-S3 RGB LED матричен проект 5 - Стрелка секогаш нагоре
- ESP32-S3 RGB LED матрица проект 6 - Игра „Цел“
- ESP32-S3 RGB LED матрица Wi-Fi + NTP часовник проект -1 Основен часовник
- Проект за интернет часовник со RGB LED матрица базиран на ESP32-S3 - 2 часовници со повеќебоен приказ на време и датум
- ESP32-S3 RGB LED матричен интернет часовник проект - 3 ноќни бои со датум
- Проект за интернет часовник со RGB LED матрица базиран на ESP32-S3 - 5 виножито боја
- 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