این آموزش بخشی است از: ماتریس LED RGB مدل ESP32-S3
پروژه جالبی برای ایجاد کاربردهای سرگرمکننده و کاربردی با استفاده از ماژول ماتریس RGB ESP32-S3. لینک سایر ویدیوها در زیر این مقاله آمده است.
پروژه ساعت پایه ESP32-S3 ماتریس LED RGB با Wi-Fi + ساعت زمان NTP -1
ساعت اینترنتی ESP32-S3 با NeoMatrix 8×8 (Wi-Fi + زمان NTP)
این پروژه یک ESP32-S3 و یک ماتریس RGB 8×8 نئو (NeoPixel/WS2812) را به یک ساعت اینترنتی کوچک تبدیل میکند. ESP32 به Wi-Fi متصل میشود، زمان محلی را از یک سرور NTP همزمان میکند و سپس زمان را به صورت متحرک نمایش میدهد.HH:MMبر روی نمایشگر ۸×۸.

نحوه کارکرد آن (در سطح بالا)
1) ESP32-S3 به روتر شما متصل میشود با استفاده از<WiFi.h>.
۲) زمان را از یک سرور NTP همگامسازی میکند با استفاده از"time.h"وconfigTime().
زمان به صورت فرمت شده استHH:MMو در یک بافر متنی کوچک ذخیره شد.
۴) نئوماتریکس متن را نمایش میدهد و آن را بر روی پنل ۸×۸ اسکرول میکند.

رنگ RGB
رنگ متن ساعت با استفاده از مقادیر RGB (قرمز، سبز، آبی) کنترل میشود، که در آن هر کانال رنگی از ۰ تا ۲۵۵ متغیر است و ترکیبهای مختلف رنگهای مختلفی روی NeoMatrix ایجاد میکنند. با تنظیمcolor_RED,color_GREEN, andcolor_BLUEشما میتوانید به راحتی ظاهر ساعت را به هر رنگی که میپسندید سفارشیسازی کنید. برای پیدا کردن سریع مقدار دقیق RGB برای یک رنگ خاص، میتوانید از انتخابگر رنگ RGB آنلاین استفاده کنید.انتخابگر رنگ.

کتابخانه های استفاده شده
این موارد به شما دقیقاً میگویند که طرح به چه چیزی وابسته است:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>نصب کنیدآدا فرویت نئوماتریکساستفاده از مدیر کتابخانه آردوینو. همچنین وابستگیهای مورد نیاز را نیز بارگذاری خواهد کرد مانندAdafruit GFX LibraryوAdafruit NeoPixel.
تنظیمات مهم کاربری که باید ویرایش کنید
1) رنگ متن (RGB)
رنگ متن ساعت خود را با استفاده از مقادیر ۰-۲۵۵ تنظیم کنید:
//set the color of display made of Red, Green and Blue
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 user set all colors to 0, the display will be turned off so set it green
if (color_RED == 0 && color_GREEN == 0 && color_BLUE == 0) {
color_GREEN = 200;
}این اطمینان میدهد که ماتریس هرگز به دلیل تنظیم رنگ نامرئی "مرده" به نظر نمیرسد.
2) SSID و رمز عبور Wi-Fi
اینها را با نام واقعی Wi-Fi و رمزعبور خود جایگزین کنید:
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";در حین راهاندازی، ESP32 پیشرفت اتصال را در نمایشگر مسلسل چاپ میکند و پس از حدود ۱۵ ثانیه (۳۰ تلاش × ۵۰۰ میلیثانیه) زمانش به پایان میرسد.
سرور NTP
سرور NTP پیشفرض عبارت است از:
const char* ntpServer = "pool.ntp.org";شما میتوانید آن را به همانی که هست نگه دارید. اگر هر زمان بخواهید از یک سرور محلی استفاده کنید، نام میزبان را با سرور NTP مورد نظر خود جایگزین کنید.
۴) تفاوت زمان منطقهای و تفاوت زمان صرفهجویی در روشنایی روز
این دو تنظیم زمان محلی را کنترل میکنند:
// 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چگونه آنها را تنظیم کنیم:
gmtOffset_sec= (ساعت جابهجایی UTC) × ۳۶۰۰. مثال: UTC-5 →-5*3600, UTC+2 →2*3600.daylightOffset_sec=0اگر نمیخواهید تنظیمات DST انجام شود، یا3600اگر منطقه شما در حال حاضر ساعت تابستانی را رعایت میکند (+1 ساعت).
اینها در اینجا اعمال میشوند:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);پیکربندی نمایش
پایه داده ماتریسی
پایه داده اینجا تعریف شده است:
#define MATRIX_PIN 14اگر سیمکشی شما از GPIO متفاوتی استفاده میکند، این شماره را تغییر دهید تا مطابقت داشته باشد.
چیدمان NeoMatrix + ترتیب رنگ
ماتریس شما به این شکل اولیهسازی شده است:
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_*پرچمها (بالا/پایین، چپ/راست، ردیفها/ستونها، پیشرفته/زلزلهای). - ترتیب رنگ:این شِفر (کود) از
NEO_RGB. برخی از پنل ها هستندNEO_GRBاگر قرمز/سبز/آبی مطابقت ندارند، تغییر دهیدNEO_RGBبه ترتیب صحیح.
روشنایی
روشنایی تنظیم شده است درinitMatrix():
matrix.setBrightness(40);برای افزایش روشنایی نمایش، افزایش دهید و برای کاهش گرما و مصرف برق، کاهش دهید.
چگونه زمان تولید میشود به عنوانHH:MM
ساعت زمان فرمت شده را در یک بافر ۶ کاراکتری ذخیره میکند:
char timeText[6] = "00:00";سپسupdateTimeText()زمان محلی همگامشده با NTP را میخواند و متن را مینویسد:
// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d",
timeinfo.tm_hour,
timeinfo.tm_min);این هر ثانیه یک بار در حلقه اصلی بهروزرسانی میشود.
نحوه کارکرد اسکرولینگ روی نمایشگر ۸×۸
یک ماتریس ۸×۸ خیلی باریک است تا نمایش داده شود.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
دانلودها و واصلها
شِفر (کود) کامل در زیر این مقاله ارائه شده است. قطعات، ابزار و برگههای اطلاعات نیز در زیر این مقاله پیوند داده شدهاند.
این آموزش بخشی از: ماتریس LED RGB مدل ESP32-S3
- پروژههای ماتریس LED رنگی ESP32-S3 (بازی کجشدن، متن، پیکان، دموی وایفای)
- پروژه ماتریس LED RGB ESP32-S3 2 - متن متحرک
- پروژه ماتریس LED RGB ESP32-S3 3 - متن از تلفن همراه
- پروژه ماتریس LED RGB ESP32-S3 4 - نقطه کج
- پروژه ماتریس LED RGB ESP32-S3 ۵ - پیکان همیشه به سمت بالا
- پروژه ماتریس LED RGB ESP32-S3 6 - بازی Cible
- پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - نمایش زمان و تاریخ چند رنگ 2 ساعته
- پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - ۳ رنگ شب با تاریخ
- پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - ۵ رنگ رنگین کمان
- پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - ۴ رنگ تصادفی
- آزمایش ماتریس LED RGB ESP32-S3 برای تنظیم RGB و GRB
/*
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
}
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون
-
ایبیخرید ماتریس RGB ESP32-S3 از eBayebay.us
-
علیاکسپرسخرید ماتریس RGB ESP32-S3 از علیاکسپرسs.click.aliexpress.com
-
علیاکسپرسمجموعه ماتریس RGB ESP32-S3 را از علیاکسپرس خریداری کنید (2)s.click.aliexpress.com
منابع و مراجع
-
ویدیو
فایلها📁
فایل فریزینگ
-
قطعه فریتزینگ esp32-S3-supermini-tht
esp32-S3-supermini-tht.fzpz0.02 MB