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 میټرکس انټرنیټ ساعت پروژه - ۴ تصادفي رنګونه
د ESP32-S3 انټرنیټ ساعت د تصادفي RGB رنګونو سره
دا پروژه د ESP32-S3 RGB میټرکس انټرنیټ ساعت دی چې 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>
د Arduino کتابتون مدیر څخه Adafruit NeoMatrix نصب کړئ. اړین انحصارونه لکه 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 SSIDs د لویو او وړو تورو سره حساس دي. یو SSID چې نوم یې "Book" دی د "book" سره یو شان نه دی. که لوی توري په سمه توګه سره سمون ونلري، ESP32-S3 به له نښلولو څخه پاتې شي.
د NTP سرور، وخت زون، او د ورځې رڼا سپمول
د وخت همغږي کول د انټرنیټ NTP سرور په کارولو سره ترسره کیږي:
const char* ntpServer = "pool.ntp.org";
محلي وخت د UTC او د ورځې رڼا سپمولو آفسیټونو په کارولو سره محاسبه کیږي:
// Toronto-ish: UTC-5, plus 1 hour DST
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
gmtOffset_sec: د UTC آفسیټ په ثانیو کې (د خپل موقعیت لپاره تنظیم کړئ)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;
د ماښام 10 بجو او سهار 6 بجو ترمنځ، ننداره د تیاره چاپیریال کې د ځلا کمولو لپاره کمه کیږي. د ورځې په جریان کې، میټرکس نورمال روښانتیا ته راګرځي.
تصادفي RGB رنګ چلند
د RGB رنګونو یو مخکینی تعریف شوی لیست په یوه ارې کې زیرمه شوی دی، چیرې چې هر رنګ د سور، شین، او نیلي ارزښتونو په کارولو سره تعریف شوی چې له 0 څخه تر 255 پورې وي:
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
};
په هر بشپړ سکرول دورې کې:
- د ساعت عددونو ته یو تصادفي رنګ ټاکل کیږي
- د کولون یو مختلف تصادفي رنګ ترلاسه کوي
- د دقیقې عددونو بل تصادفي رنګ ترلاسه کوي
دا په دوامداره توګه بدلیدونکی رنګ ترکیب تولیدوي چې ساعت په بصري توګه په زړه پوری ساتي. د خپلو دودیزو رنګونو جوړولو لپاره، تاسو کولی شئ د RGB رنګ غوره کونکي وسیله وکاروئ: RGB رنګ غوره کونکی.
د وخت وړاندې کولو منطق
وخت په دریو برخو ویشل شوی دی:
- ساعتونه:
HH - کولون:
: - دقیقې:
MM
هر برخه په جلا توګه رسم کیږي ترڅو خپل رنګ ولري، پداسې حال کې چې ټولې برخې یوځای حرکت کوي ترڅو د 8×8 نندارې په اوږدو کې یو نرم سکرول انیمیشن جوړ کړي.
تصادفي رنګ تولید
د رنګ تصادفي ډاډ ترلاسه کولو لپاره، سکیچ د پیل په وخت کې د نه نښلول شوي انلاګ پن په کارولو سره د تصادفي شمیرې جنراتور تخم کوي:
randomSeed(analogRead(0));
دا ډاډ ورکوي چې رنګ ترکیبونه په هر بریښنا پیل او هر سکرول دورې کې مختلف وي.
مظاهره
د سکیچ اپلوډ کولو او د USB-C له لارې بورډ ته بریښنا ورکولو وروسته:
- ESP32-S3 ستاسو د Wi-Fi شبکې سره نښلول کیږي
- وخت له انټرنیټ څخه همغږي کیږي
- وخت په
HH:MMبڼه کې سکرول کیږي - ساعتونه، کولون، او دقیقې په هر دورې کې تصادفي رنګونو ته بدلیږي
- ننداره په شپه کې په اتوماتيک ډول کمه کیږي
ډاونلوډونه او لینکونه
د بشپړ سرچینې کوډ د دې مقالې لاندې چمتو شوی دی. ګټورې وسیلې او حوالې د دې مقالې لاندې تړل شوي دي.
This tutorial is part of: ESP32-S3 RGB LED Matrix
- د ESP32-S3 RGB LED میټرکس پروژه ۱ - بنسټیز ډاټ
- د ESP32-S3 RGB LED میټرکس پروژه ۲ - سکرول کېدونکی متن
- د ESP32-S3 RGB LED میټرکس پروژه ۳ - د ګرځنده تلیفون څخه متن
- ESP32-S3 RGB LED میټرکس پروژه ۴ - ټیلټ ډاټ
- د ESP32-S3 RGB LED میټرکس پروژه ۵ - تل پورته تیر
- د ESP32-S3 RGB LED میټرکس پروژه ۶ - د هدف لوبه
- د ESP32-S3 RGB LED میټرکس وای-فای + NTP وخت ساعت پروژه -1 اساسي ساعت
- د ESP32-S3 RGB LED میټرکس انټرنیټ ساعت پروژه - ۲ ساعت څو رنګه وخت او نېټه ښودنه
- د ESP32-S3 RGB LED میټرکس انټرنیټ ساعت پروژه - ۳ د شپې رنګونه د نیټې سره
- د ESP32-S3 RGB LED میټرکس انټرنیټ ساعت پروژه - 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