This tutorial is part of: ESP32-S3 RGB LED Matrix
Cool project to create for fun and practical applications using ESP32-S3 RGB Matrix module. Links to other videos are below this article.
ESP32-S3 RGB LED матрицасы интернет сағат жобасы - 5 Кемпірқосақ түсі
Күнделікті радуга түс эффектісі бар ESP32-S3 интернет сағаты
Бұл жоба — Wi-Fi желісіне қосылатын, NTP серверінен жергілікті уақытты синхрондайтын және уақытты HH:MM форматында орнатылған 8×8 RGB NeoMatrix дисплейінде айналдырып көрсететін ESP32-S3 RGB Matrix интернет сағаты. Қарапайым немесе кездейсоқ түсті нұсқалардан айырмашылығы, бұл сағат тегіс радуга түс эффектісін пайдаланады, мұнда әрбір таңба айналған кезде 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, автоматты түрде орнатылады.

Маңызды пайдаланушы конфигурациясы
Матрица деректер пині (орнатылған RGB матрица)
RGB матрица ESP32-S3 тақтасына бекітілгенімен, деректер пині кодта әлі де анықталуы керек:

#define MATRIX_PIN 14
GPIO 14 ESP32-S3 RGB матрицалық тақталарында жиі қолданылады. Егер сіздің тақта нұсқаңыз басқа пинді пайдаланса, осы мәнді жаңартыңыз.
Wi-Fi SSID және пароль (регистрге сезімтал)
Wi-Fi тіркелгі деректерін өз желіңіздің ақпаратымен ауыстырыңыз:
const char* WIFI_SSID = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";
Маңызды: Wi-Fi SSID атаулары регистрге сезімтал. "Book" деп аталған SSID "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: Егер DST белсенді болса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 мен таңғы 6:00 аралығында матрица жарқырауды азайту үшін күңгірттенеді. Күндізгі уақытта қалыпты жарықтылық қалпына келтіріледі.
Радуга түс эффектісі
Бұл жоба тегіс радуга түстерін жасау үшін классикалық 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 түс таңдағышы, да осы мақаланың төменінде сілтемеленген.
This tutorial is part of: ESP32-S3 RGB LED Matrix
- ESP32-S3 RGB жарықдиодты матрицалық жобасы 1- Негізгі нүкте
- ESP32-S3 RGB LED матрица жобасы 2 - Жылжымалы мәтін
- ESP32-S3 RGB LED матрица жобасы 3 - Мобильді телефоннан мәтін
- ESP32-S3 RGB жарықдиодты матрица жобасы 4 - Еңкейту нүктесі
- ESP32-S3 RGB LED матрица жобасы 5 - Көрсеткі әрқашан жоғары
- ESP32-S3 RGB LED матрица жобасы 6 - Cible ойыны
- ESP32-S3 RGB LED матрицасы Wi-Fi + NTP уақыт сағаты жобасы -1 Негізгі сағат
- ESP32-S3 RGB жарықдиодты матрицалық интернет сағат жобасы - 2 сағат түрлі түсті уақыт пен күнді көрсету
- ESP32-S3 RGB LED матрицасы интернет сағаты жобасы - Күн мен түннің 3 түсімен
- ESP32-S3 RGB жарықдиодты матрицалық интернет сағат жобасы - 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();
}
}
Ресурстар мен сілтемелер
-
Бейне
-
Ішкі🎨 Color picker Toolrobojax.com
Файлдар📁
Fritzing файлы
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB