پروژه ساعت پایه ESP32-S3 ماتریس LED RGB Wi-Fi + ساعت زمان NTP -1

پروژه ساعت پایه ESP32-S3 ماتریس LED RGB Wi-Fi + ساعت زمان NTP -1

ساعت اینترنتی ESP32-S3 با NeoMatrix 8×8 (Wi-Fi + زمان NTP)

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

ESP32-s3_ساعت_اینترنتی_انیمیشن

چگونه کار می‌کند (سطح بالا)

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

رنگ RGB

رنگ متن ساعت با استفاده از مقادیر RGB (قرمز، سبز، آبی) کنترل می‌شود، که در آن هر کانال رنگ از 0 تا 255 متغیر است و ترکیب‌های مختلف رنگ‌های متفاوتی را بر روی NeoMatrix ایجاد می‌کنند. با تنظیم دادنcolor_RED,color_GREEN, andcolor_BLUEمتغیرها، شما به راحتی می‌توانید ظاهر ساعت را به هر رنگی که دوست دارید سفارشی کنید. برای پیدا کردن سریع مقادیر RGB دقیق برای یک رنگ خاص، می‌توانید از ابزار انتخابر رنگ 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) نام و رمز عبور 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) × 3600. مثال: UTC-5 →-5*3600UTC+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

ساعت زمان فرمت‌شده را در یک بافر 6 کاراکتری ذخیره می‌کند:

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

دانلودها و واصل‌ها

شِفر (کود) کامل در زیر این مقاله ارائه شده است. قطعات، ابزارها و داده‌ها نیز در زیر این مقاله پیوند داده شده‌اند.

تصاویر

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++
کپی شد!

مواردی که ممکن است به آن‌ها نیاز داشته باشید

منابع و مراجع

فایل‌ها📁

فایل فریزینگ