Bincika Lambar

Aikin Matrix LED RGB na ESP32-S3 2 - Rubutu Mai Gudana

Aikin Matrix LED RGB na ESP32-S3 2 - Rubutu Mai Gudana

Aikin 2 – Rubutun Nassi akan ESP32-S3 RGB LED Matrix

A cikin wannan aikin muna juya ESP32-S3 RGB LED Matrix zuwa ƙaramin banner na rubutu. Wani ɗan gajeren saƙo (misali Robojax) yana gudana a kan nunin RGB 8×8, kuma kuna iya canza rubutu, launi, haske, da saurin gudu kai tsaye a cikin lambar. Wannan yana da amfani sosai ga sanarwa masu sauƙi, alamun suna, ko ƙananan saƙonnin matsayi.

Dukkan ayyuka shida a cikin wannan jerin an nuna su kuma an bayyana su a cikin bidiyon YouTube guda ɗaya. Bidiyon ɗaya an haɗa shi a wannan shafin, don haka kuna iya ganin yadda rubutun ke gudana a ainihin lokaci da kuma yadda kowane saitin ke shafar motsin. Cikakken lambar wannan aikin ana loda shi ta atomatik a ƙasa labarin, kuma kuna iya siyan ESP32-S3 RGB LED Matrix module daga shagunan haɗin gwiwa da aka jera a ƙarƙashin sashin lambar.

Wannan aikin yana gina kan tushen Aikin 1 (motsi mai motsi da sarrafa launi) kuma yana ƙara rubutu da gudu ta amfani da ɗakin karatu na NeoMatrix.

Bayanin ESP32-S3 RGB LED Matrix Module

Kayan aikin iri ɗaya ne a duk ayyukan shida: ESP32-S3 microcontroller tare da Wi-Fi da Bluetooth, matrix RGB 8×8 (LED RGB 64 masu adireshi), QMI8658C accelerometer, tashar USB, da fil ɗin IO masu samuwa.:contentReference[oaicite:0]{index=0}

  • ESP32-S3 – babban CPU tare da Wi-Fi/BLE don ayyukan ci gaba.
  • Matrix RGB 8×8 – LED RGB 64 don gumaka, rubutu, da motsi.
  • QMI8658C accelerometer – ana amfani dashi a ayyukan gaba don karkata da alkibla.
  • Tashar USB – ana amfani dashi don wuta da shirye-shirye ta Arduino IDE.
  • Fil ɗin da aka fallasa – suna ba ku damar amfani da board ɗin kamar ESP32 na yau da kullun don wasu IO.
  • Maɓallan Boot / Reset – don loda firmware da sake kunna sketches.

A Aikin 2 muna mai da hankali kan matrix da ayyukan rubutu na NeoMatrix. Ba a yi amfani da accelerometer ba tukuna, amma board ɗin ɗaya zai ɗauki dukkan ayyukan hulɗa da wasanni na gaba.

Ayyukan da aka Rufe a Bidiyon (Lokutan)

Bidiyon da ke tare da wannan labarin ya rufe dukkan ayyukan shida. Lokutan kusan sune:

  • 00:00 – Gabatarwa
  • 02:01 – Shigar da ESP32 boards
  • 03:32 – Shigar da ɗakunan karatu
  • 05:32 – Aikin 1: Motsi Mai Motsi
  • 11:11 – Aikin 2: Rubutun Nassi
  • 12:59 – Aikin 3: Rubutun HTTP
  • 16:41 – Aikin 4: Motsi Mai Karkata
  • 18:55 – Aikin 5: Kibiya Sama
  • 20:02 – Aikin 6: Wasan Manufa

Ana ƙarfafa ku ku kalli bidiyon yayin karanta wannan labarin. Yana nuna rubutun yana gudana kai tsaye akan LED matrix kuma yana tafiya ta dukkan matakai a cikin Arduino IDE.

Shigar da ESP32 Boards a Arduino IDE

Kafin kunna lambar rubutun nassi, tabbatar da cewa an shigar da tallafin ESP32 a Arduino IDE ɗinku:

  1. Buɗe File > Preferences kuma ƙara URL ɗin ESP32 boards zuwa “Additional Boards Manager URLs”.
  2. Je zuwa Tools > Board > Boards Manager…, bincika ESP32, kuma shigar da kunshin ESP32 na hukuma.
  3. Zaɓi ESP32-S3 RGB Matrix board ɗinku daga Tools > Board.
  4. Haɗa module ɗin ta USB kuma zaɓi tashar COM/serial daidai a ƙarƙashin Tools > Port.

Idan nau'in board ko tashar ba daidai ba, sketch ɗin ba zai loda ba.

Shigar da NeoMatrix da Ɗakunan Karatu da Ake Bukata

Rubutun nassi ana aiwatar dashi ta amfani da Adafruit NeoMatrix da abubuwan da suka dogara dashi. A cikin bidiyon, ana shigar dasu ta Library Manager.

Za ku buƙaci:

  • Adafruit NeoMatrix
  • Adafruit NeoPixel
  • Adafruit GFX Library
  1. Buɗe Sketch > Include Library > Manage Libraries….
  2. Bincika Adafruit NeoMatrix kuma danna Install.
  3. Lokacin da aka tambaye ku, ba da izini ya shigar da Adafruit GFX da Adafruit NeoPixel a matsayin abubuwan dogaro.

Idan shigarwa ya yi nasara, ya kamata ku ga misalan sketches a ƙarƙashin File > Examples > Adafruit NeoMatrix da File > Examples > Adafruit NeoPixel.

Aikin 2 – Saitunan Lamba (Rubutun Nassi)

Cikakken sketch ɗin rubutun nassi ana loda shi ta atomatik a ƙasa wannan labarin akan gidan yanar gizon. Anan muna mai da hankali kan ƙimar saitunan da za ku so ku gyara: pin, girman matrix, haske, saƙon rubutu, launi, saurin gudu, da alkibla na zaɓi.

Dukkan snippets ɗin da ke ƙasa an ɗauke su daga sashin saitunan a saman sketch ɗin don ku iya daidaita halayen da sauri ba tare da taɓa babban tsarin ba.

Pin da Girman Matrix

Kamar Aikin 1, matrix RGB an haɗa shi da GPIO 14 kuma yana ƙunshe da LED 64 (8×8). Tabbatar cewa waɗannan layukan biyu sun dace da module ɗinku:


 // Pin da aka haɗa da matrix RGB 8×8 
const int MATRIX_PIN = 14; // dole ya zama 14 akan wannan module // Girman matrix (nisa da tsayi)
 const int MATRIX_WIDTH = 8; 
const int MATRIX_HEIGHT = 8; 

Idan kun kwafi misali daga ɗakin karatu na NeoMatrix, yana iya amfani da pin ko girman daban; koyaushe canza su don dacewa da wannan board.

Hasken Rubutu

Hasken yawanci ana sarrafa shi da ƙima tsakanin 0 da 255, inda 0 ke kashe kuma 255 shine matsakaicin haske. Ƙimar matsakaici yawanci isa take:


// Matsakaicin haske na matrix (0–255) 
uint8_t matrixBrightness = 40; // haske mai dadi a cikin gida // A cikin 
setup(): 
matrix.setBrightness(matrixBrightness); 

Idan ka yi amfani da panel a wuri mai haske ko na ɗan gajeren lokaci, za ka iya ƙara wannan ƙimar, amma ka guji yin yawa sosai idan kana kusa da nuni.

Rubutu don Gungurawa

Ainihin saƙon ana adana shi azaman string. A cikin bidiyon, misalin rubutu shine Robojax. Za ka iya canza shi zuwa kowane ɗan gajeren lakabi ko saƙon da kake so:


 // Rubutu don gungurawa akan matrix 8×8 const char scrollText[] = "Robojax";
 // canza wannan zuwa saƙonka 

Ka tuna cewa wannan matrix 8×8 ne kawai, don haka dogayen saƙonni za su ɗauki lokaci mai tsawo don gungurawa kuma suna iya zama da wahala a karanta su.

Launi na Rubutu (Ƙimar RGB)

Launin rubutun gungurawa an saita shi ta hanyar ja, kore, da shuɗi (0–255). Misali, ja mai tsafta shine (255, 0, 0), kore mai tsafta shine (0, 255, 0), kuma shuɗi mai tsafta shine (0, 0, 255). A cikin sketch za ka ga wani abu kamar:


 // Launi na rubutu (R, G, B) uint8_t textRed = 255; // bangaren ja uint8_t textGreen = 0; // bangaren kore uint8_t textBlue = 0; // bangaren shuɗi 

Don canza launi:

  • Rawaye: textRed = 255; textGreen = 255; textBlue = 0;
  • Cyan: textRed = 0; textGreen = 255; textBlue = 255;
  • Fari: textRed = 255; textGreen = 255; textBlue = 255;

Bidiyon kuma yana nuna amfani da mai zaɓen launi na kan layi don nemo ƙimar RGB sannan a shigar da su cikin lambar.

Gudun Gungurawa (Jinkiri Tsakanin Frames)

Gudun gungurawa ana sarrafa shi ta ƙimar jinkiri a millisecond tsakanin kowane matakin sabuntawa. Ƙarami kaɗan yana sa rubutu ya motsa da sauri; babba yana rage shi. A cikin sketch, ya kamata ka sami wani maɓalli kamar:


// Jinkiri tsakanin matakan gungurawa (a millisecond) int scrollDelayMs = 50; 
// ƙarami = sauri, babba = a hankali 

Misalai:

  • scrollDelayMs = 20; → gungurawa mai sauri.
  • scrollDelayMs = 50; → matsakaicin gudun (kamar bidiyon).
  • scrollDelayMs = 100; ko fiye → a hankali, mai sauƙin karantawa.

A cikin loop(), ana amfani da wannan ƙimar a cikin kiran delay(scrollDelayMs); bayan kowane sake zana matsayin rubutu.

Hanyar Gungurawa (Na Zaɓi)

A cikin aikin “gungurawar rubutu na asali” yawanci muna gungurawa zuwa hagu, amma yana da amfani a ayyana maɓallin alamar hanya don ka iya gwada wasu hanyoyi daga baya (hagu, dama, sama, ƙasa).

Wani tsari na yau da kullun shine:


 // Zaɓin hanyar gungurawa // 0 = hagu, 1 = dama, 2 = sama, 3 = ƙasa 
int scrollDirection = 0; // tsoho: gungurawa zuwa hagu 

Babban loop sai ya duba scrollDirection kuma ya motsa rubutu a hanyar da aka zaɓa. Don Project 2 za ka iya barin shi a 0 (hagu), amma idan ka faɗaɗa sketch daga baya za ka iya ƙara sharuɗɗa kamar:


 if (scrollDirection == 0) { 
// motsa rubutu hagu 
} else if (scrollDirection == 1) { 
// motsa rubutu dama 
} else if (scrollDirection == 2) { 
// motsa rubutu sama
 } else if (scrollDirection == 3) { 
// motsa rubutu ƙasa 
}
 

Don wannan labarin muna rubuta saitin kawai. Cikakken aiwatarwa yana cikin lambar da aka ɗora ƙarƙashin labarin.

Taƙaitawa

Project 2 yana juya ESP32-S3 RGB LED Matrix ɗinka zuwa nuni mai sauƙi amma mai jan hankali. Ta hanyar gyara ƴan maɓallai kaɗan a saman lambar, za ka iya canza da sauri:

  • Wane saƙo ake nunawa (scrollText).
  • Launin rubutu (textRed, textGreen, textBlue).
  • Hasken matrix (matrixBrightness).
  • Gudun gungurawa (scrollDelayMs).
  • Hanyar gungurawa (scrollDirection, idan ka zaɓi amfani da shi).

Cikakken sketch na wannan aikin yana samuwa a ƙasa wannan labarin (ana ɗora shi ta atomatik ta gidan yanar gizon). Don cikakken bayani mataki-mataki da nunin aikin gungurawar rubutu a zahiri, ka tabbata ka kalli sashin da ya dace na bidiyon. Idan kana son aikin kuma kana so ka gina shi da kanka, za ka iya siyan modul ɗin ESP32-S3 RGB LED Matrix daga hanyoyin haɗin affiliate da aka jera ƙarƙashin lambar.

Hotuna

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
Harshe: 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();
  }
}

Abin da zaka iya bukata

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Fayil Fritzing