این آموزش بخشی است از: ماتریس LED RGB مدل ESP32-S3
پروژه جالبی برای ایجاد کاربردهای سرگرمکننده و کاربردی با استفاده از ماژول ماتریس RGB ESP32-S3. لینک سایر ویدیوها در زیر این مقاله آمده است.
پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - ۳ رنگ شب با تاریخ
ساعت اینترنتی ESP32-S3 RGB NeoMatrix با روشنایی خودکار روز/شب
این پروژه یک ساعت اینترنتی ماتریس RGB با ESP32-S3 است که به طور خودکار در طول روز و شب روشنایی را تنظیم میکند. ESP32-S3 به وایفای متصل میشود، زمان کنونی را از یک سرور NTP همگامسازی میکند و زمان را در حال حرکت نمایش میدهد.HH:MMفرمت در یک ماتریس NeoMatrix RGB 8×8. ساعت همچنین رنگهای RGB ثابت یا چرخشی را برای متن نمایش پشتیبانی میکند.

این ساعت چه کاری انجام میدهد
پس از روشن شدن، ESP32-S3 به شبکه Wi-Fi شما متصل میشود و زمان محلی فعلی را از اینترنت دریافت میکند. زمان بهطور روان در نمایشگر LED حرکت میکند. در ساعات شب، نمایشگر بهطور خودکار به روشنایی کمتری کاهش مییابد، در حالی که در طول روز به سطح روشنایی بیشتری برمیگردد.
کتابخانههای مورد استفاده
این طرح از کتابخانههای زیر استفاده میکند:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>نصب کنیدآدافروت نئو ماتریکساز مدیر کتابخانه آردوینو. تمام وابستگیهای مورد نیاز مانندAdafruit GFX LibraryوAdafruit NeoPixelبه طور خودکار نصب خواهد شد.

پیکربندی کاربر مهم
شناسه SSID و رمز عبور Wi-Fi (حساس به بزرگی و کوچکی حروف)
مقادیر زیر را با اطلاعات ورود به شبکه Wi-Fi خود جایگزین کنید:

const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";مهم:SSIDهای Wi-Fi عبارتند ازحساس به بزرگی و کوچکی حروف. یک SSID به نام"Book"استنههمانند"book"اگر حروف بزرگ و کوچک دقیقاً مطابقت نداشته باشند، ESP32 قادر به اتصال نخواهد بود.
سرور NTP، منطقه زمانی و صرفهجویی در نور روز
ساعت زمان را با استفاده از سرور NTP زیر همگامسازی میکند:
const char* ntpServer = "pool.ntp.org";زمان محلی با استفاده از این اختلافات محاسبه میشود:
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;gmtOffset_secتفصیل میدهد که偏移 UTC شما در ثانیهها چیستdaylightOffset_secیک ساعت به زمان اضافه میکند زمانی که ساعت تابستانی فعال است (استفاده0اگر لازم نیست)
این مقادیر با استفاده از:
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);روشنایی خودکار روز / شب
روشنایی نمایش بهطور خودکار بر اساس ساعت فعلی تغییر میکند:
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22; // 10 PM
const int NIGHT_END_HOUR = 6; // 6 AMبین ساعت ۱۰ شب تا ۶ صبح، روشنایی ماتریس کاهش مییابد تا در محیطهای تاریک راحتتر باشد. در خارج از این ساعات، روشنایی کامل روز بازگردانده میشود. میتوانید این مقادیر را برای مناسب کردن با نور اتاق خود تنظیم کنید.
پیکربندی رنگ RGB
رنگ متن ساعت با استفاده از مقادیر RGB (قرمز، سبز، آبی) تعریف شده است، جایی که هر کانال از ۰ تا ۲۵۵ متغیر است. رنگهای متعددی میتوانند در یک آرایه ذخیره و بهطور خودکار چرخش کنند:
uint8_t userColors[][3] = {
{17, 43, 171}, // Light Blue
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{255, 165, 0}, // Orange
{255, 0, 255} // Magenta
};اگرuseFixedColorتنظیم شده است برایtrue، ساعت همیشه از یک رنگ استفاده میکند. اگر تنظیم شده باشد بهfalseرنگ به طور خودکار پس از هر بار اسکرول کامل زمان تغییر میکند.
برای پیدا کردن سریع مقادیر دقیق RGB برای هر رنگ، از ابزار انتخاب کننده رنگ RGB استفاده کنید:انتخابگر رنگ RGB.
نمایش زمان و اسکرول کردن
زمان کنونی به صورت فرمتبندی شده استHH:MMو در یک بافر کاراکتری کوچک ذخیره میشود. به دلیل اینکه نمایشگر تنها ۸ پیکسل عرض دارد، متن به طور روان از راست به چپ حرکت میکند. به محض اینکه زمان به طور کامل از نمایشگر خارج میشود، رنگ بعدی (در صورت فعال بودن) برای دور بعدی انتخاب میشود.
به نمایش
پس از بارگذاری طرح:
- ESP32-S3 به Wi-Fi متصل میشود.
- زمان از اینترنت هماهنگ شده است
- زمان فعلی در ماتریس RGB حرکت میکند
- روشنایی به طور خودکار بین روز و شب تغییر میکند
- رنگ متن ثابت باقی میماند یا بر اساس تنظیمات شما تغییر میکند.
دانلودها و واصلها
شِفر (کود) منبع کامل در پایین این مقاله ارائه شده است. واصلهای به قطعات، ابزارها و برگههای داده در پایین این مقاله موجود است.
این آموزش بخشی از: ماتریس 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
- پروژه ساعت پایه ESP32-S3 ماتریس LED RGB با Wi-Fi + ساعت زمان NTP -1
- پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - نمایش زمان و تاریخ چند رنگ 2 ساعته
- پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - ۵ رنگ رنگین کمان
- پروژه ساعت اینترنتی ماتریس LED RGB ESP32-S3 - ۴ رنگ تصادفی
- آزمایش ماتریس LED RGB ESP32-S3 برای تنظیم RGB و GRB
/*
* =====================================================================================
* ESP32-S3 INTERNET RGB CLOCK (8x8 Matrix) - Project 3- Night color with Date
* =====================================================================================
watch video https://youtube.com/shorts/4iWjLiD7fS8
📚⬇️ Download and resource page https://robojax.com/RJT840
* 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).
* =====================================================================================
*/
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define MATRIX_PIN 14
// --- BRIGHTNESS CONFIGURATION ---
const int DAY_BRIGHTNESS = 40;
const int NIGHT_BRIGHTNESS = 5;
const int NIGHT_START_HOUR = 22; // 10 PM
const int NIGHT_END_HOUR = 6; // 6 AM
// --- COLOR CONFIGURATION ---
bool useFixedColor = false;
int fixedColorIndex = 0;
uint8_t userColors[][3] = {
{17, 43, 171}, // Light Blue
{255, 0, 0}, // Red
{0, 255, 0}, // Green
{255, 165, 0}, // Orange
{255, 0, 255} // Magenta
};
// 👇 REPLACE these with your real home WiFi name & password
const char* WIFI_SSID = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";
int currentColorIndex = 0;
int totalColors = sizeof(userColors) / sizeof(userColors[0]);
// --- INTERVALS ---
unsigned long lastTimeUpdateMs = 0;
const uint16_t timeUpdateIntervalMs = 1000;
unsigned long lastScrollMs = 0;
const uint16_t scrollIntervalMs = 100;
// --- GLOBAL VARIABLES ---
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;
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -5 * 3600;
const int daylightOffset_sec = 3600;
void updateTimeText() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) return;
// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min);
// Apply Auto-Brightness
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);
// Pick the color (Fixed or Cycle)
int idx = useFixedColor ? fixedColorIndex : currentColorIndex;
matrix.setTextColor(matrix.Color(userColors[idx][0], userColors[idx][1], userColors[idx][2]));
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;
// Width for "HH:MM" is roughly 30 pixels
int16_t textWidth = 30;
// TRIGGER: When time is fully off-screen
if (scrollX < -textWidth) {
scrollX = matrix.width(); // Reset position to right side
// Cycle to the next color in the array for the next pass
if (!useFixedColor) {
currentColorIndex = (currentColorIndex + 1) % totalColors;
Serial.print("Next cycle color index: ");
Serial.println(currentColorIndex);
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(DAY_BRIGHTNESS);
updateTimeText();
}
void loop() {
unsigned long now = millis();
// Update time digits and brightness once per second
if (now - lastTimeUpdateMs >= timeUpdateIntervalMs) {
lastTimeUpdateMs = now;
updateTimeText();
}
// Handle the scrolling animation
if (now - lastScrollMs >= scrollIntervalMs) {
lastScrollMs = now;
scrollTime();
}
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون
-
ایبیخرید ماتریس RGB ESP32-S3 از eBayebay.us
-
علیاکسپرسخرید ماتریس RGB ESP32-S3 از علیاکسپرسs.click.aliexpress.com
-
علیاکسپرسمجموعه ماتریس RGB ESP32-S3 را از علیاکسپرس خریداری کنید (2)s.click.aliexpress.com
منابع و مراجع
-
ویدیو
-
داخلیابزار انتخاب رنگrobojax.com
فایلها📁
فایل فریزینگ
-
قطعه فریتزینگ esp32-S3-supermini-tht
esp32-S3-supermini-tht.fzpz0.02 MB