এই টিউটোরিয়ালটি এর একটি অংশ: ESP32-S3 RGB LED ম্যাট্রিক্স
ESP32-S3 RGB ম্যাট্রিক্স মডিউল ব্যবহার করে মজাদার এবং ব্যবহারিক অ্যাপ্লিকেশন তৈরি করার জন্য দুর্দান্ত প্রকল্প। অন্যান্য ভিডিওর লিঙ্ক এই নিবন্ধের নীচে রয়েছে।
ESP32-S3 RGB LED ম্যাট্রিক্স Wi-Fi + NTP সময় ঘড়ি প্রকল্প -১ মৌলিক ঘড়ি
ESP32-S3 ইন্টারনেট ক্লক ৮×৮ নিওম্যাট্রিক্স সহ (ওয়াই-ফাই + এনটিপি সময়)
এই প্রজেক্টটি একটি ESP32-S3 এবং একটি ৮×৮ RGB নিওম্যাট্রিক্স (NeoPixel/WS2812) কে একটি ছোট ইন্টারনেট ক্লকে রূপান্তরিত করে। ESP32 ওয়াই-ফাইয়ের সাথে সংযুক্ত হয়, একটি NTP সার্ভার থেকে স্থানীয় সময় সিঙ্ক্রোনাইজ করে, তারপর সময়টি HH:MM হিসেবে ৮×৮ ডিসপ্লে জুড়ে স্ক্রল করে।

এটি কীভাবে কাজ করে (উচ্চ স্তরের)
১) ESP32-S3 <WiFi.h> ব্যবহার করে আপনার রাউটারের সাথে সংযুক্ত হয়।
২) এটি "time.h" এবং configTime() ব্যবহার করে একটি NTP সার্ভার থেকে সময় সিঙ্ক করে।
৩) সময়টি HH:MM হিসেবে ফরম্যাট করা হয় এবং একটি ছোট টেক্সট বাফারে সংরক্ষণ করা হয়।
৪) নিওম্যাট্রিক্স টেক্সটটি রেন্ডার করে এবং ৮×৮ প্যানেল জুড়ে স্ক্রল করে।

RGB রঙ
ক্লকের টেক্সট রঙ RGB (লাল, সবুজ, নীল) মান ব্যবহার করে নিয়ন্ত্রিত হয়, যেখানে প্রতিটি রঙের চ্যানেল ০ থেকে ২৫৫ পর্যন্ত থাকে এবং বিভিন্ন সংমিশ্রণ নিওম্যাট্রিক্সে বিভিন্ন রঙ তৈরি করে। 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।
গুরুত্বপূর্ণ ব্যবহারকারী সেটিংস যা আপনাকে অবশ্যই সম্পাদনা করতে হবে
১) টেক্সট রঙ (RGB)
০–২৫৫ মান ব্যবহার করে আপনার ক্লকের টেক্সট রঙ সেট করুন:
//লাল, সবুজ এবং নীল দিয়ে তৈরি ডিসপ্লের রঙ সেট করুন
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));
দ্রষ্টব্য: যদি আপনি সমস্ত রঙ ০ (কালো) সেট করেন, টেক্সটটি অদৃশ্য হয়ে যায়। স্কেচটিতে একটি নিরাপত্তা পরীক্ষা অন্তর্ভুক্ত রয়েছে:
// যদি ব্যবহারকারী সমস্ত রঙ ০ সেট করে, ডিসপ্লেটি বন্ধ হয়ে যাবে তাই এটি সবুজ সেট করুন
if (color_RED == 0 && color_GREEN == 0 && color_BLUE == 0) {
color_GREEN = 200;
}
এটি নিশ্চিত করে যে ম্যাট্রিক্সটি একটি অদৃশ্য রঙের সেটিংয়ের কারণে কখনও "মৃত" দেখায় না।
২) ওয়াই-ফাই SSID এবং পাসওয়ার্ড
এগুলি আপনার আসল ওয়াই-ফাই নাম এবং পাসওয়ার্ড দিয়ে প্রতিস্থাপন করুন:
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
স্টার্টআপের সময়, ESP32 সিরিয়াল মনিটরে সংযোগের অগ্রগতি প্রিন্ট করে এবং প্রায় ১৫ সেকেন্ড পরে (৩০টি পুনরায় চেষ্টা × ৫০০ms) সময় শেষ করে।
৩) NTP সার্ভার
ডিফল্ট NTP সার্ভার হল:
const char* ntpServer = "pool.ntp.org";
আপনি এটি যেমন আছে তেমন রাখতে পারেন। যদি আপনি কখনও একটি স্থানীয় সার্ভার ব্যবহার করতে চান, হোস্টনামটি আপনার পছন্দের NTP সার্ভার দিয়ে প্রতিস্থাপন করুন।
৪) সময় অঞ্চল অফসেট এবং ডেলাইট সেভিং অফসেট
এই দুটি সেটিং স্থানীয় সময় নিয়ন্ত্রণ করে:
// টরন্টো-জাতীয়: UTC-5, প্লাস ১ ঘন্টা DST
const long gmtOffset_sec = -5 * 3600; // -৫ ঘন্টা
const int daylightOffset_sec = 3600; // DST এর জন্য +১ ঘন্টা
এগুলি কীভাবে সেট করবেন:
gmtOffset_sec= (UTC অফসেট ঘন্টা) × ৩৬০০। উদাহরণ: UTC-5 →-5*3600, UTC+2 →2*3600।daylightOffset_sec=0যদি আপনি DST সমন্বয় না চান, অথবা3600যদি আপনার অঞ্চল বর্তমানে DST (+১ ঘন্টা) পালন করছে।
এগুলি এখানে প্রয়োগ করা হয়েছে:
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 হিসেবে তৈরি হয়
ক্লকটি ফরম্যাট করা সময়টি একটি ৬-অক্ষরের বাফারে সংরক্ষণ করে:
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 RGB LED ম্যাট্রিক্স
- ESP32-S3 আরজিবি এলইডি ম্যাট্রিক্স প্রজেক্ট ১- মৌলিক ডট
- ESP32-S3 RGB LED ম্যাট্রিক্স প্রজেক্ট ২ - স্ক্রলিং টেক্সট
- ESP32-S3 RGB LED ম্যাট্রিক্স প্রজেক্ট ৩ - মোবাইল ফোন থেকে টেক্সট
- ESP32-S3 RGB LED ম্যাট্রিক্স প্রজেক্ট ৪ - টিল্ট ডট
- ESP32-S3 RGB LED ম্যাট্রিক্স প্রজেক্ট ৫ - তীর সর্বদা উপরে
- ESP32-S3 RGB LED ম্যাট্রিক্স প্রজেক্ট ৬ - সিবল গেম
- ESP32-S3 RGB LED ম্যাট্রিক্স ইন্টারনেট ক্লক প্রজেক্ট - ২ ক্লক মাল্টি কালার সময় ও তারিখ ডিসপ্লে
- ESP32-S3 RGB LED ম্যাট্রিক্স ইন্টারনেট ক্লক প্রজেক্ট - তারিখসহ ৩টি রাতের রঙ
- ESP32-S3 RGB LED ম্যাট্রিক্স ইন্টারনেট ক্লক প্রজেক্ট - ৫ রেইনবো রঙ
- ESP32-S3 RGB LED ম্যাট্রিক্স ইন্টারনেট ক্লক প্রজেক্ট - ৪টি র্যান্ডম রঙ
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
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
}
}
আপনাকে যা প্রয়োজন হতে পারে
-
অ্যামাজন
-
ইবে
-
অলি এক্সপ্রেসPurchase ESP32-S3 RGB Matrix from AliExpresss.click.aliexpress.com
-
অলি এক্সপ্রেসPurchase ESP32-S3 RGB Matrix from AliExpress (2)s.click.aliexpress.com
সম্পদ ও রেফারেন্সসমূহ
-
ভিডিও
ফাইলসমূহ📁
ফ্রিটজিং ফাইল
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB