یہ ٹیوٹوریل کا حصہ ہے: ESP32-S3 RGB LED میٹرکس
ESP32-S3 RGB میٹرکس ماڈیول کا استعمال کرتے ہوئے تفریحی اور عملی ایپلی کیشنز کے لیے تخلیق کرنے کے لیے زبردست پروجیکٹ۔ دیگر ویڈیوز کے لنکس اس مضمون کے نیچے ہیں۔
ESP32-S3 RGB LED میٹرکس انٹرنیٹ کلاک پروجیکٹ - 5 قوس قزح رنگ
ESP32-S3 انٹرنیٹ کلاک رینبو کلر ایفیکٹ کے ساتھ
یہ پروجیکٹ ایک ESP32-S3 RGB میٹرکس انٹرنیٹ کلاک ہے جو وائی فائی سے جڑتا ہے، این ٹی پی سرور سے مقامی وقت ہم آہنگ کرتا ہے، اور وقت کو HH:MM فارمیٹ میں بلٹ ان 8×8 RGB نیو میٹرکس پر اسکرول کرتا ہے۔ ٹھوس یا بے ترتیب رنگ والے ورژن کے برعکس، یہ کلاک ایک ہموار رینبو کلر ایفیکٹ استعمال کرتا ہے، جہاں ہر حرف اسکرول کرتے ہوئے مسلسل RGB سپیکٹرم میں تبدیل ہوتا ہے۔ کلاک وقتاً فوقتاً تاریخ بھی دکھاتا ہے اور دن اور رات کے درمیان چمک کو خود بخود ایڈجسٹ کرتا ہے۔

یہ کلاک کیسے کام کرتا ہے
USB-C کے ذریعے پاور ہونے کے بعد، ESP32-S3 آپ کے وائی فائی نیٹ ورک سے جڑتا ہے اور انٹرنیٹ سے موجودہ مقامی وقت حاصل کرتا ہے۔ ڈسپلے عام طور پر وقت اسکرول کرتا ہے، لیکن ایک مقررہ وقفے پر یہ تاریخ دکھانے کے لیے تبدیل ہو جاتا ہے۔ وقت اور تاریخ دونوں کو ایک متحرک رینبو ایفیکٹ کے ساتھ پیش کیا جاتا ہے، جو چھوٹی 8×8 میٹرکس پر ایک پرکشش اور متحرک ڈسپلے بناتا ہے۔
استعمال شدہ لائبریریاں
اسکیچ درج ذیل لائبریریوں پر انحصار کرتا ہے:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
آرڈوینو لائبریری مینیجر کا استعمال کرتے ہوئے Adafruit NeoMatrix انسٹال کریں۔ اس کے انحصارات، بشمول Adafruit GFX Library اور Adafruit NeoPixel، خود بخود انسٹال ہو جائیں گے۔

اہم صارف کنفیگریشن
میٹرکس ڈیٹا پن (بلٹ ان RGB میٹرکس)
اگرچہ RGB میٹرکس ESP32-S3 بورڈ سے منسلک ہے، ڈیٹا پن کو پھر بھی کوڈ میں متعین کرنا ضروری ہے:

#define MATRIX_PIN 14
GPIO 14 عام طور پر ESP32-S3 RGB میٹرکس بورڈز پر استعمال ہوتا ہے۔ اگر آپ کے بورڈ کی مختلف قسم مختلف پن استعمال کرتی ہے، تو اس قدر کو اپ ڈیٹ کریں۔
وائی فائی SSID اور پاس ورڈ (کیس حساس)
وائی فائی اسناد کو اپنے نیٹ ورک کی تفصیلات سے تبدیل کریں:
const char* WIFI_SSID = "your WIFI";
const char* WIFI_PASSWORD = "passW0rd";
اہم: وائی فائی SSIDs کیس حساس ہیں۔ "Book" نام کا SSID "book" جیسا نہیں ہے۔ اگر بڑے حروف بالکل مماثل نہیں ہیں، تو ESP32-S3 کنیکٹ ہونے میں ناکام ہو جائے گا۔
این ٹی پی سرور، ٹائم زون، اور ڈے لائٹ سیونگ
کلاک انٹرنیٹ این ٹی پی سرور کا استعمال کرتے ہوئے وقت ہم آہنگ کرتا ہے:
const char* ntpServer = "pool.ntp.org";
مقامی وقت ان آفسیٹس کا استعمال کرتے ہوئے شمار کیا جاتا ہے:
// ٹورنٹو جیسا: UTC-5، جمع 1 گھنٹہ ڈی ایس ٹی
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;
رات 10 بجے سے صبح 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 آپ کے وائی فائی نیٹ ورک سے جڑتا ہے
- وقت انٹرنیٹ سے ہم آہنگ ہوتا ہے
- وقت
HH:MMفارمیٹ میں اسکرول ہوتا ہے - تاریخ وقتاً فوقتاً ظاہر ہوتی ہے
- تمام متن ایک ہموار متحرک رینبو ایفیکٹ کے ساتھ پیش کیا جاتا ہے
- ڈسپلے رات کو خود بخود مدھم اور دن میں روشن ہو جاتا ہے
ڈاؤن لوڈز اور لنکس
اس مضمون کے نیچے مکمل سورس کوڈ فراہم کیا گیا ہے۔ مفید ٹولز اور حوالہ جات، بشمول آر جی بی کلر پکر، بھی اس مضمون کے نیچے لنک کیے گئے ہیں۔
یہ ٹیوٹوریل کا حصہ ہے: ESP32-S3 RGB LED میٹرکس
- ESP32-S3 آر جی بی ایل ای ڈی میٹرکس پروجیکٹ 1- بنیادی ڈاٹ
- ESP32-S3 آر جی بی ایل ای ڈی میٹرکس پروجیکٹ 2 - اسکرولنگ ٹیکسٹ
- ESP32-S3 RGB LED میٹرکس پروجیکٹ 3 - موبائل فون سے ٹیکسٹ
- ESP32-S3 آر جی بی ایل ای ڈی میٹرکس پروجیکٹ 4 - جھکاؤ ڈاٹ
- ESP32-S3 آر جی بی ایل ای ڈی میٹرکس پروجیکٹ 5 - تیر ہمیشہ اوپر
- ESP32-S3 آر جی بی ایل ای ڈی میٹرکس پروجیکٹ 6 - سیبل گیم
- ESP32-S3 RGB LED میٹرکس وائی فائی + NTP ٹائم کلاک پروجیکٹ -1 بنیادی کلاک
- ESP32-S3 RGB LED میٹرکس انٹرنیٹ کلاک پروجیکٹ - 2 کلاک ملٹی کلر ٹائم اور ڈیٹ ڈسپلے
- ESP32-S3 RGB LED میٹرکس انٹرنیٹ کلاک پروجیکٹ - تاریخ کے ساتھ 3 رات کے رنگ
- ESP32-S3 RGB LED میٹرکس انٹرنیٹ کلاک پروجیکٹ - 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
فائلیں📁
فریٹزنگ فائل
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB