Search Code

ESP32-S3 آر جی بی ایل ای ڈی میٹرکس پروجیکٹ 2 - اسکرولنگ ٹیکسٹ

ESP32-S3 آر جی بی ایل ای ڈی میٹرکس پروجیکٹ 2 - اسکرولنگ ٹیکسٹ

پروجیکٹ 2 – ESP32-S3 RGB LED میٹرکس پر ٹیکسٹ اسکرول

اس پروجیکٹ میں ہم ESP32-S3 RGB LED میٹرکس کو ایک چھوٹے ٹیکسٹ بینر میں تبدیل کرتے ہیں۔ ایک مختصر پیغام (مثال کے طور پر Robojax) 8×8 RGB ڈسپلے پر اسکرول ہوتا ہے، اور آپ کوڈ میں براہ راست ٹیکسٹ، رنگ، چمک، اور اسکرول کی رفتار آسانی سے تبدیل کر سکتے ہیں۔ یہ سادہ اطلاعات، نام کے ٹیگز، یا چھوٹے اسٹیٹس پیغامات کے لیے بہت مفید ہے۔

اس سیریز کے تمام چھ پروجیکٹس ایک ہی YouTube ویڈیو میں دکھائے اور وضاحت کیے گئے ہیں۔ وہی ویڈیو اس صفحے پر ایمبیڈڈ ہے، تاکہ آپ حقیقی وقت میں ٹیکسٹ اسکرول کی شکل اور ہر سیٹنگ کا اینیمیشن پر اثر دیکھ سکیں۔ اس پروجیکٹ کا مکمل کوڈ مضمون کے نیچے خود بخود لوڈ ہوتا ہے، اور آپ کوڈ سیکشن کے نیچے درج ایفیلی ایٹ اسٹورز سے ESP32-S3 RGB LED میٹرکس ماجیول خرید سکتے ہیں۔

یہ پروجیکٹ پروجیکٹ 1 (حرکت پذیر ڈاٹ اور رنگ کنٹرول) کی بنیادوں پر استوار ہے اور NeoMatrix لائبریری کا استعمال کرتے ہوئے ٹیکسٹ رینڈرنگ اور اسکرولنگ شامل کرتا ہے۔

ESP32-S3 RGB LED میٹرکس ماجیول کا جائزہ

ہارڈویئر تمام چھ پروجیکٹس میں یکساں ہے: ایک ESP32-S3 مائیکروکنٹرولر جس میں Wi-Fi اور بلوٹوتھ ہے، ایک 8×8 RGB LED میٹرکس (64 ایڈریس ایبل RGB LEDs)، ایک QMI8658C ایکسلرومیٹر، USB پورٹ، اور قابل رسائی IO پنز۔

  • ESP32-S3 – اعلی درجے کے پروجیکٹس کے لیے Wi-Fi/BLE کے ساتھ مرکزی CPU۔
  • 8×8 RGB میٹرکس – آئیکنز، ٹیکسٹ، اور اینیمیشنز کے لیے 64 RGB LEDs۔
  • QMI8658C ایکسلرومیٹر – بعد کے پروجیکٹس میں جھکاؤ اور سمت کے لیے استعمال ہوتا ہے۔
  • USB پورٹ – Arduino IDE کے ذریعے پاور اور پروگرامنگ کے لیے استعمال ہوتا ہے۔
  • کھلے پنز – آپ کو بورڈ کو دوسرے IO کے لیے عام ESP32 کی طرح استعمال کرنے دیتے ہیں۔
  • بوٹ / ری سیٹ بٹن – فرم ویئر اپ لوڈ اور اسکیچز کو دوبارہ شروع کرنے کے لیے۔

پروجیکٹ 2 میں ہم بنیادی طور پر میٹرکس اور NeoMatrix ٹیکسٹ فنکشنز پر توجہ دیتے ہیں۔ ایکسلرومیٹر ابھی استعمال نہیں ہوتا، لیکن وہی بورڈ بعد کے تمام انٹرایکشن اور گیم پروجیکٹس کو بھی سنبھالے گا۔

ویڈیو میں شامل پروجیکٹس (ٹائم اسٹیمپس)

اس مضمون سے منسلک ویڈیو تمام چھ پروجیکٹس کا احاطہ کرتی ہے۔ تقریبی ٹائم اسٹیمپس یہ ہیں:

  • 00:00 – تعارف
  • 02:01 – ESP32 بورڈز کی تنصیب
  • 03:32 – لائبریریوں کی تنصیب
  • 05:32 – پروجیکٹ 1: حرکت پذیر ڈاٹ
  • 11:11 – پروجیکٹ 2: ٹیکسٹ اسکرول
  • 12:59 – پروجیکٹ 3: HTTP ٹیکسٹ
  • 16:41 – پروجیکٹ 4: جھکاؤ ڈاٹ
  • 18:55 – پروجیکٹ 5: اوپر تیر
  • 20:02 – پروجیکٹ 6: ٹارگٹ گیم

آپ کو اس مضمون کو پڑھتے ہوئے ویڈیو دیکھنے کی ترغیب دی جاتی ہے۔ یہ LED میٹرکس پر ٹیکسٹ کو لائیو اسکرول ہوتا دکھاتی ہے اور Arduino IDE میں تمام مراحل سے گزرتی ہے۔

Arduino IDE میں ESP32 بورڈز کی تنصیب

ٹیکسٹ اسکرول کوڈ چلانے سے پہلے، یقینی بنائیں کہ آپ کے Arduino IDE میں ESP32 سپورٹ انسٹال ہے:

  1. File > Preferences کھولیں اور ESP32 بورڈز کا URL “Additional Boards Manager URLs” میں شامل کریں۔
  2. Tools > Board > Boards Manager… پر جائیں، ESP32 تلاش کریں، اور سرکاری ESP32 پیکیج انسٹال کریں۔
  3. Tools > Board سے اپنا ESP32-S3 RGB میٹرکس بورڈ منتخب کریں۔
  4. ماجیول کو USB کے ذریعے جوڑیں اور Tools > Port کے تحت صحیح COM/سیریل پورٹ منتخب کریں۔

اگر بورڈ کی قسم یا پورٹ درست نہ ہو تو اسکیچ اپ لوڈ نہیں ہوگا۔

NeoMatrix اور مطلوبہ لائبریریوں کی تنصیب

ٹیکسٹ اسکرول Adafruit NeoMatrix اور اس کے انحصارات کا استعمال کرتے ہوئے لاگو کیا گیا ہے۔ ویڈیو میں، انہیں لائبریری مینیجر کے ذریعے انسٹال کیا گیا ہے۔

آپ کو درج ذیل کی ضرورت ہوگی:

  • Adafruit NeoMatrix
  • Adafruit NeoPixel
  • Adafruit GFX Library
  1. Sketch > Include Library > Manage Libraries… کھولیں۔
  2. Adafruit NeoMatrix تلاش کریں اور Install پر کلک کریں۔
  3. جب اشارہ کیا جائے تو اسے Adafruit GFX اور Adafruit NeoPixel کو انحصار کے طور پر انسٹال کرنے دیں۔

اگر تنصیب کامیاب ہو تو آپ کو File > Examples > Adafruit NeoMatrix اور File > Examples > Adafruit NeoPixel کے تحت مثالی اسکیچز نظر آئیں گے۔

پروجیکٹ 2 – کوڈ سیٹنگز (ٹیکسٹ اسکرول)

مکمل ٹیکسٹ اسکرول اسکیچ ویب سائٹ پر اس مضمون کے نیچے خود بخود لوڈ ہوتا ہے۔ یہاں ہم صرف ان کنفیگریشن اقدار پر توجہ دیتے ہیں جنہیں آپ شاید تبدیل کرنا چاہیں گے: پن، میٹرکس کا سائز، چمک، ٹیکسٹ سٹرنگ، رنگ، اسکرول کی رفتار، اور اختیاری سمت۔

نیچے دیے گئے تمام ٹکڑے اسکیچ کے اوپری حصے میں کنفیگریشن سیکشن سے لیے گئے ہیں تاکہ آپ مرکزی منطق کو چھوئے بغیر رویے کو تیزی سے ایڈجسٹ کر سکیں۔

میٹرکس پن اور سائز

بالکل پروجیکٹ 1 کی طرح، RGB میٹرکس GPIO 14 سے منسلک ہے اور اس میں 64 LEDs (8×8) ہیں۔ یقینی بنائیں کہ یہ دو لائنیں آپ کے ماجیول سے مماثل ہیں:


 // 8×8 RGB میٹرکس سے منسلک پن
const int MATRIX_PIN = 14; // اس ماجیول پر 14 ہونا ضروری ہے // میٹرکس کا سائز (چوڑائی اور اونچائی)
 const int MATRIX_WIDTH = 8; 
const int MATRIX_HEIGHT = 8; 

اگر آپ NeoMatrix لائبریری سے کوئی مثال کاپی کرتے ہیں تو اس میں مختلف پن یا سائز ہو سکتا ہے؛ انہیں ہمیشہ اس بورڈ سے مماثل کرنے کے لیے تبدیل کریں۔

ٹیکسٹ کی چمک

چمک عام طور پر 0 اور 255 کے درمیان ایک قدر سے کنٹرول ہوتی ہے، جہاں 0 بند ہے اور 255 زیادہ سے زیادہ چمک ہے۔ ایک معتدل قدر عام طور پر کافی ہوتی ہے:


// مجموعی میٹرکس چمک (0–255)
uint8_t matrixBrightness = 40; // آرام دہ اندرونی چمک // In 
setup():
matrix.setBrightness(matrixBrightness);

اگر آپ پینل کو روشن ماحول میں یا تھوڑے وقت کے لیے استعمال کرتے ہیں، تو آپ اس قدر کو بڑھا سکتے ہیں، لیکن اگر آپ ڈسپلے کے قریب ہیں تو بہت زیادہ کرنے سے گریز کریں۔

سکرول کرنے کے لیے متن

اصل پیغام ایک سٹرنگ کے طور پر محفوظ ہوتا ہے۔ ویڈیو میں، مثال کے طور پر متن Robojax ہے۔ آپ اسے کسی بھی مختصر لیبل یا پیغام میں تبدیل کر سکتے ہیں:


 // 8×8 میٹرکس پر سکرول کرنے کے لیے متن const char scrollText[] = "Robojax";
 // اسے اپنے پیغام میں تبدیل کریں

ذہن میں رکھیں کہ یہ صرف ایک 8×8 میٹرکس ہے، اس لیے بہت لمبے پیغامات سکرول ہونے میں زیادہ وقت لیں گے اور پڑھنا مشکل ہو سکتا ہے۔

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

سکرولنگ متن کا رنگ سرخ، سبز اور نیلے اجزاء (0–255) سے طے ہوتا ہے۔ مثال کے طور پر، خالص سرخ (255, 0, 0) ہے، خالص سبز (0, 255, 0) ہے، اور خالص نیلا (0, 0, 255) ہے۔ اسکیچ میں آپ کو کچھ اس طرح نظر آئے گا:


 // متن کا رنگ (R, G, B) uint8_t textRed = 255; // سرخ جزو uint8_t textGreen = 0; // سبز جزو uint8_t textBlue = 0; // نیلا جزو

رنگ تبدیل کرنے کے لیے:

  • پیلا: textRed = 255; textGreen = 255; textBlue = 0;
  • سیان: textRed = 0; textGreen = 255; textBlue = 255;
  • سفید: textRed = 255; textGreen = 255; textBlue = 255;

ویڈیو میں آن لائن کلر پکر استعمال کرکے RGB اقدار تلاش کرنے اور پھر انہیں کوڈ میں داخل کرنے کا طریقہ بھی دکھایا گیا ہے۔

سکرول رفتار (فریموں کے درمیان تاخیر)

سکرول رفتار ہر اپڈیٹ مرحلے کے درمیان ملی سیکنڈ میں تاخیر کی قدر سے کنٹرول ہوتی ہے۔ چھوٹی قدر متن کو تیز حرکت دیتی ہے؛ بڑی قدر اسے سست کر دیتی ہے۔ اسکیچ میں، آپ کو کچھ اس طرح کا متغیر ملے گا:


// سکرول مراحل کے درمیان تاخیر (ملی سیکنڈ میں) int scrollDelayMs = 50;
// چھوٹا = تیز، بڑا = سست

مثالیں:

  • scrollDelayMs = 20; → تیز سکرولنگ۔
  • scrollDelayMs = 50; → درمیانی رفتار (ویڈیو کی طرح)۔
  • scrollDelayMs = 100; یا اس سے زیادہ → سست، آسانی سے پڑھنے کے قابل سکرول۔

loop() کے اندر، یہ قدر متن کی پوزیشن کے ہر دوبارہ ڈرائو کے بعد delay(scrollDelayMs); کال میں استعمال ہوتی ہے۔

سکرول سمت (اختیاری)

“بنیادی متن سکرول” پروجیکٹ میں ہم عام طور پر بائیں طرف سکرول کرتے ہیں، لیکن ایک علامتی سمت متغیر کی وضاحت کرنا مفید ہے تاکہ آپ بعد میں دیگر سمتوں (بائیں، دائیں، اوپر، نیچے) کے ساتھ تجربہ کر سکیں۔

ایک عام طریقہ یہ ہے:


 // سکرول سمت منتخب کرنے والا // 0 = بائیں، 1 = دائیں، 2 = اوپر، 3 = نیچے
int scrollDirection = 0; // ڈیفالٹ: بائیں طرف سکرول

مرکزی لوپ پھر scrollDirection چیک کرتا ہے اور متن کو منتخب سمت میں حرکت دیتا ہے۔ پروجیکٹ 2 کے لیے آپ اسے 0 (بائیں) پر چھوڑ سکتے ہیں، لیکن اگر آپ بعد میں اسکیچ کو بڑھاتے ہیں تو آپ ایسی شرائط شامل کر سکتے ہیں:


 if (scrollDirection == 0) {
// متن کو بائیں منتقل کریں
} else if (scrollDirection == 1) {
// متن کو دائیں منتقل کریں
} else if (scrollDirection == 2) {
// متن کو اوپر منتقل کریں
} else if (scrollDirection == 3) {
// متن کو نیچے منتقل کریں
}

اس مضمون کے لیے ہم صرف ترتیب کو دستاویز کرتے ہیں۔ مکمل نفاذ مضمون کے نیچے لوڈ کردہ کوڈ کا حصہ ہے۔

خلاصہ

پروجیکٹ 2 آپ کے ESP32-S3 RGB LED میٹرکس کو ایک سادہ لیکن دلکش متن ڈسپلے میں تبدیل کرتا ہے۔ کوڈ کے اوپری حصے میں صرف چند متغیرات میں ترمیم کرکے، آپ جلدی سے تبدیل کر سکتے ہیں:

  • کون سا پیغام دکھایا جاتا ہے (scrollText
  • متن کا رنگ (textRed, textGreen, textBlue
  • میٹرکس کی چمک (matrixBrightness
  • سکرول کی رفتار (scrollDelayMs
  • سکرول کی سمت (scrollDirection، اگر آپ اسے استعمال کرنے کا انتخاب کرتے ہیں)۔

اس پروجیکٹ کا مکمل اسکیچ اس مضمون کے نیچے دستیاب ہے (ویب سائٹ کے ذریعے خودکار طور پر لوڈ ہوتا ہے)۔ تفصیلی مرحلہ وار ترتیب اور سکرولنگ متن کے عملی مظاہرے کے لیے، ویڈیو کے متعلقہ حصے کو ضرور دیکھیں۔ اگر آپ کو پروجیکٹ پسند ہے اور اسے خود بنانا چاہتے ہیں، تو آپ کوڈ کے نیچے درج ایفلی ایٹ لنکس سے ESP32-S3 RGB LED میٹرکس ماجیول بھی خرید سکتے ہیں۔

تصاویر

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++
/* 
  Project 2: Text scroll – ESP32-S3 RGB LED Matrix (Waveshare)

  This sketch displays the scrolling text on 8x8 matrix

  ▶️ Video Tutorial:
  https://youtu.be/JKLuYrRcLMI

  📚⬇️ Resources & Code Page:
  https://robojax.com/RJT829

  QMI8658_RGB_2
*/
#include <Arduino.h>
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

// -------- LED MATRIX SETUP --------
#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
);

// =========================
// USER SETTINGS
// =========================

// Text to scroll
const char* MESSAGE = "ROBOJAX ";

// Brightness (0–255)
uint8_t BRIGHTNESS = 10;

// Scroll speed (milliseconds between steps)
// Smaller = faster
uint16_t SCROLL_DELAY = 80;

// Scroll direction
enum ScrollDir {
  SCROLL_LEFT,
  SCROLL_RIGHT,
  SCROLL_UP,
  SCROLL_DOWN
};

// Change this to set direction
ScrollDir DIRECTION = SCROLL_LEFT;

// Text color (set RGB here)
uint8_t COLOR_R = 255; 
uint8_t COLOR_G = 0;
uint8_t COLOR_B = 0;

// =========================
// INTERNAL STATE
// =========================
uint16_t textColor;
int16_t posX, posY;
int16_t textWidth, textHeight;
uint32_t lastStepTime = 0;

// Compute text size in pixels for default 5x7 font
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;
}

// Initialize starting position based on direction
void resetScrollPosition() {
  switch (DIRECTION) {
    case SCROLL_LEFT:
      // Start just off the right edge
      posX = matrix.width();
      posY = 0; // top row for 8x8
      break;

    case SCROLL_RIGHT:
      // Start just off the left edge
      posX = -textWidth;
      posY = 0;
      break;

    case SCROLL_UP:
      posX = 0;
      posY = matrix.height(); // start below bottom
      break;

    case SCROLL_DOWN:
      posX = 0;
      posY = -textHeight; // start above top
      break;
  }
}

// One scroll step
void stepScroll() {
  // Move position
  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;
  }

  // Draw frame
  matrix.fillScreen(0);
  matrix.setCursor(posX, posY);
  matrix.print(MESSAGE);
  matrix.show();
}

void setup() {
  matrix.begin();
  matrix.setBrightness(BRIGHTNESS);
  matrix.setTextWrap(false);       // No automatic wrapping
  matrix.setTextSize(1);           // Default 5x7 font
  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();
  }
}

آپ کو جن چیزوں کی ضرورت ہو سکتی ہے

وسائل اور حوالہ جات

فائلیں📁

فریٹزنگ فائل