شِفر (کود) جستجو

پروژه ماتریس LED RGB ESP32-S3 2 - متن متحرک

پروژه ماتریس LED RGB ESP32-S3 2 - متن متحرک

پروژه ۲ - پیمایش متن بر روی ماتریس LED RGB ESP32-S3

در این پروژه ما ماتریس LED RGB ESP32-S3 را به یک بنر متنی کوچک تبدیل می‌کنیم. یک پیام کوتاه (به عنوان مثالRobojax) بر روی نمایشگر RGB 8×8 حرکت می‌کند و می‌توانید به راحتی متن، رنگ، روشنایی و سرعت حرکت را مستقیماً در شِفر (کود) تغییر دهید. این برای اعلان‌های ساده، برچسب‌های نام یا پیام‌های وضعیت کوچک بسیار مفید است.

تمام شش پروژه در این مجموعه در یک ویدیو یوتیوب نمایش داده شده و توضیح داده می‌شوند. همان ویدیو در این صفحه جاسازی شده است، بنابراین می‌توانید به‌طور دقیق ببینید که نحوه اسکرول متن در زمان واقعی چگونه به نظر می‌رسد و هر تنظیم چگونه بر انیمیشن تأثیر می‌گذارد. شِفر (کود) کامل این پروژه به‌طور خودکار در زیر مقاله بارگذاری می‌شود، و می‌توانید ماجیول ماتریس LED RGB ESP32-S3 را از فروشگاه‌های وابسته که در بخش شِفر (کود) ذکر شده‌اند، خریداری کنید.

این پروژه بر اساس مبانی پروژه ۱ (حرکت نقطه و کنترل رنگ) ساخته شده و رندرینگ متن و اسکرولینگ را با استفاده از کتابخانه NeoMatrix اضافه می‌کند.

بررسی کلی ماجیول ماتریس LED RGB ESP32-S3

سخت‌افزار در تمامی شش پروژه یکسان است: یک میکروکنترلر ESP32-S3 با Wi-Fi و بلوتوث، یک ماتریس LED RGB 8×8 (۶۴ LED RGB قابل آدرس‌دهی)، یک شتاب‌سنج QMI8658C، پورت USB و پایه‌های ورودی/خروجی قابل دسترسی.:contentReference[oaicite:0]{index=0}

  • ESP32-S3- پردازنده اصلی با Wi-Fi/BLE برای پروژه‌های پیشرفته.
  • ماتریس RGB ۸×۸- ۶۴ LED RGB برای آیکن‌ها، متن و انیمیشن‌ها.
  • شتاب‌سنج QMI8658C- در پروژه‌های بعدی برای کج شدن و جهت‌گیری استفاده شد.
  • پورت USB- برای قدرت و برنامه‌نویسی از طریق محیط توسعه آردوینو استفاده می‌شود.
  • پایه‌های نمایاناجازه می‌دهد تا از بورد مانند یک ESP32 معمولی برای ورودی و خروجی‌های دیگر استفاده کنید.
  • دکمه‌های راه‌اندازی / بازنشانی- برای بارگذاری فرم‌ویر و راه‌اندازی مجدد طرح‌ها.

در پروژه ۲ ما عمدتاً بر روی ماتریس و توابع متنی NeoMatrix تمرکز می‌کنیم. شتاب‌سنج هنوز استفاده نشده است، اما همان برد تمام تعاملات و پروژه‌های بازی بعدی را نیز مدیریت خواهد کرد.

پروژه‌های پوشش‌داده‌شده در ویدیو (زمان‌بندی)

این ویدیو که همراه با این مقاله است، شامل تمامی شش پروژه می‌باشد. زمان‌بندی تقریبی به شرح زیر است:

  • ۰۰:۰۰- مقدمه
  • 00:01- نصب بوردهای ESP32
  • 03:32- نصب کتابخانه‌ها
  • ۰۵:۳۲- پروژه ۱: نقطه متحرک
  • ۱۱:۱۱- پروژه ۲: پیمایش متن
  • ۱۲:۵۹- پروژه ۳: متن HTTP
  • ۱۶:۴۱- پروژه ۴: نقطه مایل
  • ۱۸:۵۵- پروژه 5: پیکان بالا
  • ۲۰:۰۲- پروژه ۶: بازی هدف

شما تشویق می‌شوید که ویدئو را در حین خواندن این مقاله تماشا کنید. این ویدئو متن را به‌صورت زنده بر روی ماتریس LED پیمایش می‌کند و تمام مراحل را در IDE آردوینو نشان می‌دهد.

نصب بردهای ESP32 در محیط برنامه‌نویسی آردوینو

قبل از اجرای شِفر (کود) اسکرول متن، مطمئن شوید که پشتیبانی از ESP32 در IDE آردوینو شما نصب شده است:

  1. باز کنFile > Preferencesو URL بردهای ESP32 را به "آدرس‌های اضافی مدیر برد" اضافه کنید.
  2. برو بهTools > Board > Boards Manager…جستجو برایESP32و بسته رسمی ESP32 را نصب کنید.
  3. از بورد ماتریس RGB ESP32-S3 خود را انتخاب کنیدTools > Board.
  4. ماجیول را از طریق USB متصل کنید و پورت COM/سریال صحیح را انتخاب کنید.Tools > Port.

اگر نوع برد یا پورت صحیح نباشد، اسکچ بارگذاری نخواهد شد.

نصب NeoMatrix و کتابخانه‌های مورد نیاز

متن اسکرول با استفاده از آدافر بیت نیو ماتریکس و وابستگی‌های آن پیاده‌سازی شده است. در ویدئو، آن‌ها از طریق مدیر کتابخانه نصب می‌شوند.

شما نیاز خواهید داشت:

  • Adafruit NeoMatrix
  • Adafruit NeoPixel
  • Adafruit GFX Library
  1. باز کنیدSketch > Include Library > Manage Libraries….
  2. جستجو برایAdafruit NeoMatrixو کلیک کنیدنصب کنید.
  3. هنگامی که خواسته شد، اجازه دهید نصب شودAdafruit GFXوAdafruit NeoPixelبه عنوان وابستگی‌ها.

اگر نصب موفقیت آمیز باشد، باید طرح های نمونه را زیر ببینیدFile > Examples > Adafruit NeoMatrixوFile > Examples > Adafruit NeoPixel.

پروژه ۲ - تنظیمات شِفر (کود) (اسکرول متن)

طراحی کامل متن اسکرول به طور خودکار در پایین این مقاله در وب‌سایت بارگذاری شده است. در اینجا تنها بر روی مقادیر تنظیماتی که احتمالاً می‌خواهید ویرایش کنید تمرکز می‌کنیم: پایه، اندازه ماتریس، روشنایی، رشته متنی، رنگ، سرعت اسکرول و جهت اختیاری.

تمام بخش‌های زیر از قسمت پیکربندی در بالای طرح گرفته شده‌اند تا بتوانید به سرعت رفتار را بدون تغییر در منطق اصلی تنظیم کنید.

پایه و اندازه ماتریس

مانند پروژه ۱، ماتریس RGB به GPIO ۱۴ متصل است و شامل ۶۴ LED (۸×۸) می‌باشد. مطمئن شوید که این دو خط با ماجیول شما مطابقت دارد:


 // Pin connected to 8×8 RGB matrix 
const int MATRIX_PIN = 14; // must be 14 on this module // Matrix size (width and height)
 const int MATRIX_WIDTH = 8; 
const int MATRIX_HEIGHT = 8; 

اگر شما یک مثال از کتابخانه NeoMatrix کپی کنید، ممکن است از پایه یا اندازه متفاوتی استفاده کند؛ همیشه آنها را تغییر دهید تا با این برد مطابقت داشته باشند.

روشنایی متن

کنترل روشنایی معمولاً با مقداری بین ۰ تا ۲۵۵ انجام می‌شود، که در آن ۰ خاموش و ۲۵۵ حداکثر روشنایی است. یک مقدار متوسط معمولاً کافی است:


// Overall matrix brightness (0–255) 
uint8_t matrixBrightness = 40; // comfortable indoor brightness // In 
setup(): 
matrix.setBrightness(matrixBrightness); 

اگر از صفحه‌نمایش در یک محیط روشن یا برای مدت کوتاهی استفاده می‌کنید، می‌توانید این مقدار را افزایش دهید، اما از افزایش بیش از حد آن در صورت نزدیکی به صفحه نمایش اجتناب کنید.

متن برای پیمایش

پیام واقعی به صورت یک رشته ذخیره شده است. در ویدیو، متن نمونه این استRobojaxشما می‌توانید آن را به هر برچسب یا پیغام کوتاهی که دوست دارید، تغییر دهید:


 // Text to scroll on the 8×8 matrix const char scrollText[] = "Robojax";
 // change this to your message 

به یاد داشته باشید که این فقط یک ماتریس ۸×۸ است، بنابراین پیام‌های بسیار طولانی زمان بیشتری برای نوردیدن خواهند گرفت و ممکن است خواندنشان دشوار شود.

رنگ متن (مقادیر RGB)

رنگ متن در حال حرکت با مؤلفه‌های قرمز، سبز و آبی (۰-۲۵۵) تنظیم می‌شود. به عنوان مثال، قرمز خالص است(255, 0, 0)سبز خالص است(0, 255, 0)و آبی خالص است(0, 0, 255). در طرح شما چیزی شبیه به این را خواهید دید:


 // Text color (R, G, B) uint8_t textRed = 255; // red component uint8_t textGreen = 0; // green component uint8_t textBlue = 0; // blue component 

برای تغییر رنگ:

  • زرد:textRed = 255; textGreen = 255; textBlue = 0;
  • فیروزه‌ای:textRed = 0; textGreen = 255; textBlue = 255;
  • سفید:textRed = 255; textGreen = 255; textBlue = 255;

ویدیو همچنین استفاده از یک انتخاب‌کننده رنگ آنلاین برای پیدا کردن مقادیر RGB و سپس وارد کردن آن‌ها در شِفر (کود) را نشان می‌دهد.:contentReference[oaicite:1]{index=1}

سرعت اسکرول (تأخیر بین فریم‌ها)

سرعت پیمایش توسط یک مقدار تأخیر به میلی‌ثانیه بین هر مرحله به‌روزرسانی کنترل می‌شود. یک مقدار کوچکتر باعث حرکت سریع‌تر متن می‌شود؛ در حالی که یک مقدار بزرگتر آن را کندتر می‌کند. در طرح، باید یک متغیر مانند را پیدا کنید:


// Delay between scroll steps (in milliseconds) int scrollDelayMs = 50; 
// smaller = faster, larger = slower 

مثال‌ها:

  • scrollDelayMs = 20;→ پیمایش سریع.
  • scrollDelayMs = 50;→ سرعت متوسط (مشابه ویدیو).
  • scrollDelayMs = 100;یا بیشتر → پیمایش کند و آسان برای خواندن.

درونloop()این مقدار در یک مورد استفاده می‌شودdelay(scrollDelayMs);بعد از هر بازنویسی موقعیت متن را فراخوانی کنید.

جهت اسکرول (اختیاری)

در پروژه "اسکرول متن پایه" ما معمولاً به سمت چپ اسکرول می‌کنیم، اما تعریف یک متغیر جهت نمادین مفید است تا بتوانید بعداً با سایر جهت‌ها (چپ، راست، بالا، پایین) آزمایش کنید.

یک الگوی مشترک این است:


 // Scroll direction selector // 0 = left, 1 = right, 2 = up, 3 = down 
int scrollDirection = 0; // default: scroll to the left 

حلقه اصلی سپس بررسی می‌کندscrollDirectionو متن را به سمت انتخاب شده حرکت می‌دهد. برای پروژه ۲ می‌توانید آن را در0(چپ)، اما اگر بعداً طرح را گسترش دهید می‌توانید شرایطی مانند: را اضافه کنید


 if (scrollDirection == 0) { 
// move text left 
} else if (scrollDirection == 1) { 
// move text right 
} else if (scrollDirection == 2) { 
// move text up
 } else if (scrollDirection == 3) { 
// move text down 
}
 

برای این مقاله ما فقط تنظیمات را مستند می‌کنیم. پیاده‌سازی کامل بخشی از کدی است که در زیر مقاله بارگذاری شده است.

خلاصه

پروژه 2 ماتریس LED RGB ESP32-S3 شما را به یک نمایشگر متنی ساده اما جذاب تبدیل می‌کند. با ویرایش تنها چند متغیر در بالای شِفر (کود)، می‌توانید به سرعت تغییر دهید:

  • کدام پیام نمایش داده می‌شود (scrollText).
  • رنگ متنtextRed,textGreen,textBlue).
  • روشنی ماتریسmatrixBrightness).
  • سرعت پیمایشscrollDelayMs).
  • جهت اسکرول کردنscrollDirectionاگر شما انتخاب کنید که از آن استفاده کنید).

طرح کامل این پروژه در زیر این مقاله موجود است (به‌طور خودکار توسط وب‌سایت بارگذاری می‌شود). برای پیکربندی دقیق قدم به قدم و یک نمایش زنده از متن پیمایشی در حال فعالیت، حتماً بخش مربوطه ویدئو را تماشا کنید. اگر از پروژه خوشتان آمده و می‌خواهید خودتان آن را بسازید، می‌توانید ماجیول ماتریس LED RGB ESP32-S3 را نیز از واصل‌های وابسته‌ای که زیر شِفر (کود) ذکر شده‌اند، خریداری کنید.

تصاویر

ESP32 S3 Matrix
ESP32 S3 Matrix
ESP32 S3 Matrix  pin out
ESP32 S3 Matrix pin out
ESP32-S3_RGB_8x8_matrix1
ESP32-S3_RGB_8x8_matrix1
ESP32-S3_RGB_8x8_matrix-2
ESP32-S3_RGB_8x8_matrix-2
ESP32-S3-Mtrix - Alway Up
ESP32-S3-Mtrix - Alway Up
800-ESP32-S3 RGB LED Matrix Project 2 - Scrolling Text
زبان: C++
/*
 * پروژه ۲: نوار متن - ماتریس LED RGB ESP32-S3 (ویوشیر)
 * 
 * این برنامه متن متحرک را روی ماتریس ۸ در ۸ نمایش می‌دهد
 * 
 * ▶️ آموزش ویدیویی:
 * https://youtu.be/JKLuYrRcLMI
 * 
 * 📚⬇️ منابع و صفحه شِفر (کود):
 * https://robojax.com/RJT829
 * 
 * QMI8658_RGB_2
 */
#include <Arduino.h>
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

 // -------- راه اندازی MATRIX LED --------
#define MATRIX_PIN    14
#define MATRIX_WIDTH  8
#define MATRIX_HEIGHT 8

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(
  MATRIX_WIDTH, MATRIX_HEIGHT, MATRIX_PIN,
  NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
  NEO_RGB + NEO_KHZ800
);

 // =========================
 // تنظیمات کاربر
 // =========================

 // متن برای اسکرول
const char* MESSAGE = "ROBOJAX ";

 // روشنایی (۰-۲۵۵)
uint8_t BRIGHTNESS = 10;

 // سرعت پیمایش (میلی‌ثانیه بین مراحل)
 // کو Smaller = سریع‌تر
uint16_t SCROLL_DELAY = 80;

 // جهت پیمایش
enum ScrollDir {
  SCROLL_LEFT,
  SCROLL_RIGHT,
  SCROLL_UP,
  SCROLL_DOWN
};

 // این را به تنظیم جهت تغییر دهید
ScrollDir DIRECTION = SCROLL_LEFT;

 // رنگ متن (RGB را در اینجا تنظیم کنید)
uint8_t COLOR_R = 255;
uint8_t COLOR_G = 0;
uint8_t COLOR_B = 0;

 // =========================
 // وضعیت داخلی
 // =========================
uint16_t textColor;
int16_t posX, posY;
int16_t textWidth, textHeight;
uint32_t lastStepTime = 0;

 // اندازه متن را به پیکسل برای فونت پیش‌فرض 5x7 محاسبه کنید
void computeTextSize() {
  int16_t x1, y1;
  uint16_t w, h;
  matrix.getTextBounds((char*)MESSAGE, 0, 0, &x1, &y1, &w, &h);
  textWidth  = (int16_t)w;
  textHeight = (int16_t)h;
}

 // موقعیت شروع را بر اساس جهت تنظیم کنید
void resetScrollPosition() {
  switch (DIRECTION) {
    case SCROLL_LEFT:
 // از لبه راست شروع کنید
      posX = matrix.width();
      posY = 0; // ردیف بالایی برای ۸x۸
      break;

    case SCROLL_RIGHT:
 // از لبه چپ شروع کنید
      posX = -textWidth;
      posY = 0;
      break;

    case SCROLL_UP:
      posX = 0;
      posY = matrix.height(); // از پایین شروع کن
      break;

    case SCROLL_DOWN:
      posX = 0;
      posY = -textHeight; // بالا شروع کنید
      break;
  }
}

 // یک مرحله پیمایش
void stepScroll() {
 // جابجایی موقعیت
  switch (DIRECTION) {
    case SCROLL_LEFT:
      posX--;
      if (posX < -textWidth) {
        posX = matrix.width();
      }
      break;

    case SCROLL_RIGHT:
      posX++;
      if (posX > matrix.width()) {
        posX = -textWidth;
      }
      break;

    case SCROLL_UP:
      posY--;
      if (posY < -textHeight) {
        posY = matrix.height();
      }
      break;

    case SCROLL_DOWN:
      posY++;
      if (posY > matrix.height()) {
        posY = -textHeight;
      }
      break;
  }

 // کادر بکشید
  matrix.fillScreen(0);
  matrix.setCursor(posX, posY);
  matrix.print(MESSAGE);
  matrix.show();
}

void setup() {
  matrix.begin();
  matrix.setBrightness(BRIGHTNESS);
  matrix.setTextWrap(false); // بدون بسته‌بندی خودکار
  matrix.setTextSize(1); // فونت پیش‌فرض ۵x۷
  textColor = matrix.Color(COLOR_R, COLOR_G, COLOR_B);
  matrix.setTextColor(textColor);

  computeTextSize();
  resetScrollPosition();

  matrix.fillScreen(0);
  matrix.show();
}

void loop() {
  uint32_t now = millis();
  if (now - lastStepTime >= SCROLL_DELAY) {
    lastStepTime = now;
    stepScroll();
  }
}

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

منابع و مراجع

فایل‌ها📁

فایل فریزینگ