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

Како работи овој часовник
Откако ќе се напојува преку USB-C, ESP32-S3 се поврзува на вашата Wi-Fi мрежа и ја презема тековната локална време од интернет. Екранот нормално ја лизга времето, но во дефиниран интервал се префрла на прикажување на датумот. И времето и датумот се прикажуваат со динамичен виножито ефект, создавајќи живописен и анимиран приказ на малата 8×8 матрица.
Користени библиотеки
Скицата се потпира на следниве библиотеки:

#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, ќе се инсталираат автоматски.

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

#define MATRIX_PIN 14
GPIO 14 најчесто се користи на ESP32-S3 RGB matrix плочи. Ако вашата варијанта на плоча користи различен пин, ажурирајте ја оваа вредност.
Wi-Fi SSID и лозинка (осетливи на големи/мали букви)
Заменете ги Wi-Fi акредитивите со вашите сопствени мрежни детали:
const char* WIFI_SSID = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";
Важно: Wi-Fi SSID-овите се осетливи на големи/мали букви. SSID наречен "Book" не е ист како "book". Ако капитализацијата не се совпаѓа точно, ESP32-S3 нема да може да се поврзе.
NTP сервер, временска зона и летно сметање на времето
Часовникот ја синхронизира времето користејќи интернет NTP сервер:
const char* ntpServer = "pool.ntp.org";
Локалната време се пресметува користејќи ги овие поместувања:
// Торонто-слично: UTC-5, плус 1 час DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: UTC поместување во секунди (пример: UTC-5 =-5 * 3600)daylightOffset_sec: Користете3600ако DST е активно, или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 часот и 6 часот наутро, матрицата се затемнува за да го намали отсјајот. Во текот на дневните часови, нормалната осветленост се враќа.
Виножито ефект во боја
Овој проект користи класично RGB тркало за бои за да генерира мазни виножито бои. Секој знак се црта со малку поинакво поместување на бојата, а боите се менуваат со текот на времето, создавајќи проточен виножито анимација.
// Помошник за создавање виножито бои
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return matrix.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if (WheelPos < 170) {
WheelPos -= 85;
return matrix.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return matrix.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
Додека текстот се лизга, секој знак напредува низ RGB спектарот, создавајќи континуиран виножито ефект кој изгледа особено импресивно на малата 8×8 матрица.
Однесување на приказот на време и датум
Часовникот одржува одделни бафери за време и датум:
- Време:
HH:MM - Датум:
MMM DD(на примерJAN 08)
Датумот се прикажува во фиксен интервал:
const uint32_t dateIntervalMs = 60000; // Прикажи датум секоја 1 минута
На крајот од секој целосен циклус на лизгање, кодот одлучува дали да продолжи со прикажување на времето или да се префрли на датумот.
Логика на лизгање на 8×8 матрица
Бидејќи екранот е широк само 8 пиксели, текстот се лизга мазно од десно кон лево. Откако текстот целосно ќе излезе од екранот, курсорот се ресетира и следната содржина (време или датум) се вчитува за следниот премин.
Демонстрација
По поставувањето на скицата и напојувањето на плочата преку USB-C:
- ESP32-S3 се поврзува на вашата Wi-Fi мрежа
- Времето се синхронизира од интернет
- Времето се лизга во
HH:MMформат - Датумот се појавува периодично
- Сиот текст е прикажан со мазен анимиран виножито ефект
- Екранот автоматски се затемнува ноќе и се осветлува во текот на денот
Преземања и линкови
Целосниот изворен код е даден под овој напис. Корисни алатки и референци, вклучувајќи го и RGB Color Picker-от, исто така се поврзани под овој напис.
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 - 4 случајни бои
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
* =====================================================================================
* ESP32-S3 CLOCK - RAINBOW DATE & SOLID TIME - Project 5- RAINBOW MODE
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT842
* Author: Gemini (AI Thought Partner) & Ahmad Shamshiri (Robojax.com)
* Date: 07 Jan 2026
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK - RAINBOW MODE
* * FEATURES:
* - Full Rainbow: Time and Date use flowing rainbow colors.
* - Auto-Brightness: Dims at night (22:00 to 06:00).
* - Custom WiFi: Robust connection logic with retries.
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "your WIFI";
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
// --- BRIGHTNESS CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22;
const int NIGHT_END_HOUR = 6;
// --- INTERVALS & TRACKING ---
unsigned long lastDateShowMs = 0;
const uint32_t dateIntervalMs = 60000; // Show date every 1 minute
bool isShowingDate = false;
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;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
unsigned long lastTimeUpdateMs = 0;
// Helper to create Rainbow Colors
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return matrix.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return matrix.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return matrix.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
void updateClockData() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
// Update Time and Date strings
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]);
// Handle Night Dimming
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);
int len = strlen(currentDisplayText);
int16_t x = scrollX;
// Draw each character with a shifting rainbow color
for (int i = 0; i < len; i++) {
uint8_t colorPos = (uint8_t)((i * 30) + (millis() / 5));
matrix.setTextColor(Wheel(colorPos));
matrix.setCursor(x + (i * 6), 0);
matrix.print(currentDisplayText[i]);
}
matrix.show();
scrollX--;
int16_t textWidth = len * 6;
if (scrollX < -textWidth) {
scrollX = matrix.width();
// Switch between Date and Time at end of cycle
if (millis() - lastDateShowMs > dateIntervalMs) {
strcpy(currentDisplayText, dateText);
lastDateShowMs = millis();
isShowingDate = true;
} else {
strcpy(currentDisplayText, timeText);
isShowingDate = false;
}
}
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\nESP32-S3 Rainbow Clock Initializing...");
// 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());
}
// 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);
updateClockData();
strcpy(currentDisplayText, timeText); // Load initial time
}
void loop() {
unsigned long now = millis();
// Update time digits and check brightness every second
if (now - lastTimeUpdateMs >= 1000) {
lastTimeUpdateMs = now;
updateClockData();
}
// Handle the scrolling animation
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollDisplay();
}
}
Resources & references
-
Video
-
Internal🎨 Color picker Toolrobojax.com
Files📁
Fritzing File
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB