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

Што прави овој часовник
По поврзувањето на вашата Wi-Fi мрежа, ESP32-S3 го презема моменталното локално време од интернет. Часовникот нормално го прикажува времето, но во фиксен интервал се префрла на приказ на датумот. Бојата на текстот може да биде фиксна или автоматски да се менува низ повеќе кориснички дефинирани бои. Осветленоста автоматски се намалува ноќе за да биде дисплејот попријатен за очите.
Користени библиотеки
Овој код зависи од следниве библиотеки:

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

Важна корисничка конфигурација
Wi-Fi SSID и лозинка (осетливи на големи/мали букви)
Мора да ги замените Wi-Fi акредитивите со информациите за вашата мрежа:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
Важно: Wi-Fi SSID-ите се осетливи на големи/мали букви. На пример, SSID наречен "Book" не е ист како "book". Ако големината на буквите не се совпаѓа точно, ESP32 нема да може да се поврзе.
NTP сервер, временска зона и летно сметање на времето
Часовникот користи интернет временски сервер:
const char* ntpServer = "pool.ntp.org";
Локалното време се пресметува со овие поместувања:
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: Вашето UTC поместување во секунди (пример: UTC-5 =-5 * 3600)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 часот и 6 часот наутро, осветленоста се намалува за да биде дисплејот помалку одвлекувачки во темни средини. Можете да ги прилагодите овие вредности според вашите преференции.
RGB конфигурација на бои
Часовникот поддржува и фиксен режим на боја и автоматско менување на бои. Кориснички дефинираните RGB бои се чуваат во низа:
uint8_t userColors[][3] = {
{17, 43, 171}, // Светло сина
{255, 0, 0}, // Црвена
{0, 255, 0}, // Зелена
{255, 165, 0}, // Портокалова
{255, 0, 255} // Магента
};
Секоја боја користи RGB (црвена, зелена, сина) вредности кои се движат од 0 до 255. Со менување на овие броеви, можете да креирате речиси секоја боја за дисплејот. Ако useFixedColor е поставено на true, часовникот секогаш користи една боја. Ако е поставено на false, бојата автоматски се менува по секое целосно прикажување.
За брзо пронаоѓање точни RGB вредности за било која боја што ја сакате, користете ја алатката RGB Color Picker Color Picker .
Форматирање на време и датум
Времето е форматирано како HH:MM и се чува во мал бафер за знаци. Датумот е форматиран како низа со големи букви, како што е СЕП 21. Дисплејот автоматски се префрла помеѓу време и датум во фиксен интервал.
Логика за прикажување на 8×8 дисплеј
Бидејќи 8×8 матрицата е премногу мала за да го прикаже целиот текст одеднаш, кодот го прикажува текстот хоризонтално. Откако текстот целосно ќе го напушти дисплејот, бојата се ажурира и содржината се префрла помеѓу време и датум кога е потребно.
Демонстрација
По поставувањето на кодот:
- ESP32 се поврзува на Wi-Fi
- Времето се синхронизира од интернет
- Моменталното време се прикажува на матрицата
- Датумот се појавува периодично
- Осветленоста автоматски се прилагодува за ден и ноќ
Преземања и линкови
Целосниот изворен код е даден подолу во овој напис. Линкови до делови, алатки и технички спецификации се исто така достапни подолу во овој напис.
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 Основен часовник
- ESP32-S3 RGB LED матричен интернет часовник проект - 3 ноќни бои со датум
- Проект за интернет часовник со RGB LED матрица базиран на ESP32-S3 - 5 виножито боја
- Проект за интернет часовник со RGB LED матрица базиран на ESP32-S3 - 4 случајни бои
- 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