કોડ શોધો

ESP32-S3 RGB LED મેટ્રિક્સ ઇન્ટરનેટ ઘડિયાળ પ્રોજેક્ટ - 5 મેઘધનુષ્ય રંગ

ESP32-S3 RGB LED મેટ્રિક્સ ઇન્ટરનેટ ઘડિયાળ પ્રોજેક્ટ - 5 મેઘધનુષ્ય રંગ

રેઈન્બો કલર ઈફેક્ટ સાથે ESP32-S3 ઈન્ટરનેટ ઘડિયાળ

આ પ્રોજેક્ટ એક ESP32-S3 RGB મેટ્રિક્સ ઈન્ટરનેટ ઘડિયાળ છે જે Wi-Fi સાથે કનેક્ટ થાય છે, NTP સર્વરથી સ્થાનિક સમય સિંક્રનાઇઝ કરે છે, અને બિલ્ટ-ઇન 8×8 RGB નિયોમેટ્રિક્સ પર HH:MM ફોર્મેટમાં સમય સ્ક્રોલ કરે છે. સોલિડ અથવા રેન્ડમ કલર વર્ઝનથી વિપરીત, આ ઘડિયાળ સરળ રેઈન્બો કલર ઈફેક્ટનો ઉપયોગ કરે છે, જ્યાં દરેક અક્ષર સ્ક્રોલ થતાં RGB સ્પેક્ટ્રમમાં સતત બદલાય છે. ઘડિયાળ સમયાંતરે તારીખ પણ દર્શાવે છે અને દિવસ અને રાત વચ્ચે આપમેળે તેજસ્વિતા સમાયોજિત કરે છે.

ESP32-s3_internet_clock_animation

આ ઘડિયાળ કેવી રીતે કામ કરે છે

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>

Arduino લાઇબ્રેરી મેનેજરનો ઉપયોગ કરીને Adafruit NeoMatrix ઇન્સ્ટોલ કરો. તેની નિર્ભરતાઓ, જેમાં 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;

રાત્રે 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 તમારા Wi-Fi નેટવર્ક સાથે કનેક્ટ થાય છે
  • સમય ઈન્ટરનેટથી સિંક્રનાઇઝ થાય છે
  • સમય HH:MM ફોર્મેટમાં સ્ક્રોલ થાય છે
  • તારીખ સમયાંતરે દેખાય છે
  • બધા ટેક્સ્ટ સરળ એનિમેટેડ રેઈન્બો ઈફેક્ટ સાથે રેન્ડર થાય છે
  • ડિસ્પ્લે રાત્રે આપમેળે ઝાંખું થાય છે અને દિવસ દરમિયાન તેજસ્વી થાય છે

ડાઉનલોડ્સ અને લિંક્સ

આ લેખની નીચે સંપૂર્ણ સોર્સ કોડ આપવામાં આવ્યો છે. ઉપયોગી સાધનો અને સંદર્ભો, જેમાં 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
872-ESP32-S3 RGB LED Matrix Internte Clock Project 5 - Rainbow Color
ભાષા: C++
/*
 * =====================================================================================
 * 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();
  }
}

સંસાધનો અને સંદર્ભો

ફાઇલો📁

Fritzing ફાઇલ