Search Code

ESP32-S3 RGB LED மேட்ரிக்ஸ் இணைய கடிகார திட்டம் - 4 சீரற்ற நிறம்

ESP32-S3 RGB LED மேட்ரிக்ஸ் இணைய கடிகார திட்டம் - 4 சீரற்ற நிறம்

சீரற்ற RGB நிறங்களுடன் ESP32-S3 இணைய கடிகாரம்

இந்த திட்டம் ஒரு ESP32-S3 RGB மேட்ரிக்ஸ் இணைய கடிகாரம் ஆகும், இது Wi-Fi உடன் இணைந்து, NTP சேவையகத்திலிருந்து உள்ளூர் நேரத்தை ஒத்திசைத்து, உள்ளமைக்கப்பட்ட 8×8 RGB நியோமேட்ரிக்ஸில் HH:MM வடிவத்தில் நேரத்தை உருட்டுகிறது. இந்த பதிப்பில், மணிநேரம், பெருங்காற்புள்ளி மற்றும் நிமிடங்கள் ஒவ்வொன்றும் ஒவ்வொரு முழு உருள் சுழற்சியிலும் தேர்ந்தெடுக்கப்படும் சீரற்ற நிறங்களில் வழங்கப்படுகின்றன, இது தொடர்ந்து மாறும் மாறும் மற்றும் விளையாட்டுத்தனமான கடிகார காட்சியை உருவாக்குகிறது.

ESP32-s3_internet_clock_animation

இந்த கடிகாரம் எவ்வாறு செயல்படுகிறது

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 SSIDகள் எழுத்து உணர்திறன் கொண்டவை. "Book" என்று பெயரிடப்பட்ட SSID "book" போன்றது அல்ல. பெரிய எழுத்து சரியாக பொருந்தவில்லை என்றால், ESP32-S3 இணைக்கத் தவறிவிடும்.

NTP சேவையகம், நேர மண்டலம் மற்றும் பகல் சேமிப்பு

நேர ஒத்திசைவு இணைய NTP சேவையகத்தைப் பயன்படுத்தி செய்யப்படுகிறது:

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

உள்ளூர் நேரம் UTC மற்றும் பகல் சேமிப்பு ஆஃப்செட்களைப் பயன்படுத்தி கணக்கிடப்படுகிறது:

// டொராண்டோ போன்றது: UTC-5, மேலும் 1 மணிநேர 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},    // சிவப்பு
  {0, 255, 0},    // பச்சை
  {0, 0, 255},    // நீலம்
  {255, 165, 0},  // ஆரஞ்சு
  {255, 0, 255},  // மெஜந்தா
  {0, 255, 255},  // சியான்
  {255, 255, 0}   // மஞ்சள்
};

ஒவ்வொரு முழு உருள் சுழற்சியிலும்:

  • மணிநேர இலக்கங்களுக்கு ஒரு சீரற்ற நிறம் ஒதுக்கப்படுகிறது
  • பெருங்காற்புள்ளிக்கு வேறு சீரற்ற நிறம் கிடைக்கிறது
  • நிமிட இலக்கங்களுக்கு மற்றொரு சீரற்ற நிறம் கிடைக்கிறது

இது கடிகாரத்தை பார்வைக்கு சுவாரஸ்யமாக வைத்திருக்கும் தொடர்ந்து மாறும் வண்ண கலவையை உருவாக்குகிறது. உங்கள் சொந்த தனிப்பயன் நிறங்களை உருவாக்க, RGB கலர் பிக்கர் கருவியைப் பயன்படுத்தலாம்: RGB கலர் பிக்கர்.

நேர வழங்கல் தர்க்கம்

நேரம் மூன்று கூறுகளாகப் பிரிக்கப்படுகிறது:

  • மணிநேரம்: HH
  • பெருங்காற்புள்ளி: :
  • நிமிடங்கள்: MM

ஒவ்வொரு பகுதியும் தனித்தனியாக வரையப்படுகிறது, இதனால் அது அதன் சொந்த நிறத்தைக் கொண்டிருக்கலாம், அதே நேரத்தில் அனைத்து பகுதிகளும் 8×8 காட்சியில் மென்மையான உருள் அசைவை உருவாக்க ஒன்றாக நகரும்.

சீரற்ற நிற உருவாக்கம்

நிற சீரற்ற தன்மையை உறுதிப்படுத்த, ஸ்கெட்ச் தொடக்கத்தில் இணைக்கப்படாத அனலாக் பின்னைப் பயன்படுத்தி சீரற்ற எண் ஜெனரேட்டரை விதைக்கிறது:

randomSeed(analogRead(0));

ஒவ்வொரு மின்-ஆன் மற்றும் ஒவ்வொரு உருள் சுழற்சியிலும் வண்ண சேர்க்கைகள் வேறுபட்டவை என்பதை இது உறுதி செய்கிறது.

செயல்விளக்கம்

ஸ்கெட்ச்சை பதிவேற்றி USB-C வழியாக பலகைக்கு மின்சாரம் வழங்கிய பிறகு:

  • ESP32-S3 உங்கள் Wi-Fi நெட்வொர்க்குடன் இணைகிறது
  • நேரம் இணையத்திலிருந்து ஒத்திசைக்கப்படுகிறது
  • நேரம் HH:MM வடிவத்தில் உருளுகிறது
  • மணிநேரம், பெருங்காற்புள்ளி மற்றும் நிமிடங்கள் ஒவ்வொரு சுழற்சியிலும் சீரற்ற நிறங்களாக மாறுகின்றன
  • காட்சி இரவில் தானாகவே மங்கலாகிறது

பதிவிறக்கங்கள் மற்றும் இணைப்புகள்

இந்தக் கட்டுரையின் கீழே முழு மூலக் குறியீடு வழங்கப்பட்டுள்ளது. பயனுள்ள கருவிகள் மற்றும் குறிப்புகள் இந்தக் கட்டுரையின் கீழே இணைக்கப்பட்டுள்ளன.

படங்கள்

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
873-ESP32-S3 RGB LED Matrix Internte Clock Project 4 - Random Color
மொழி: C++
/*
 * =====================================================================================
 * 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();
  }
}

வளங்கள் மற்றும் மேற்கோள்கள்

கோப்புகள்📁

பிரிட்சிங் கோப்பு