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 میټرکس وای-فای + NTP وخت ساعت پروژه -1 اساسي ساعت
د ESP32-S3 انټرنیټ ساعت د 8×8 نیو میټرکس سره (وای-فای + NTP وخت)
دا پروژه د ESP32-S3 او د 8×8 RGB نیو میټرکس (NeoPixel/WS2812) څخه یو کوچنی انټرنیټ ساعت جوړوي. ESP32 وای-فای سره نښلېږي، د NTP سرور څخه محلي وخت همغږي کوي، بیا وخت د HH:MM په توګه د 8×8 پردې په اوږدو کې ښوروي.

دا څنګه کار کوي (لوړه کچه)
1) ESP32-S3 ستاسو روټر سره د <WiFi.h> په کارولو سره نښلېږي.
2) دا د NTP سرور څخه وخت د "time.h" او configTime() په کارولو سره همغږي کوي.
3) وخت د HH:MM په توګه بڼه ورکول کېږي او په یوه کوچني متن بفر کې خوندي کېږي.
4) نیو میټرکس متن وړاندې کوي او د 8×8 پینل په اوږدو کې یې ښوروي.

RGB رنګ
د ساعت متن رنګ د RGB (سور، شین، نیلي) ارزښتونو په کارولو سره کنټرول کېږي، چیرې چې هر رنګ چینل له 0 څخه تر 255 پورې وي او مختلف ترکیبونه په نیو میټرکس کې مختلف رنګونه جوړوي. د color_RED، color_GREEN، او color_BLUE متغیرونو په تنظیمولو سره، تاسو کولی شئ په اسانۍ سره د ساعت بڼه هر هغه رنګ ته بدله کړئ چې تاسو یې خوښوئ. د یو ځانګړي رنګ لپاره دقیق RGB ارزښتونو ته په چټکۍ سره د رسیدو لپاره، تاسو کولی شئ آنلاین 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 هم راکش کړي.
مهم کارن تنظیمات چې تاسو یې حتماً سمول ته اړتیا لرئ
1) متن رنګ (RGB)
د خپل ساعت متن رنګ د 0–255 ارزښتونو په کارولو سره وټاکئ:
//د پردې رنګ وټاکئ چې له سور، شین او نیلي څخه جوړ شوی
unsigned int color_RED = 17;
unsigned int color_GREEN = 43;
unsigned int color_BLUE = 171;
دا ارزښتونه دلته کارول کېږي:
matrix.setTextColor(matrix.Color(color_RED, color_GREEN, color_BLUE));
یادونه: که تاسو ټول رنګونه 0 (تور) وټاکئ، متن به نه لیدل کېږي. سکیچ کې د خوندیتوب چک شامل دی:
// که کارونکي ټول رنګونه 0 وټاکل، پرده به بنده شي نو شین یې کړئ
if (color_RED == 0 && color_GREEN == 0 && color_BLUE == 0) {
color_GREEN = 200;
}
دا ډاډ ورکوي چې میټرکس هیڅکله د نه لیدونکي رنګ تنظیم له امله “مړ” نه ښکاري.
2) د وای-فای SSID او پاسورډ
دا د خپل اصلي وای-فای نوم او پاسورډ سره بدل کړئ:
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
د پیل په جریان کې، ESP32 د سریال مانیټر کې د نښلولو پرمختګ چاپوي او شاوخوا 15 ثانیو وروسته (30 هڅې × 500ms) وخت پای ته رسوي.
3) NTP سرور
اصلي NTP سرور دا دی:
const char* ntpServer = "pool.ntp.org";
تاسو کولی شئ دا لکه څنګه چې دی وساتئ. که تاسو کله هم محلي سرور کارول غواړئ، د هوسټ نوم د خپل غوره NTP سرور سره بدل کړئ.
4) د وخت زون آفسیټ او د ورځې د رڼا سپمولو آفسیټ
دا دوه تنظیمات محلي وخت کنټرولوي:
// ټورنټو ته ورته: UTC-5، د DST لپاره 1 ساعت اضافه
const long gmtOffset_sec = -5 * 3600; // -5 ساعته
const int daylightOffset_sec = 3600; // د DST لپاره +1 ساعت
دوی څنګه وټاکئ:
gmtOffset_sec= (د UTC آفسیټ ساعته) × 3600. بېلګه: UTC-5 →-5*3600، UTC+2 →2*3600.daylightOffset_sec=0که تاسو د DST سمون نه غواړئ، یا3600که ستاسو سیمه اوس مهال DST (+1 ساعت) لیدل کېږي.
دا دلته پلي کېږي:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
د پردې تنظیم
د میټرکس ډیټا پن
د ډیټا پن دلته تعریف شوی:
#define MATRIX_PIN 14
که ستاسو تارونه مختلف GPIO کاروي، دا شمېره د مطابقت لپاره بدله کړئ.
د نیو میټرکس ترتیب + د رنګ ترتیب
ستاسو میټرکس داسې پیل شوی:
Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
NEO_RGB + NEO_KHZ800);
دوه عام لاملونه چې پرده “غلطه” ښکاري:
- څرخ / د تارونو لار: که متن پورته ښکته یا عکس شوی ښکاري، د
NEO_MATRIX_*بیرغونه تنظیم کړئ (TOP/BOTTOM، LEFT/RIGHT، ROWS/COLUMNS، PROGRESSIVE/ZIGZAG). - د رنګ ترتیب: دا کوډ
NEO_RGBکاروي. ځینې پینلونهNEO_GRBدي. که سور/شین/نیلي سم نه وي،NEO_RGBپه سم ترتیب بدل کړئ.
روښانتیا
روښانتیا په initMatrix() کې ټاکل شوې:
matrix.setBrightness(40);
د روښانه پردې لپاره یې زیاته کړئ، د تودوخې او بریښنا مصرف کمولو لپاره یې کمه کړئ.
وخت څنګه د HH:MM په توګه رامینځته کېږي
ساعت بڼه ورکړل شوی وخت په 6-کرکټره بفر کې ذخیره کوي:
char timeText[6] = "00:00";
بیا updateTimeText() د NTP سره همغږي شوی محلي وخت لولي او متن لیکي:
// بڼه HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d",
timeinfo.tm_hour,
timeinfo.tm_min);
دا په اصلي لوپ کې په هر ثانیه کې یو ځل تازه کیږي.
په 8×8 نندارې کې سکرول څنګه کار کوي
د 8×8 میټرکس ډېر تنګ دی چې HH:MM په یو ځل وښيي، نو سکیچ متن سکرول کوي. دا وخت په بدلیدونکي X موقعیت (scrollX) کې رسموي، بیا یې په هر تازه کولو کې کیڼ اړخ ته د یو پکسل په اندازه حرکت کوي.
int16_t scrollX = 8;
const uint16_t scrollIntervalMs = 120;
د سکرول هر ګام:
matrix.fillScreen(0);
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
کله چې متن په بشپړه توګه له کیڼ اړخه وځي، کوډ یې بیا تنظیموي چې د ښي څنډې څخه بیا پیل شي:
int16_t textWidth = 30;
if (scrollX < -textWidth) {
scrollX = matrix.width();
}
د سیریل مانیټر محصول (ډیباګ کول)
دا سکیچ ګټور پیغامونه چاپوي:
- د Wi-Fi اړیکې پرمختګ او د IP پته
- ایا د وخت همغږي بریالۍ وه
- د وخت بڼه شوی سټرینګ (د مثال په توګه،
Time text: 14:32)
که ننداره خالي وي، د سیریل مانیټر لومړی ځای دی چې باید وګورئ ترڅو تایید کړئ چې Wi-Fi او NTP کار کوي.
د پروژې نندارې
د اپلوډ او ری سیٹ وروسته:
- ESP32 له Wi-Fi سره نښلوي
- وخت له
pool.ntp.orgڅخه همغږي کوي - په میټرکس کې په لنډه توګه
OKښیي - اوسنی وخت د
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 میټرکس انټرنیټ ساعت پروژه - ۲ ساعت څو رنګه وخت او نېټه ښودنه
- د ESP32-S3 RGB LED میټرکس انټرنیټ ساعت پروژه - ۳ د شپې رنګونه د نیټې سره
- د ESP32-S3 RGB LED میټرکس انټرنیټ ساعت پروژه - 5 د رینبو رنګ
- د ESP32-S3 RGB LED میټرکس انټرنیټ ساعت پروژه - ۴ تصادفي رنګونه
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
This is ESP32 sketch that connects to the internet, gets the time and displays it on the RGB matrix
you must set your WiFi correctly to make sure it gets connected.
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT838
* Author: Ahmad Shamshiri (Robojax.com)
* Date: 07 Jan 2026
www.Robojax.com
https://youTube.com/@robojax
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
//set the color of diplay make of Red, Green and Blue
unsigned int color_RED = 17;
unsigned int color_GREEN = 43;
unsigned int color_BLUE = 171;
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
#define MATRIX_PIN 14
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";
int16_t scrollX = 8;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 120;
unsigned long lastTimeUpdateMs = 0;
const uint16_t timeUpdateIntervalMs = 1000;
//prototypes
bool updateTimeText(); // forward declaration
void scrollTime(); // forward declaration
// 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
bool updateTimeText() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time for display");
return false;
}
// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d",
timeinfo.tm_hour,
timeinfo.tm_min);
Serial.print("Time text: ");
Serial.println(timeText);
return true;
}
void scrollTime() {
matrix.fillScreen(0);
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
// Rough width: 5 characters ("HH:MM") × 6 pixels each ≈ 30 px
int16_t textWidth = 30;
if (scrollX < -textWidth) {
scrollX = matrix.width(); // reset to right edge (8)
}
}
void initMatrix() {
matrix.begin();
matrix.setBrightness(40); // be careful with heat
matrix.setTextWrap(false);
matrix.setTextColor(matrix.Color(color_RED, color_GREEN, color_BLUE)); // color of text
}
void showMessage(const char* msg) {
matrix.fillScreen(0);
matrix.setCursor(0, 0); // top-left
matrix.print(msg);
matrix.show();
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
// Format: 2025-11-18 14:35:12
Serial.printf("%04d-%02d-%02d %02d:%02d:%02d\n",
timeinfo.tm_year + 1900,
timeinfo.tm_mon + 1,
timeinfo.tm_mday,
timeinfo.tm_hour,
timeinfo.tm_min,
timeinfo.tm_sec);
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println();
Serial.println("ESP32-S3 Internet Clock - WiFi + NTP test");
// 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());
}
// if user set all colors to 0, the dispaly will be turned off so set it green
if(color_RED ==0 & color_GREEN ==0 && color_BLUE ==0)
{
color_GREEN = 200;
}
// Configure time via NTP
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Serial.println("Waiting for time...");
delay(2000); // small wait for initial sync
printLocalTime(); // print once at startup
// NEW: init the LED matrix and show a test message
initMatrix();
showMessage("OK");
}
void loop() {
unsigned long now = millis();
// Update the time string "HH:MM" once per second
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeText(); // fills timeText[], e.g. "14:32"
}
// Scroll the time across the 8×8 every scrollIntervalMs
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollTime(); // uses timeText and scrollX
}
}
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