Search Code

Mradi wa Matrix ya LED ya RGB ya ESP32-S3 2 - Maandishi Yanayotembea

Mradi wa Matrix ya LED ya RGB ya ESP32-S3 2 - Maandishi Yanayotembea

Mradi 2 – Kusogeza Maandishi kwenye ESP32-S3 RGB LED Matrix

Katika mradi huu tunageuza ESP32-S3 RGB LED Matrix kuwa bango dogo la maandishi. Ujumbe mfupi (kwa mfano Robojax) unasogeza kwenye onyesho la 8×8 RGB, na unaweza kubadilisha kwa urahisi maandishi, rangi, mwangaza, na kasi ya kusogeza moja kwa moja kwenye msimbo. Hii ni muhimu sana kwa arifa rahisi, lebo za majina, au ujumbe mdogo wa hali.

Miradi yote sita katika mfululizo huu imeonyeshwa na kuelezewa katika video moja ya YouTube. Video hiyo hiyo imepachikwa kwenye ukurasa huu, ili uweze kuona jinsi kusogeza kwa maandishi kunavyoonekana kwa wakati halisi na jinsi kila mpangilio unavyoathiri uhuishaji. Msimbo kamili wa mradi huu unapakiwa kiotomatiki chini ya makala, na unaweza kununua moduli ya ESP32-S3 RGB LED Matrix kutoka maduka ya washirika yaliyoorodheshwa chini ya sehemu ya msimbo.

Mradi huu unajenga juu ya misingi ya Mradi 1 (kusogeza nukta na udhibiti wa rangi) na unaongeza uchapishaji wa maandishi na kusogeza kwa kutumia maktaba ya NeoMatrix.

Muhtasari wa Moduli ya ESP32-S3 RGB LED Matrix

Vifaa ni sawa katika miradi yote sita: microcontroller ya ESP32-S3 yenye Wi-Fi na Bluetooth, matrix ya 8×8 RGB LED (LED 64 za RGB zinazoweza kushughulikiwa), accelerometer ya QMI8658C, bandari ya USB, na pini za IO zinazoweza kufikiwa.:contentReference[oaicite:0]{index=0}

  • ESP32-S3 – CPU kuu yenye Wi-Fi/BLE kwa miradi ya hali ya juu.
  • Matrix ya 8×8 RGB – LED 64 za RGB kwa ikoni, maandishi, na uhuishaji.
  • Accelerometer ya QMI8658C – inatumika katika miradi ya baadaye kwa kuinamisha na mwelekeo.
  • Bandari ya USB – inatumika kwa nishati na kupanga programu kupitia Arduino IDE.
  • Pini zilizo wazi – zinakuruhusu kutumia bodi kama ESP32 ya kawaida kwa IO nyingine.
  • Vifungo vya Boot / Reset – kwa kupakia firmware na kuanzisha upya sketches.

Katika Mradi 2 tunazingatia hasa matrix na kazi za maandishi za NeoMatrix. Accelerometer bado haijatumika, lakini bodi hiyo hiyo itashughulikia miradi yote ya mwingiliano na michezo ya baadaye pia.

Miradi Iliyofunikwa kwenye Video (Muda)

Video inayoambatana na makala hii inashughulikia miradi yote sita. Muda wa takriban ni:

  • 00:00 – Utangulizi
  • 02:01 – Kusakinisha bodi za ESP32
  • 03:32 – Kusakinisha maktaba
  • 05:32 – Mradi 1: Nukta Inayosogeza
  • 11:11 – Mradi 2: Kusogeza Maandishi
  • 12:59 – Mradi 3: Maandishi ya HTTP
  • 16:41 – Mradi 4: Nukta ya Kuinamisha
  • 18:55 – Mradi 5: Mshale Juu
  • 20:02 – Mradi 6: Mchezo wa Lengo

Unahimizwa kutazama video huku ukisoma makala hii. Inaonyesha maandishi yakusogeza moja kwa moja kwenye LED matrix na inapitia hatua zote katika Arduino IDE.

Kusakinisha Bodi za ESP32 katika Arduino IDE

Kabla ya kuendesha msimbo wa kusogeza maandishi, hakikisha usaidizi wa ESP32 umesakinishwa katika Arduino IDE yako:

  1. Fungua File > Preferences na ongeza URL ya bodi za ESP32 kwenye “Additional Boards Manager URLs”.
  2. Nenda kwenye Tools > Board > Boards Manager…, tafuta ESP32, na usakinishe pakiti rasmi ya ESP32.
  3. Chagua bodi yako ya ESP32-S3 RGB Matrix kutoka Tools > Board.
  4. Unganisha moduli kupitia USB na uchague bandari sahihi ya COM/serial chini ya Tools > Port.

Ikiwa aina ya bodi au bandari si sahihi, sketch haitapakia.

Kusakinisha NeoMatrix na Maktaba Zinazohitajika

Kusogeza kwa maandishi kunatekelezwa kwa kutumia Adafruit NeoMatrix na vitegemezi vyake. Katika video, vinasakinishwa kupitia Library Manager.

Utahitaji:

  • Adafruit NeoMatrix
  • Adafruit NeoPixel
  • Adafruit GFX Library
  1. Fungua Sketch > Include Library > Manage Libraries….
  2. Tafuta Adafruit NeoMatrix na bofya Install.
  3. Ukishauriwa, ruhusu kusakinisha Adafruit GFX na Adafruit NeoPixel kama vitegemezi.

Ikiwa usakinishaji umefanikiwa, unapaswa kuona mifano ya sketches chini ya File > Examples > Adafruit NeoMatrix na File > Examples > Adafruit NeoPixel.

Mradi 2 – Mipangilio ya Msimbo (Kusogeza Maandishi)

Sketch kamili ya kusogeza maandishi inapakiwa kiotomatiki chini ya makala hii kwenye tovuti. Hapa tunazingatia tu thamani za usanidi ambazo pengine utataka kuhariri: pini, ukubwa wa matrix, mwangaza, mfuatano wa maandishi, rangi, kasi ya kusogeza, na mwelekeo wa hiari.

Vipande vyote hapa chini vimechukuliwa kutoka sehemu ya usanidi juu ya sketch ili uweze kurekebisha haraka tabia bila kugusa mantiki kuu.

Pini na Ukubwa wa Matrix

Kama Mradi 1, matrix ya RGB imeunganishwa kwenye GPIO 14 na ina LED 64 (8×8). Hakikisha mistari hii miwili inalingana na moduli yako:


 // Pini iliyounganishwa kwenye matrix ya 8×8 RGB 
const int MATRIX_PIN = 14; // lazima iwe 14 kwenye moduli hii // Ukubwa wa matrix (upana na urefu)
 const int MATRIX_WIDTH = 8; 
const int MATRIX_HEIGHT = 8; 

Ikiwa unakili mfano kutoka maktaba ya NeoMatrix, inaweza kutumia pini au ukubwa tofauti; badilisha kila wakati ili ulingane na bodi hii.

Mwangaza wa Maandishi

Mwangaza kwa kawaida unadhibitiwa kwa thamani kati ya 0 na 255, ambapo 0 ni kuzima na 255 ni mwangaza wa juu. Thamani ya wastani kwa kawaida inatosha:


// Mwangaza wa jumla wa matrix (0–255) 
uint8_t matrixBrightness = 40; // mwangaza wa ndani unaostarehe // Katika 
setup(): 
matrix.setBrightness(matrixBrightness); 

Ikiwa unatumia paneli katika mazingira yenye mwanga mkali au kwa muda mfupi, unaweza kuongeza thamani hii, lakini epuka kwenda juu sana ikiwa uko karibu na skrini.

Maandishi ya Kusogeza

Ujumbe halisi huhifadhiwa kama mfuatano. Katika video, mfano wa maandishi ni Robojax. Unaweza kuubadilisha kuwa lebo au ujumbe wowote mfupi unaoupenda:


 // Maandishi ya kusogeza kwenye matrix ya 8×8 const char scrollText[] = "Robojax";
 // badilisha hii kuwa ujumbe wako 

Kumbuka kwamba hii ni matrix ya 8×8 tu, kwa hivyo ujumbe mrefu sana utachukua muda mrefu kusogeza na unaweza kuwa mgumu kusoma.

Rangi ya Maandishi (Thamani za RGB)

Rangi ya maandishi yanayosogeza imewekwa na vipengele vya nyekundu, kijani, na bluu (0–255). Kwa mfano, nyekundu safi ni (255, 0, 0), kijani safi ni (0, 255, 0), na bluu safi ni (0, 0, 255). Katika sketch utaona kitu kama:


 // Rangi ya maandishi (R, G, B) uint8_t textRed = 255; // kipengele cha nyekundu uint8_t textGreen = 0; // kipengele cha kijani uint8_t textBlue = 0; // kipengele cha bluu 

Kubadilisha rangi:

  • Njano: textRed = 255; textGreen = 255; textBlue = 0;
  • Samawati ya kijani (Cyan): textRed = 0; textGreen = 255; textBlue = 255;
  • Nyeupe: textRed = 255; textGreen = 255; textBlue = 255;

Video pia inaonyesha kutumia kichagua rangi cha mtandaoni kupata thamani za RGB na kisha kuziweka kwenye msimbo.:contentReference[oaicite:1]{index=1}

Kasi ya Kusogeza (Ucheleweshaji Kati ya Fremu)

Kasi ya kusogeza inadhibitiwa na thamani ya ucheleweshaji katika millisekunde kati ya kila hatua ya kusasisha. Thamani ndogo hufanya maandishi kusogea haraka; thamani kubwa hupunguza kasi. Katika sketch, unapaswa kupata kigezo kama:


// Ucheleweshaji kati ya hatua za kusogeza (katika millisekunde) int scrollDelayMs = 50; 
// ndogo = haraka, kubwa = polepole 

Mifano:

  • scrollDelayMs = 20; → kusogeza haraka.
  • scrollDelayMs = 50; → kasi ya wastani (sawa na video).
  • scrollDelayMs = 100; au zaidi → kusogeza polepole, rahisi kusoma.

Ndani ya loop(), thamani hii inatumika katika wito wa delay(scrollDelayMs); baada ya kila kuchora upya kwa nafasi ya maandishi.

Mwelekeo wa Kusogeza (Hiari)

Katika mradi wa “kusogeza maandishi kwa msingi” kwa kawaida tunasogeza kushoto, lakini ni muhimu kufafanua kigezo cha mwelekeo wa ishara ili uweze kujaribu mielekeo mingine baadaye (kushoto, kulia, juu, chini).

Mfumo mmoja wa kawaida ni:


 // Kiteua mwelekeo wa kusogeza // 0 = kushoto, 1 = kulia, 2 = juu, 3 = chini 
int scrollDirection = 0; // chaguo-msingi: sogeza kushoto 

Kitanzi kikuu kisha hukagua scrollDirection na kusogeza maandishi katika mwelekeo uliochaguliwa. Kwa Mradi wa 2 unaweza kuiacha kwa 0 (kushoto), lakini ikiwa utapanua sketch baadaye unaweza kuongeza masharti kama:


 if (scrollDirection == 0) { 
// sogeza maandishi kushoto 
} else if (scrollDirection == 1) { 
// sogeza maandishi kulia 
} else if (scrollDirection == 2) { 
// sogeza maandishi juu
 } else if (scrollDirection == 3) { 
// sogeza maandishi chini 
}
 

Kwa makala hii tunaandika mpangilio tu. Utekelezaji kamili ni sehemu ya msimbo uliopakiwa chini ya makala.

Muhtasari

Mradi wa 2 unageuza ESP32-S3 RGB LED Matrix yako kuwa onyesho rahisi lakini la kuvutia la maandishi. Kwa kuhariri vigezo vichache tu juu ya msimbo, unaweza kubadilisha haraka:

  • Ujumbe unaoonyeshwa (scrollText).
  • Rangi ya maandishi (textRed, textGreen, textBlue).
  • Mwangaza wa matrix (matrixBrightness).
  • Kasi ya kusogeza (scrollDelayMs).
  • Mwelekeo wa kusogeza (scrollDirection, ikiwa utachagua kuitumia).

Sketch kamili ya mradi huu inapatikana chini ya makala hii (imepakiwa kiotomatiki na tovuti). Kwa maelekezo ya kina ya hatua kwa hatua na onyesho la moja kwa moja la maandishi yanayosogeza, hakikisha unatazama sehemu inayolingana ya video. Ikiwa unapenda mradi huu na unataka kuujenga mwenyewe, unaweza pia kununua moduli ya ESP32-S3 RGB LED Matrix kutoka kwenye viungo vya washirika vilivyoorodheshwa chini ya msimbo.

Bilder

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
Språk: 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();
  }
}

Tänker att du kanske behöver

Resurser och referenser

Filer📁

Fritzing-fil