مشاريع مصفوفة LED الملونة ESP32-S3 (لعبة الميل، النص، السهم، عرض الواي فاي)
مصفوفة LED الملونة ESP32-S3: ستة مشاريع عملية (مع مقياس التسارع QMI8658)
هذا البرنامج التعليمي يأخذك في رحلة عبر ستة مشاريع مصغرة عملية باستخدام لوحة Waveshare ESP32-S3 لمصفوفة LED الملونة. ستبدأ من تثبيت اللوحات والمكتبات في بيئة Arduino IDE وتنتهي بلعبة ممتعة للهدف المتحكم فيه بالميل.
اللوحة المستخدمة هنا تشمل:
- 8 × 8 مصفوفة LED ملونة (64 مصباح LED ملون قابل للتوجيه)
- كيو إم آي 8658مقياس التسارع 6 محاور
- المتحكم الدقيق ESP32-S3 مزود بتقنية Wi-Fi و BLE
- منفذ USB للبرمجة والطاقة
جميع المشاريع مكتوبة بلغة Arduino باستخدام مكتبات Adafruit NeoMatrix وAdafruit NeoPixel وAdafruit GFX وQMI8658.
نظرة عامة على المشروع
المشاريع الستة المغطاة في هذا البرنامج التعليمي:
- المشروع 1– النقطة المتحركة (إعداد المصفوفة الأساسي)
- المشروع 2تمرير النص على المصفوفة 8 × 8
- المشروع 3– نص HTTP: أرسل نصًا من هاتفك أو جهاز الكمبيوتر الخاص بك عبر Wi-Fi
- المشروع 4– نقطة الميل، التي يتحكم فيها مقياس التسارع QMI8658
- المشروع 5– السهم دائمًا للأعلى (مؤشر الاتجاه باستخدام QMI8658)
- المشروع 6– لعبة الهدف مع زر التنبيه والتحكم بالميل
إذا فقدت طريقك في أي مرحلة، قارن إعداداتك مع المقاطع المقدمة لكل مشروع أدناه.

مقدمة
تبدأ المشاريع بأبسط رسم متحرك ممكن (نقطة متحركة واحدة) وتضيف تدريجيًا النصوص والتحكم عبر Wi-Fi، وأخيرًا التفاعل القائم على أجهزة الاستشعار باستخدام مقياس التسارع QMI8658. في النهاية، ستفهم كيفية التحكم في مصفوفة الصمامات الثنائية الباعثة للضوء والاستجابة لوضعية اللوحة.
تثبيت لوحات ESP32-S3 في بيئة Arduino IDE
قبل رفع أي كود، قم بتثبيت دعم لوحة ESP32 الرسمية في بيئة تطوير Arduino واختر ملف تعريف لوحة ESP32-S3 (على سبيل المثال، وحدة تطوير ESP32-S3). هذا يضمن تطبيق إعدادات الذاكعة الفلاشية والتردد وUSB الصحيحة عند التجميع والرفع.
تثبيت المكتبات المطلوبة
المكتبات التالية مطلوبة لهذه المشاريع:
- Adafruit NeoPixel
- Adafruit GFX
- Adafruit NeoMatrix
- كيو إم آي 8658 (بواسطة لاحاف جاهالي)
قم بتثبيتها مرة واحدة باستخدام مدير مكتبة Arduino، ثم يمكنك إعادة استخدامها في جميع المشاريع الستة.
حول مسرع QMI8658
جهاز QMI8658 هو وحدة قياس بالقصور الذاتي (IMU) سداسية المحاور تجمع بين مقياس التسارع ثلاثي المحاور والجيروسكوب ثلاثي المحاور. في هذه المشاريع، تُستخدم قيم مقياس التسارع للكشف عن ميل واتجاه اللوحة.
الاتفاقية المحورية المستخدمة في جميع المشاريع:
- س– يسار / يمين
- ي– للأمام / للخلف
- ز– عمودي (لأعلى / لأسفل)
في جميع المشاريع القائمة على الميلان، ستقوم بتكوين نطاق مقياس التسارع ومعدل بيانات الإخراج مرة واحدة، ثم تقرأ القيم لتحريك نقطة، أو توجيه سهم، أو التحكم في لعبة.
// 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
المشروع 1 – النقطة المتحركة (إعدادات المصفوفة الأساسية)
المشروع 1 هو رسوم متحركة لنقطة متحركة بسيطة تتحقق من توصيلات مصفوفة الصمام الثنائي الباعث للضوء والإعدادات الأساسية لـ 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، يمكنك اختبار الألوان المختلفة وسرعات الرسوم المتحركة بسرعة.
المشروع 2 – تمرير النص
المشروع 2 يعرض نصًا متحركًا مثلروبوجَکس. أنت تتحكم في الرسالة نفسها، واتجاه التمرير، ولون النص، والسرعة. يقدم هذا المشروع عرض النص على مصفوفة صغيرة جدًا.
الإعدادات الرئيسية
// 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 – رسالة هاتف محمول (رسالة يتم التحكم بها عبر Wi-Fi)
المشروع الثالث يحول 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بناءً على الخيارات المحددة.
المشروع 4 – نقطة الميل (باستخدام QMI8658)
المشروع 4 يقرأ مقياس التسارع 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، وأضفها إلى إحداثيات المركز. إذا كان الحركة تبدو معكوسة، فما عليك سوى عكس الإشارة.
المشروع 5 – السهم يتجه دائمًا للأعلى
المشروع 5 يعرض سهمًا على المصفوفة 8 × 8 يشير دائمًا نحو الجانب "الأعلى" من اللوحة. عند تدوير اللوحة، يدور السهم بحيث يشير إلى الجانب الذي يواجه الأعلى.
إعدادات السهم والتوجيه
// 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.
المشروع 6 – لعبة الهدف (تتحكم بالميل)
المشروع 6 هو لعبة صغيرة تتحكم فيها بنقطة اللاعب باستخدام مقياس التسارع، وتحاول نقلها إلى بكسل الهدف، وتحصل على رد فعل من كل من المصفوفة والجرس عندما تصيب الهدف.
إعدادات اللعبة والجرس
// 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
في منطق اللعبة سوف:
- اقرأ بيانات مقياس التسارع وحرك نقطة اللاعب بمقدار مُقاس.
- اقصِ موضع اللاعب داخل الشبكة 8 × 8.
- تحقق مما إذا كان موضع اللاعب يتطابق مع الموضع المستهدف (أو يقع ضمن المسافة المسموح بها).
- عند الضغط، وميض المصفوفة باستخدام
P6_HIT_FLASH_COLORوقم بتفعيل الجرس باستخدامP6_BUZZER_ON_MSوP6_BUZZER_OFF_MS. - ثم انقل الهدف إلى موضع عشوائي جديد واستمر.
خريطة الدبوس
خاتمة
هذه المشاريع الستة تغطي اللبنات الأساسية للعمل مع مصفوفة LED الملونة من Waveshare ESP32-S3: التحكم الأساسي في البكسل، تمرير النص، التفاعل القائم على Wi-Fi، والرسومات والألعاب القائمة على الميل باستخدام مقياس التسارع QMI8658.
يمكنك مزج هذه الأفكار ومطابقتها لبناء مشاريعك الخاصة، مثل لوحات النتائج، وشاشات الحالة الصغيرة، والألعاب المصغرة، أو لوحات الإشعارات، كلها تعمل بالاهتزاز، أو اللمس، أو الرسائل من هاتفك أو حاسوبك.
الأشياء التي قد تحتاجها
-
أمازون
-
إي باي
-
علي إكسبريسPurchase ESP32-S3 RGB Matrix from AliExpresss.click.aliexpress.com
-
علي إكسبريسPurchase ESP32-S3 RGB Matrix from AliExpress (2)s.click.aliexpress.com
الموارد والمراجع
لا توجد موارد حتى الآن.
ملفات📁
لا توجد ملفات متاحة.