This tutorial is part of: ESP32-S3 RGB LED matica
Skvelý projekt na tvorbu zábavných a praktických aplikácií s použitím modulu ESP32-S3 RGB Matrix. Odkazy na ďalšie videá nájdete pod týmto článkom.
Projekt 2 s RGB LED maticou ESP32-S3 - Posúvajúci sa text
Projekt 2 – Posúvanie textu na ESP32-S3 RGB LED matici
V tomto projekte premeníme ESP32-S3 RGB LED maticu na malý textový banner. Krátka správa (napríklad Robojax) sa posúva cez 8×8 RGB displej a text, farbu, jas a rýchlosť posúvania môžete jednoducho zmeniť priamo v kóde. Toto je veľmi užitočné pre jednoduché upozornenia, menovky alebo malé stavové správy.
Všetkých šesť projektov v tejto sérii je predvedených a vysvetlených v jednom YouTube videu. Rovnaké video je vložené na tejto stránke, takže môžete presne vidieť, ako posúvanie textu vyzerá v reálnom čase a ako každé nastavenie ovplyvňuje animáciu. Kompletný kód pre tento projekt sa automaticky načíta nižšie pod článkom a modul ESP32-S3 RGB LED Matrix si môžete zakúpiť z affiliate obchodov uvedených v sekcii kódu.
Tento projekt nadväzuje na základy z Projektu 1 (pohybujúca sa bodka a ovládanie farieb) a pridáva vykresľovanie textu a posúvanie pomocou knižnice NeoMatrix.


Prehľad modulu ESP32-S3 RGB LED Matrix
Hardvér je rovnaký vo všetkých šiestich projektoch: mikrokontrolér ESP32-S3 s Wi-Fi a Bluetooth, 8×8 RGB LED matica (64 adresovateľných RGB LED), akcelerometer QMI8658C, USB port a prístupné IO piny.:contentReference[oaicite:0]{index=0}

- ESP32-S3 – hlavný CPU s Wi-Fi/BLE pre pokročilé projekty.
- 8×8 RGB matica – 64 RGB LED pre ikony, text a animácie.
- Akcelerometer QMI8658C – používa sa v neskorších projektoch na náklon a orientáciu.
- USB port – používa sa na napájanie a programovanie cez Arduino IDE.
- Odkryté piny – umožňujú používať dosku ako bežný ESP32 pre iné IO.
- Tlačidlá Boot / Reset – na nahrávanie firmvéru a reštartovanie skíc.
V Projekte 2 sa zameriavame hlavne na maticu a textové funkcie NeoMatrix. Akcelerometer sa zatiaľ nepoužíva, ale rovnaká doska zvládne aj všetky neskoršie interakčné a herné projekty.

Projekty zahrnuté vo videu (Časové značky)
Video, ktoré patrí k tomuto článku, pokrýva všetkých šesť projektov. Približné časové značky sú:
- 00:00 – Úvod
- 02:01 – Inštalácia ESP32 dosiek
- 03:32 – Inštalácia knižníc
- 05:32 – Projekt 1: Pohybujúca sa bodka
- 11:11 – Projekt 2: Posúvanie textu
- 12:59 – Projekt 3: HTTP text
- 16:41 – Projekt 4: Náklon bodky
- 18:55 – Projekt 5: Šípka hore
- 20:02 – Projekt 6: Cieľová hra
Odporúčame vám pozerať video pri čítaní tohto článku. Ukazuje posúvanie textu naživo na LED matici a prechádza všetkými krokmi v Arduino IDE.
Inštalácia ESP32 dosiek v Arduino IDE
Pred spustením kódu na posúvanie textu sa uistite, že je podpora ESP32 nainštalovaná vo vašom Arduino IDE:
- Otvorte
Súbor > Predvoľbya pridajte URL adresu ESP32 dosiek do „Správca ďalších URL adries dosiek“. - Prejdite na
Nástroje > Doska > Správca dosiek…, vyhľadajteESP32a nainštalujte oficiálny balík ESP32. - Vyberte svoju ESP32-S3 RGB LED maticu z
Nástroje > Doska. - Pripojte modul cez USB a vyberte správny COM/sériový port pod
Nástroje > Port.
Ak typ dosky alebo port nie je správny, skica sa nenahrá.
Inštalácia NeoMatrix a požadovaných knižníc
Posúvanie textu je implementované pomocou Adafruit NeoMatrix a jeho závislostí. Vo videu sú nainštalované cez Správcu knižníc.
Budete potrebovať:
Adafruit NeoMatrixAdafruit NeoPixelAdafruit GFX Library
- Otvorte
Skica > Zahrnúť knižnicu > Spravovať knižnice…. - Vyhľadajte
Adafruit NeoMatrixa kliknite na Inštalovať. - Keď sa zobrazí výzva, povoľte inštaláciu
Adafruit GFXaAdafruit NeoPixelako závislostí.
Ak je inštalácia úspešná, mali by ste vidieť príkladové skice pod Súbor > Príklady > Adafruit NeoMatrix a Súbor > Príklady > Adafruit NeoPixel.
Projekt 2 – Nastavenia kódu (Posúvanie textu)
Kompletná skica na posúvanie textu sa automaticky načíta nižšie pod týmto článkom na webovej stránke. Tu sa zameriavame len na konfiguračné hodnoty, ktoré budete pravdepodobne chcieť upraviť: pin, veľkosť matice, jas, textový reťazec, farba, rýchlosť posúvania a voliteľný smer.
Všetky úryvky nižšie sú prevzaté z konfiguračnej sekcie na začiatku skice, aby ste mohli rýchlo upraviť správanie bez toho, aby ste sa dotkli hlavnej logiky.
Pin a veľkosť matice
Rovnako ako v Projekte 1 je RGB matica pripojená na GPIO 14 a obsahuje 64 LED (8×8). Uistite sa, že tieto dva riadky zodpovedajú vášmu modulu:
// Pin pripojený k 8×8 RGB matici
const int MATRIX_PIN = 14; // musí byť 14 na tomto module // Veľkosť matice (šírka a výška)
const int MATRIX_WIDTH = 8;
const int MATRIX_HEIGHT = 8;
Ak kopírujete príklad z knižnice NeoMatrix, môže používať iný pin alebo veľkosť; vždy ich zmeňte tak, aby zodpovedali tejto doske.
Jas textu
Jas sa zvyčajne ovláda hodnotou medzi 0 a 255, kde 0 znamená vypnuté a 255 maximálny jas. Mierna hodnota je zvyčajne dostatočná:
// Celkový jas matice (0–255)
uint8_t matrixBrightness = 40; // pohodlný vnútorný jas // V
setup():
matrix.setBrightness(matrixBrightness);
Ak používate panel v jasnom prostredí alebo na krátky čas, môžete túto hodnotu zvýšiť, ale vyhnite sa príliš vysokej hodnote, ak ste blízko displeja.
Text na posúvanie
Skutočná správa je uložená ako reťazec. Vo videu je príklad textu Robojax. Môžete ho zmeniť na akýkoľvek krátky názov alebo správu, ktorú chcete:
// Text na posúvanie na 8×8 matici const char scrollText[] = "Robojax";
// zmeňte to na vašu správu
Majte na pamäti, že toto je iba 8×8 matica, takže veľmi dlhé správy sa budú posúvať dlhšie a môžu byť ťažko čitateľné.
Farba textu (hodnoty RGB)
Farba posúvaného textu je nastavená červenou, zelenou a modrou zložkou (0–255). Napríklad čisto červená je (255, 0, 0), čisto zelená je (0, 255, 0) a čisto modrá je (0, 0, 255). V náčrte uvidíte niečo ako:
// Farba textu (R, G, B) uint8_t textRed = 255; // červená zložka uint8_t textGreen = 0; // zelená zložka uint8_t textBlue = 0; // modrá zložka
Ak chcete zmeniť farbu:
- Žltá:
textRed = 255; textGreen = 255; textBlue = 0; - Tyrkysová:
textRed = 0; textGreen = 255; textBlue = 255; - Biela:
textRed = 255; textGreen = 255; textBlue = 255;
Video tiež ukazuje použitie online výberu farieb na nájdenie hodnôt RGB a ich zadanie do kódu.:contentReference[oaicite:1]{index=1}
Rýchlosť posúvania (oneskorenie medzi snímkami)
Rýchlosť posúvania je riadená hodnotou oneskorenia v milisekundách medzi každým krokom aktualizácie. Menšia hodnota spôsobí rýchlejší pohyb textu; väčšia hodnota ho spomalí. V náčrte by ste mali nájsť premennú ako:
// Oneskorenie medzi krokmi posúvania (v milisekundách) int scrollDelayMs = 50;
// menšie = rýchlejšie, väčšie = pomalšie
Príklady:
scrollDelayMs = 20;→ rýchle posúvanie.scrollDelayMs = 50;→ stredná rýchlosť (podobne ako vo videu).scrollDelayMs = 100;alebo viac → pomalé, ľahko čitateľné posúvanie.
Vnútri loop() sa táto hodnota používa vo volaní delay(scrollDelayMs); po každom prekreslení pozície textu.
Smer posúvania (voliteľné)
V projekte „základné posúvanie textu“ zvyčajne posúvame doľava, ale je užitočné definovať symbolickú premennú smeru, aby ste mohli neskôr experimentovať s inými smermi (doľava, doprava, hore, dole).
Bežný vzor je:
// Výber smeru posúvania // 0 = doľava, 1 = doprava, 2 = hore, 3 = dole
int scrollDirection = 0; // predvolené: posúvanie doľava
Hlavná slučka potom kontroluje scrollDirection a pohybuje textom vo zvolenom smere. Pre Projekt 2 ho môžete nechať na 0 (doľava), ale ak neskôr rozšírite náčrt, môžete pridať podmienky ako:
if (scrollDirection == 0) {
// pohyb textu doľava
} else if (scrollDirection == 1) {
// pohyb textu doprava
} else if (scrollDirection == 2) {
// pohyb textu hore
} else if (scrollDirection == 3) {
// pohyb textu dole
}
Pre tento článok dokumentujeme iba nastavenie. Úplná implementácia je súčasťou kódu načítaného pod článkom.
Zhrnutie
Projekt 2 premení vašu ESP32-S3 RGB LED maticu na jednoduchý, ale pútavý textový displej. Úpravou len niekoľkých premenných na začiatku kódu môžete rýchlo zmeniť:
- Ktorá správa sa zobrazuje (
scrollText). - Farbu textu (
textRed,textGreen,textBlue). - Jas matice (
matrixBrightness). - Rýchlosť posúvania (
scrollDelayMs). - Smer posúvania (
scrollDirection, ak sa ho rozhodnete použiť).
Úplný náčrt pre tento projekt je dostupný nižšie pod týmto článkom (automaticky načítaný webovou stránkou). Pre podrobné kroky konfigurácie a živú ukážku posúvania textu v akcii si pozrite príslušnú časť videa. Ak sa vám projekt páči a chcete si ho postaviť sami, môžete si tiež zakúpiť modul ESP32-S3 RGB LED Matrix z affiliate odkazov uvedených pod kódom.
This tutorial is part of: ESP32-S3 RGB LED matica
- Projekt ESP32-S3 RGB LED matice 1 – Základná bodka
- Projekt 3 s RGB LED maticou ESP32-S3 - Text z mobilného telefónu
- Projekt ESP32-S3 RGB LED Matrix 4 - Náklon bodky
- Projekt ESP32-S3 RGB LED Matrix 5 - Šípka vždy hore
- Projekt ESP32-S3 RGB LED Matrix 6 - Hra Cible
- Projekt ESP32-S3 RGB LED matica Wi-Fi + NTP časové hodiny - 1 Základné hodiny
- Projekt internetových hodín s RGB LED maticou ESP32-S3 - 2 hodiny s viacfarebným zobrazením času a dátumu
- Projekt internetových hodín s RGB LED maticou ESP32-S3 - 3 nočné farby s dátumom
- Projekt internetových hodín s RGB LED maticou ESP32-S3 - 5 dúhových farieb
- Projekt internetových hodín s RGB LED maticou ESP32-S3 - 4 náhodné farby
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
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();
}
}
Things you might need
-
Amazon
-
eBay
-
AliExpressPurchase ESP32-S3 RGB Matrix from AliExpresss.click.aliexpress.com
-
AliExpressPurchase ESP32-S3 RGB Matrix from AliExpress (2)s.click.aliexpress.com
Resources & references
-
Internal🎨 Color picker Toolrobojax.com
Files📁
Fritzing File
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB