Search Code

ESP32-S3 RGB LED میٹرکس انٹرنیٹ کلاک پروجیکٹ - تاریخ کے ساتھ 3 رات کے رنگ

ESP32-S3 RGB LED میٹرکس انٹرنیٹ کلاک پروجیکٹ - تاریخ کے ساتھ 3 رات کے رنگ

ESP32-S3 RGB NeoMatrix انٹرنیٹ کلاک جس میں خودکار دن/رات کی چمک شامل ہے

یہ پروجیکٹ ایک ESP32-S3 RGB میٹرکس انٹرنیٹ کلاک ہے جو دن اور رات کے دوران خود بخود چمک کو ایڈجسٹ کرتا ہے۔ ESP32-S3 وائی-فائی سے منسلک ہوتا ہے، NTP سرور سے موجودہ وقت کو ہم آہنگ کرتا ہے، اور وقت کو HH:MM فارمیٹ میں 8×8 RGB NeoMatrix پر اسکرول کرتا ہے۔ کلاک ڈسپلے ٹیکسٹ کے لیے فکسڈ یا سائیکلنگ RGB رنگوں کو بھی سپورٹ کرتا ہے۔

یہ کلاک کیا کرتا ہے

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

ESP32-s3_internet_clock_animation

استعمال شدہ لائبریریاں

یہ اسکیچ درج ذیل لائبریریاں استعمال کرتا ہے:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

Arduino Library Manager سے Adafruit NeoMatrix انسٹال کریں۔ تمام ضروری انحصار جیسے Adafruit GFX Library اور Adafruit NeoPixel خود بخود انسٹال ہو جائیں گے۔

اہم صارف ترتیب

وائی-فائی SSID اور پاس ورڈ (کیس حساس)

درج ذیل اقدار کو اپنی وائی-فائی اسناد سے تبدیل کریں:

const char* WIFI_SSID     = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";

اہم: وائی-فائی SSIDs کیس حساس ہیں۔ ایک SSID جس کا نام "Book" ہے وہی نہیں ہے جو "book" ہے۔ اگر بڑے حروف کا استعمال بالکل مماثل نہ ہو تو ESP32 منسلک ہونے میں ناکام ہو جائے گا۔

NTP سرور، ٹائم زون، اور ڈے لائٹ سیونگ

کلاک درج ذیل NTP سرور کا استعمال کرتے ہوئے وقت کو ہم آہنگ کرتا ہے:

const char* ntpServer = "pool.ntp.org";

مقامی وقت ان آفسیٹس کا استعمال کرتے ہوئے شمار کیا جاتا ہے:

const long  gmtOffset_sec     = -5 * 3600; 
const int   daylightOffset_sec = 3600;
  • gmtOffset_sec آپ کے UTC آفسیٹ کو سیکنڈوں میں بیان کرتا ہے
  • daylightOffset_sec ڈے لائٹ سیونگ ٹائم فعال ہونے پر ایک گھنٹہ شامل کرتا ہے (اگر ضرورت نہ ہو تو 0 استعمال کریں)

یہ اقدار اس کے ساتھ لاگو کی جاتی ہیں:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

خودکار دن / رات کی چمک

ڈسپلے کی چمک موجودہ گھنٹے کی بنیاد پر خود بخود تبدیل ہوتی ہے:

const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22; // 10 PM
const int NIGHT_END_HOUR = 6;    // 6 AM

رات 10 بجے سے صبح 6 بجے کے درمیان، میٹرکس کی چمک کم کر دی جاتی ہے تاکہ تاریک ماحول میں یہ آرام دہ ہو۔ ان اوقات کے باہر، دن کی مکمل چمک بحال ہو جاتی ہے۔ آپ ان اقدار کو اپنے کمرے کی روشنی کے مطابق ایڈجسٹ کر سکتے ہیں۔

RGB رنگ کی ترتیب

کلاک ٹیکسٹ کا رنگ RGB (ریڈ، گرین، بلیو) اقدار کا استعمال کرتے ہوئے بیان کیا جاتا ہے، جہاں ہر چینل 0 سے 255 تک ہوتا ہے۔ متعدد رنگوں کو ایک صف میں محفوظ کیا جا سکتا ہے اور خود بخود سائیکل کیا جا سکتا ہے:

uint8_t userColors[][3] = {
  {17, 43, 171},  // ہلکا نیلا
  {255, 0, 0},    // سرخ
  {0, 255, 0},    // سبز
  {255, 165, 0},  // نارنجی
  {255, 0, 255}   // میجنٹا
};

اگر useFixedColor کو true پر سیٹ کیا گیا ہے، تو کلاک ہمیشہ ایک رنگ استعمال کرتا ہے۔ اگر false پر سیٹ کیا گیا ہے، تو وقت کے ہر مکمل اسکرول کے بعد رنگ خود بخود تبدیل ہو جاتا ہے۔

کسی بھی رنگ کی صحیح RGB اقدار کو فوری طور پر تلاش کرنے کے لیے، RGB کلر پکر ٹول استعمال کریں: کلر پکر ۔

وقت کی نمائش اور اسکرولنگ

موجودہ وقت HH:MM کے طور پر فارمیٹ کیا جاتا ہے اور ایک چھوٹے کریکٹر بفر میں محفوظ کیا جاتا ہے۔ چونکہ ڈسپلے صرف 8 پکسلز چوڑا ہے، ٹیکسٹ دائیں سے بائیں آسانی سے اسکرول ہوتا ہے۔ ایک بار جب وقت مکمل طور پر ڈسپلے سے نکل جاتا ہے، تو اگلا رنگ (اگر فعال ہو) اگلے پاس کے لیے منتخب کیا جاتا ہے۔

مظاہرہ

اسکیچ اپ لوڈ کرنے کے بعد:

  • ESP32-S3 وائی-فائی سے منسلک ہوتا ہے
  • وقت انٹرنیٹ سے ہم آہنگ ہوتا ہے
  • موجودہ وقت RGB میٹرکس پر اسکرول ہوتا ہے
  • چمک دن اور رات کے درمیان خود بخود تبدیل ہوتی ہے
  • ٹیکسٹ کا رنگ آپ کی ترتیبات کی بنیاد پر فکسڈ رہتا ہے یا سائیکل ہوتا ہے

ڈاؤن لوڈز اور لنکس

مکمل سورس کوڈ اس مضمون کے نیچے فراہم کیا گیا ہے۔ پرزوں، ٹولز، اور ڈیٹا شیٹس کے لنکس اس مضمون کے نیچے دستیاب ہیں۔

تصاویر

ESP32 S3 Matrix
ESP32 S3 Matrix
ESP32 S3 Matrix  pin out
ESP32 S3 Matrix pin out
ESP32-S3_RGB_8x8_matrix-3
ESP32-S3_RGB_8x8_matrix-3
ESP32-S3_RGB_8x8_matrix1
ESP32-S3_RGB_8x8_matrix1
ESP32-S3_RGB_8x8_matrix-2
ESP32-S3_RGB_8x8_matrix-2
ESP32-s3_internet_clock_animation
ESP32-s3_internet_clock_animation
870-ESP32-S3 RGB LED Matrix Internte Clock Project 3 - Night Color with Date
زبان: C++
/*
 * =====================================================================================
 * ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 3- Night color with Date
 * =====================================================================================
 watch video https://youtube.com/shorts/4iWjLiD7fS8
 📚⬇️ Download and resource page https://robojax.com/RJT840
 * 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).
 * =====================================================================================
 */

#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; // 10 PM
const int NIGHT_END_HOUR = 6;    // 6 AM

// --- 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]);

// --- INTERVALS ---
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";
int16_t scrollX = 8;


const char* ntpServer = "pool.ntp.org";
const long  gmtOffset_sec     = -5 * 3600; 
const int   daylightOffset_sec = 3600;

void updateTimeText() {
  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) return;
  
  // Format HH:MM
  snprintf(timeText, sizeof(timeText), "%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min);

  // Apply Auto-Brightness
  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);
  
  // Pick the color (Fixed or Cycle)
  int idx = useFixedColor ? fixedColorIndex : currentColorIndex;
  matrix.setTextColor(matrix.Color(userColors[idx][0], userColors[idx][1], userColors[idx][2]));

  matrix.setCursor(scrollX, 0);
  matrix.print(timeText);
  matrix.show();

  scrollX--;

  // Width for "HH:MM" is roughly 30 pixels
  int16_t textWidth = 30;
  
  // TRIGGER: When time is fully off-screen
  if (scrollX < -textWidth) {
    scrollX = matrix.width(); // Reset position to right side
    
    // Cycle to the next color in the array for the next pass
    if (!useFixedColor) {
      currentColorIndex = (currentColorIndex + 1) % totalColors;
      Serial.print("Next cycle color index: ");
      Serial.println(currentColorIndex);
    }
  }
}

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);
  
  updateTimeText();
}

void loop() {
  unsigned long now = millis();

  // Update time digits and brightness once per second
  if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
    lastTimeUpdateMs = now;
    updateTimeText(); 
  }

  // Handle the scrolling animation
  if (now - lastScrollMs >= scrollIntervalMs) {
    lastScrollMs = now;
    scrollTime();
  }
}

آپ کو جن چیزوں کی ضرورت ہو سکتی ہے

وسائل اور حوالہ جات

فائلیں📁

فریٹزنگ فائل