پروژه‌های ماتریس LED رنگی ESP32-S3 (بازی کج‌شدن، متن، پیکان، دموی وای‌فای)

پروژه‌های ماتریس LED رنگی ESP32-S3 (بازی کج‌شدن، متن، پیکان، دموی وای‌فای)

ماتریس LED رنگی ESP32-S3: شش پروژه عملی (با شتاب‌سنج QMI8658)

این آموزش شما را در شش پروژه کوچک عملی با استفاده از برد ماتریس الایدی رنگی Waveshare ESP32-S3 راهنمایی میکند. شما از نصب بردها و کتابخانه‌ها در محیط آردوینو شروع کرده و با یک بازی سرگرم‌کننده هدف‌گیری کنترل‌شده با کج کردن خاتمه می‌دهید.

ماتریس ESP32 S3 در حال نمایش قلب رنگین‌کمانی

برد استفاده‌شده در اینجا شامل:

  • ماتریس LED RGB 8 در 8 (64 LED RGB آدرس‌پذیر)
  • کیو ام آی ۸۶۵۸شتاب‌سنج ۶ محوره
  • میکروکنترلر ESP32-S3 با وای‌فای و BLE
  • پورت USB برای برنامه‌نویسی و برق

تمامی پروژه‌ها با استفاده از کتابخانه‌های Adafruit NeoMatrix، Adafruit NeoPixel، Adafruit GFX و QMI8658 در آردوینو نوشته شده‌اند.

مرور کلی پروژه

شش پروژه‌ای که در این آموزش پوشش داده شده است:

  • پروژه ۱– نقطه متحرک (راه‌اندازی پایه ماتریس)
  • پروژه ۲– نمایش متن متحرک روی ماتریس ۸ × ۸
  • پروژه ۳– HTTP Text: ارسال متن از تلفن یا رایانه از طریق Wi-Fi
  • پروژه ۴– نقطه شیب، کنترل شده توسط شتاب‌سنج QMI8658
  • پروژه ۵– فلش همیشه به بالا (اشاره‌گر جهت با استفاده از QMI8658)
  • پروژه ۶– بازی هدف با کنترل زنگ و کج‌شدن

اگر در هر مرحله ای گم شدید، تنظیمات خود را با قطعه کدهای ارائه شده برای هر پروژه در زیر مقایسه کنید.

مقدمه

پروژه‌ها با ساده‌ترین انیمیشن ممکن (یک نقطه متحرک) آغاز می‌شوند و به تدریج متن، کنترل وای‌فای و در نهایت تعامل مبتنی بر حساس(حس کننده) با استفاده از شتاب‌سنج QMI8658 اضافه می‌شوند. در پایان، شما درک خواهید کرد که چگونه ماتریس LED را کنترل کرده و به جهت‌گیری برد واکنش نشان دهید.

نصب بردهای ESP32-S3 در محیط توسعه آردوینو

قبل از آپلود هر کدی، پشتیبانی رسمی برد ESP32 را در Arduino IDE نصب کنید و یک پروفایل برد ESP32-S3 (مثلاً یک ماجیول توسعه ESP32-S3) را انتخاب کنید. این کار تضمین می‌کند که اندازه حافظه فلش، فرکانس و تنظیمات USB به درستی هنگام کامپایل و آپلود اعمال شوند.

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

کتابخانه‌های زیر برای این پروژه‌ها مورد نیاز هستند:

  • آدافروت نئوپیکسل
  • Adafruit GFX
  • آدا فروت نئو ماتریکس
  • کیو‌ام‌آی ۸۶۵۸ (اثر لاهاو گاهالی)

آن‌ها را یک بار با استفاده از مدیر کتابخانه آردوینو نصب کنید، سپس می‌توانید آن‌ها را برای هر شش پروژه دوباره استفاده کنید.

درباره شتاب‌سنج QMI8658

QMI8658 یک IMU 6 محوره است که یک شتاب‌سنج 3 محوره و یک ژیروسکوپ 3 محوره را ترکیب می‌کند. در این پروژه‌ها، از مقادیر شتاب‌سنج برای تشخیص کج شدن و جهت‌گیری برد استفاده می‌شود.

کنوانسیون محورهای مورد استفاده در سراسر پروژه‌ها:

  • ایکس– چپ / راست
  • ی– جلو / عقب
  • ز– عمودی (بالا / پایین)

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


// Common QMI8658 configuration used in tilt projects
// (Projects 4, 5, and 6)

const auto ACC_RANGE   = QMI8658AccRange_2g;
const auto ACC_ODR     = QMI8658AccODR_31_25Hz;
const auto GYR_RANGE   = QMI8658GyrRange_256dps;
const auto GYR_ODR     = QMI8658GyrODR_31_25Hz;

// Sensitivity factor for converting tilt to pixels
const float TILT_TO_PIXEL_SCALE = 4.0f;   // increase for more sensitivity
    

پروژه ۱ – نقطه متحرک (تنظیمات پایه ماتریس)

پروژه ۱ یک انیمیشن ساده از نقطه‌ای متحرک است که اتصالات ماتریس LED و تنظیمات پایه NeoMatrix را تأیید می‌کند. شما ابعاد ماتریس، پایه داده، میزان روشنایی و سرعت حرکت نقطه را تعریف می‌کنید.

تنظیمات کلیدی


// Project 1 – Moving Dot (basic matrix setup)

// Matrix geometry
#define MATRIX_PIN       14
#define MATRIX_WIDTH      8
#define MATRIX_HEIGHT     8

// Layout (choose one; many boards use ZIGZAG or PROGRESSIVE)
#define MATRIX_LAYOUT  (NEO_MATRIX_TOP + NEO_MATRIX_LEFT + \
                        NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG)
// Alternative if needed:
// #define MATRIX_LAYOUT  (NEO_MATRIX_TOP + NEO_MATRIX_LEFT + \
//                         NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE)

// Visual parameters
const uint8_t  P1_BRIGHTNESS     = 40;         // overall brightness (0–255)
const uint16_t P1_DOT_COLOR      = matrix.Color(0, 255, 0); // green dot
const uint16_t P1_STEP_DELAY_MS  = 80;         // smaller = faster movement
    

با تغییر دادنP1_DOT_COLORوP1_STEP_DELAY_MS، می‌توانید به سرعت رنگ‌ها و سرعت‌های انیمیشن مختلف را آزمایش کنید.

پروژه ۲ – پیمایش متن

پروژه ۲ متنی اسکرول‌شونده مانند زیر را نمایش می‌دهد:Robojax. شما خود پیام، جهت حرکت متن، رنگ متن و سرعت را کنترل می‌کنید. این پروژه نمایش متن روی یک ماتریس بسیار کوچک را معرفی می‌کند.

تنظیمات کلیدی


// Project 2 – Text Scroll

// Scrolling message
const char* P2_MESSAGE = "Robojax";

// Text color (R, G, B)
const uint16_t P2_TEXT_COLOR = matrix.Color(255, 0, 0);  // red text

// Scroll speed
const uint16_t P2_SCROLL_DELAY_MS = 70;  // smaller = faster scroll

// Scroll direction (you will use this in your logic)
// Possible values: -1 for left, +1 for right, or use an enum
const int8_t P2_SCROLL_DIR_X = -1;  // -1 = scroll left, +1 = scroll right
const int8_t P2_SCROLL_DIR_Y =  0;  //  0 = no vertical scroll
    

اگر بعداً تصمیم بگیرید که به صورت عمودی (بالا یا پایین) اسکرول کنید، تنظیم کنیدP2_SCROLL_DIR_Xبه0و استفاده کنیدP2_SCROLL_DIR_Yدر عوض.

پروژه 3 – پیام متنی تلفن همراه (پیام کنترل شده از طریق وای‌فای)

پروژه ۳، ESP32-S3 را به یک سرور وب کوچک تبدیل می‌کند. شما از طریق Wi-Fi به برد متصل می‌شوید، صفحه وب آن را باز می‌کنید و یک پیام را تایپ می‌کنید. سپس متن، رنگ و سرعت اسکرول برای راه‌اندازی اثر اسکرول متن مشابه روی ماتریس در زمان واقعی استفاده می‌شوند.

ماتریس RGB ESP32-S3 - متن تلفن همراه

تنظیمات Wi-Fi و پیامک


// Project 3 – HTTP Text

// Wi-Fi credentials (change to your own network)
const char* P3_WIFI_SSID     = "YourWiFiName";
const char* P3_WIFI_PASSWORD = "YourWiFiPassword";

// Default text before anything is sent from the browser
String P3_currentText = "Robojax";

// Default color for the HTTP-controlled text
uint16_t P3_TEXT_COLOR = matrix.Color(0, 255, 255); // cyan

// Scroll speed for HTTP text
uint16_t P3_SCROLL_DELAY_MS = 80;  // can be updated from web page

// Allowed scroll directions (used as options in the HTML form)
enum P3_Direction {
  P3_LEFT,
  P3_RIGHT,
  P3_UP,
  P3_DOWN
};
P3_Direction P3_scrollDirection = P3_LEFT;
    

در صفحه وب، کاربر جهت و سرعت را انتخاب می‌کند. شِفر (کود) شما به سادگی به‌روزرسانی می‌کندP3_scrollDirectionوP3_SCROLL_DELAY_MSبر اساس گزینه‌های انتخاب شده.

پروژه ۴ – نقطه شیب‌دار (با استفاده از QMI8658)

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

`

تنظیمات ماتریکس و تیلت


// Project 4 – Tilt Dot

// Matrix geometry / brightness
#define MATRIX_PIN_TILT       14
#define MATRIX_WIDTH_TILT      8
#define MATRIX_HEIGHT_TILT     8

const uint8_t  P4_BRIGHTNESS   = 40;
const uint16_t P4_DOT_COLOR    = matrix.Color(0, 255, 0); // green
const uint16_t P4_UPDATE_DELAY = 30;  // ms between updates

// QMI8658 configuration (reuse from common settings if desired)
const auto P4_ACC_RANGE = QMI8658AccRange_2g;
const auto P4_ACC_ODR   = QMI8658AccODR_125Hz;

// Mapping accelerometer to pixel offset
// Negative sign may be adjusted depending on how the board is held
const float P4_TILT_SCALE_X = 3.5f; // affects left/right sensitivity
const float P4_TILT_SCALE_Y = 3.5f; // affects up/down sensitivity
    

در شِفر (کود) خود، قرائت‌های شتاب‌سنج را به یک محدوده مانند[-1, 1]، آن‌ها را درP4_TILT_SCALE_XوP4_TILT_SCALE_Yو آنها را به مختصات مرکز اضافه کنید. اگر حرکت معکوس به نظر رسید، به سادگی علامت را معکوس کنید.

پروژه ۵ – همیشه به بالا

پروژه ۵ یک پیکان روی ماتریس ۸ در ۸ نمایش می‌دهد که همیشه به سمت "بالا"ی برد اشاره می‌کند. هنگامی که برد را می‌چرخانید، پیکان می‌چرخد تا به سمتی که رو به بالا است اشاره کند.

ESP32-S3-Mtrix - همیشه فعال

تنظیمات فلش و جهت‌گیری


// Project 5 – Arrow Always Up

// Matrix brightness and color for the arrow
const uint8_t  P5_BRIGHTNESS     = 50;
const uint16_t P5_ARROW_COLOR    = matrix.Color(255, 150, 0);  // orange

// How often to update orientation
const uint16_t P5_UPDATE_DELAY_MS = 40;

// Tilt thresholds (in g) used to decide which side is "up"
// Adjust according to the board orientation in your video/demo
const float P5_TILT_THRESHOLD_LOW  = -0.25f;
const float P5_TILT_THRESHOLD_HIGH =  0.25f;

// Example mapping corners/sides based on accelerometer values
// (used in your logic to choose which arrow shape to draw)
/*
  ax, ay conditions (examples):
    ax >  P5_TILT_THRESHOLD_HIGH  -> USB side up
    ax <  P5_TILT_THRESHOLD_LOW   -> opposite USB side up
    ay >  P5_TILT_THRESHOLD_HIGH  -> one lateral side up
    ay <  P5_TILT_THRESHOLD_LOW   -> other lateral side up
*/
    

رسم واقعی فلش با پیاده‌سازی شده استmatrix.drawPixel()وmatrix.drawLine(). بخش کلیدی تصمیم‌گیری درباره این است که از کدام جهت فلش بر اساس مناطق شیب‌دار تعریف‌شده استفاده شودP5_TILT_THRESHOLD_LOWوP5_TILT_THRESHOLD_HIGH.

ماتریس ESP32 S3 در حال نمایش قلب سبز

پروژه ۶ – بازی هدف (کنترل‌شده با شیب)

پروژه ۶ یک بازی کوچک است که در آن با استفاده از شتاب‌سنج یک نقطه‌ی بازیکن را کنترل می‌کنید، سعی می‌کنید آن را روی یک پیکسل هدف قرار دهید و هنگام برخورد با هدف، بازخوردی هم از ماتریس و هم از بوق دریافت می‌کنید.

تنظیمات بازی و بوق


// Project 6 – Tilt-Based Target Game

// Matrix brightness
const uint8_t P6_BRIGHTNESS = 60;

// Colors for game elements
const uint16_t P6_PLAYER_COLOR    = matrix.Color(0, 255, 0);   // green
const uint16_t P6_TARGET_COLOR    = matrix.Color(255, 0, 0);   // red
const uint16_t P6_BACKGROUND_COLOR = matrix.Color(0, 0, 0);    // off
const uint16_t P6_HIT_FLASH_COLOR = matrix.Color(255, 255, 0); // yellow on hit

// Buzzer pin and timing
const int      P6_BUZZER_PIN       = 4;       // change if wired differently
const uint16_t P6_BUZZER_ON_MS     = 120;     // beep duration
const uint16_t P6_BUZZER_OFF_MS    = 80;      // pause between beeps
const uint8_t  P6_BUZZER_VOLUME    = 128;     // if using PWM, duty cycle (0–255)

// Movement and game timing
const uint16_t P6_UPDATE_DELAY_MS  = 35;      // game loop delay
const float    P6_TILT_SCALE_X     = 3.5f;    // convert tilt to pixels (left/right)
const float    P6_TILT_SCALE_Y     = 3.5f;    // convert tilt to pixels (up/down)

// Minimum distance in pixels to count as a "hit"
const uint8_t  P6_HIT_DISTANCE_MAX = 0;       // 0 = exact same pixel
    

در منطق بازی شما:

  • شتاب‌سنج را بخوانید و نقطه بازیکن را به میزان مقیاس‌شده جابه‌جا کنید.
  • موقعیت بازیکن را درون شبکه ۸ × ۸ محدود کنید.
  • بررسی کنید که آیا موقعیت بازیکن با موقعیت هدف مطابقت دارد (یا در فاصله مجاز قرار دارد).
  • در صورت ضربه، ماتریس را با فلش کردنP6_HIT_FLASH_COLORو بازر را با استفاده ازP6_BUZZER_ON_MSوP6_BUZZER_OFF_MS.
  • سپس هدف را به یک موقعیت جدید تصادفی منتقل کرده و ادامه دهید.

نقشه پایه

پایه‌اوت ماتریس ESP32 S3

نتیجه‌گیری

این شش پروژه بلوک‌های اساسی لازم برای کار با ماتریس الایدی رنگی Waveshare ESP32-S3 را پوشش می‌دهند: کنترل پیکسل پایه، متن متحرک، تعامل مبتنی بر وای‌فای و گرافیک و بازی‌های مبتنی بر شیب با استفاده از شتاب‌سنج QMI8658.

می‌توانید این ایده‌ها را با هم ترکیب کرده و پروژه‌های خود را بسازید، مانند تابلوهای امتیاز، نمایشگرهای وضعیت کوچک، بازی‌های مینیاتوری یا پنل‌های اطلاع‌رسانی که همگی با کمک کج‌کردن، لمس یا پیام‌های گوشی یا کامپیوتر شما کنترل می‌شوند.

تصاویر

ESP32 S3 Matrix  pin out
ESP32 S3 Matrix pin out
ESP32 S3 Matrix displaying green heart
ESP32 S3 Matrix displaying green heart
ESP32 S3 Matrix displaying rainbow heart
ESP32 S3 Matrix displaying rainbow heart
ESP32-S3 RGB Matrix- Mobile Phone Text
ESP32-S3 RGB Matrix- Mobile Phone Text
ESP32-S3-Mtrix - Alway Up
ESP32-S3-Mtrix - Alway Up
799-ESP32-S3 RGB LED Matrix Project 1 - Dot
زبان: C++
800-ESP32-S3 RGB LED Matrix Project 2 - Scrolling Text
زبان: C++
801-ESP32-S3 RGB LED Matrix Project 3 - Text from mobile phone
زبان: C++
802-ESP32-S3 RGB LED Matrix Project 4 - Tilt dot
زبان: C++
803-ESP32-S3 RGB LED Matrix Project 5 - Arrow always up
زبان: C++
804-ESP32-S3 RGB LED Matrix Project 6 - Cible game
زبان: C++
کپی شد!

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

منابع و مراجع

هنوز هیچ منبعی موجود نیست.

فایل‌ها📁

هیچ فایلی موجود نیست.