Search Code

ESP32-S3 RGB LED மேட்ரிக்ஸ் Wi-Fi + NTP நேர கடிகார திட்டம் -1 அடிப்படை கடிகாரம்

ESP32-S3 RGB LED மேட்ரிக்ஸ் Wi-Fi + NTP நேர கடிகார திட்டம் -1 அடிப்படை கடிகாரம்

ESP32-S3 இணைய கடிகாரம் 8×8 நியோமேட்ரிக்ஸுடன் (Wi-Fi + NTP நேரம்)

இந்த திட்டம் ESP32-S3 மற்றும் 8×8 RGB நியோமேட்ரிக்ஸை (NeoPixel/WS2812) ஒரு சிறிய இணைய கடிகாரமாக மாற்றுகிறது. ESP32 Wi-Fi உடன் இணைந்து, NTP சேவையகத்திலிருந்து உள்ளூர் நேரத்தை ஒத்திசைத்து, பின்னர் HH:MM என நேரத்தை 8×8 காட்சியில் உருட்டுகிறது.

ESP32-s3_internet_clock_animation

 

இது எவ்வாறு செயல்படுகிறது (உயர் நிலை)

1) ESP32-S3 உங்கள் ரூட்டருடன் <WiFi.h> ஐப் பயன்படுத்தி இணைகிறது.
2) இது "time.h" மற்றும் configTime() ஐப் பயன்படுத்தி NTP சேவையகத்திலிருந்து நேரத்தை ஒத்திசைக்கிறது.
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) Wi-Fi SSID மற்றும் கடவுச்சொல்

இவற்றை உங்கள் உண்மையான Wi-Fi பெயர் மற்றும் கடவுச்சொல்லுடன் மாற்றவும்:

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, மேலும் 1 மணிநேர DST
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 = DST சரிசெய்தல் வேண்டாம் என்றால் 0, அல்லது உங்கள் பகுதி தற்போது DST (+1 மணிநேரம்) கடைப்பிடிக்கிறது என்றால் 3600.

இவை இங்கே பயன்படுத்தப்படுகின்றன:

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 ஆக தொடர்ந்து ஸ்க்ரோல் செய்கிறது

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

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

படங்கள்

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
868-ESP32-S3 RGB LED Matrix Internte Clock Project 1 - Basic Clock
மொழி: C++
/*
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
  }
}

நீங்கள் தேவைப்படும் எண்ணங்கள்

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

கோப்புகள்📁

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