Deze tutorial maakt deel uit van: ESP32-S3 RGB LED-matrix
Een gaaf project om te maken voor de lol en voor praktische toepassingen met de ESP32-S3 RGB-matrixmodule. Links naar andere video's vind je onderaan dit artikel.
ESP32-S3 RGB LED-matrixproject 2 - Scrollende tekst
Project 2 – Tekstscrollen op ESP32-S3 RGB LED-matrix
In dit project veranderen we de ESP32-S3 RGB LED-matrix in een klein tekstbanner. Een kort bericht (bijvoorbeeld Robojax) scrollt over het 8×8 RGB-display, en je kunt eenvoudig de tekst, kleur, helderheid en scrollsnelheid rechtstreeks in de code wijzigen. Dit is erg handig voor eenvoudige meldingen, naamkaartjes of kleine statusberichten.
Alle zes projecten in deze serie worden gedemonstreerd en uitgelegd in één YouTube-video. Dezelfde video is op deze pagina ingesloten, zodat je precies kunt zien hoe het tekstscrollen er in realtime uitziet en hoe elke instelling de animatie beïnvloedt. De volledige code voor dit project wordt automatisch onder het artikel geladen, en je kunt de ESP32-S3 RGB LED-matrixmodule kopen bij aangesloten winkels die onder de codesectie worden vermeld.
Dit project bouwt voort op de basis van Project 1 (bewegende stip en kleurbesturing) en voegt tekstweergave en scrollen toe met behulp van de NeoMatrix-bibliotheek.


Overzicht van de ESP32-S3 RGB LED-matrixmodule
De hardware is hetzelfde voor alle zes projecten: een ESP32-S3-microcontroller met Wi-Fi en Bluetooth, een 8×8 RGB-LED-matrix (64 adresseerbare RGB-LED's), een QMI8658C-versnellingsmeter, USB-poort en toegankelijke IO-pinnen.:contentReference[oaicite:0]{index=0}

- ESP32-S3 – hoofd-CPU met Wi-Fi/BLE voor geavanceerde projecten.
- 8×8 RGB-matrix – 64 RGB-LED's voor pictogrammen, tekst en animaties.
- QMI8658C-versnellingsmeter – gebruikt in latere projecten voor kanteling en oriëntatie.
- USB-poort – gebruikt voor voeding en programmering via Arduino IDE.
- Blootliggende pinnen – laten je het bord gebruiken als een normale ESP32 voor andere IO.
- Boot-/resetknoppen – voor firmware-upload en het opnieuw starten van sketches.
In Project 2 richten we ons voornamelijk op de matrix en de NeoMatrix-tekstfuncties. De versnellingsmeter wordt nog niet gebruikt, maar hetzelfde bord zal ook alle latere interactie- en gameprojecten aan kunnen.

Projecten behandeld in de video (tijdstempels)
De video die bij dit artikel hoort, behandelt alle zes projecten. De geschatte tijdstempels zijn:
- 00:00 – Inleiding
- 02:01 – ESP32-borden installeren
- 03:32 – Bibliotheken installeren
- 05:32 – Project 1: Bewegende stip
- 11:11 – Project 2: Tekstscrollen
- 12:59 – Project 3: HTTP-tekst
- 16:41 – Project 4: Kantelstip
- 18:55 – Project 5: Pijl omhoog
- 20:02 – Project 6: Doelspel
Je wordt aangemoedigd om de video te bekijken terwijl je dit artikel leest. Het laat het tekstscrollen live op de LED-matrix zien en doorloopt alle stappen in de Arduino IDE.
ESP32-borden installeren in Arduino IDE
Voordat je de tekstscrollcode uitvoert, moet je ervoor zorgen dat de ESP32-ondersteuning is geïnstalleerd in je Arduino IDE:
- Open
Bestand > Voorkeurenen voeg de ESP32-borden-URL toe aan “Extra boards manager-URL's”. - Ga naar
Extra > Bord > Boards manager…, zoek naarESP32en installeer het officiële ESP32-pakket. - Selecteer je ESP32-S3 RGB-matrixbord onder
Extra > Bord. - Verbind de module via USB en kies de juiste COM-/seriële poort onder
Extra > Poort.
Als het bordtype of de poort niet correct is, zal de sketch niet uploaden.
NeoMatrix en vereiste bibliotheken installeren
Het tekstscrollen wordt geïmplementeerd met Adafruit NeoMatrix en de bijbehorende afhankelijkheden. In de video worden ze geïnstalleerd via Bibliotheekbeheer.
Je hebt nodig:
Adafruit NeoMatrixAdafruit NeoPixelAdafruit GFX-bibliotheek
- Open
Sketch > Bibliotheek gebruiken > Bibliotheken beheren…. - Zoek naar
Adafruit NeoMatrixen klik op Installeren. - Wanneer daarom wordt gevraagd, sta toe dat
Adafruit GFXenAdafruit NeoPixelals afhankelijkheden worden geïnstalleerd.
Als de installatie succesvol is, zou je voorbeeldsketches moeten zien onder Bestand > Voorbeelden > Adafruit NeoMatrix en Bestand > Voorbeelden > Adafruit NeoPixel.
Project 2 – Code-instellingen (tekstscrollen)
De volledige tekstscrollsketch wordt automatisch onder dit artikel op de website geladen. Hier richten we ons alleen op de configuratiewaarden die je waarschijnlijk wilt bewerken: pin, matrixgrootte, helderheid, tekstreeks, kleur, scrollsnelheid en optionele richting.
Alle onderstaande fragmenten zijn afkomstig uit de configuratiesectie bovenaan de sketch, zodat je het gedrag snel kunt aanpassen zonder de hoofdlogica aan te raken.
Matrixpin en -grootte
Net als in Project 1 is de RGB-matrix verbonden met GPIO 14 en bevat deze 64 LED's (8×8). Zorg ervoor dat deze twee regels overeenkomen met je module:
// Pin verbonden met 8×8 RGB-matrix
const int MATRIX_PIN = 14; // moet 14 zijn op deze module // Matrixgrootte (breedte en hoogte)
const int MATRIX_WIDTH = 8;
const int MATRIX_HEIGHT = 8;
Als je een voorbeeld uit de NeoMatrix-bibliotheek kopieert, kan deze een andere pin of grootte gebruiken; verander deze altijd zodat ze overeenkomen met dit bord.
Helderheid van de tekst
Helderheid wordt meestal geregeld met een waarde tussen 0 en 255, waarbij 0 uit is en 255 maximale helderheid. Een gemiddelde waarde is meestal voldoende:
// Algemene matrixhelderheid (0–255)
uint8_t matrixBrightness = 40; // comfortabele helderheid binnenshuis // In
setup():
matrix.setBrightness(matrixBrightness);
Als u het paneel in een heldere omgeving of voor een korte tijd gebruikt, kunt u deze waarde verhogen, maar vermijd deze te hoog in te stellen als u dicht bij het display bent.
Tekst om te laten scrollen
Het daadwerkelijke bericht wordt opgeslagen als een string. In de video is de voorbeeldtekst Robojax. U kunt dit wijzigen naar elk kort label of bericht dat u wilt:
// Tekst om te scrollen op de 8×8 matrix const char scrollText[] = "Robojax";
// wijzig dit naar uw bericht
Houd er rekening mee dat dit slechts een 8×8 matrix is, dus zeer lange berichten zullen langer duren om te scrollen en kunnen moeilijk leesbaar worden.
Tekstkleur (RGB-waarden)
De kleur van de scrollende tekst wordt ingesteld door rode, groene en blauwe componenten (0–255). Bijvoorbeeld, puur rood is (255, 0, 0), puur groen is (0, 255, 0), en puur blauw is (0, 0, 255). In de sketch ziet u iets als:
// Tekstkleur (R, G, B) uint8_t textRed = 255; // rode component uint8_t textGreen = 0; // groene component uint8_t textBlue = 0; // blauwe component
Om de kleur te wijzigen:
- Geel:
textRed = 255; textGreen = 255; textBlue = 0; - Cyaan:
textRed = 0; textGreen = 255; textBlue = 255; - Wit:
textRed = 255; textGreen = 255; textBlue = 255;
De video demonstreert ook het gebruik van een online kleurkiezer om de RGB-waarden te vinden en deze vervolgens in de code in te voeren.:contentReference[oaicite:1]{index=1}
Scrollsnelheid (vertraging tussen frames)
De scrollsnelheid wordt geregeld door een vertragingswaarde in milliseconden tussen elke update-stap. Een kleinere waarde laat de tekst sneller bewegen; een grotere waarde vertraagt het. In de sketch vindt u een variabele zoals:
// Vertraging tussen scrollstappen (in milliseconden) int scrollDelayMs = 50;
// kleiner = sneller, groter = langzamer
Voorbeelden:
scrollDelayMs = 20;→ snel scrollen.scrollDelayMs = 50;→ gemiddelde snelheid (vergelijkbaar met de video).scrollDelayMs = 100;of meer → langzaam, gemakkelijk leesbaar scrollen.
Binnen de loop() wordt deze waarde gebruikt in een delay(scrollDelayMs);-aanroep na elke hertekening van de tekstpositie.
Scrollrichting (optioneel)
In het “basis tekst scroll”-project scrollen we meestal naar links, maar het is nuttig om een symbolische richtingsvariabele te definiëren zodat u later met andere richtingen kunt experimenteren (links, rechts, omhoog, omlaag).
Een veelvoorkomend patroon is:
// Scrollrichting selectie // 0 = links, 1 = rechts, 2 = omhoog, 3 = omlaag
int scrollDirection = 0; // standaard: scroll naar links
De hoofdloop controleert vervolgens scrollDirection en beweegt de tekst in de gekozen richting. Voor Project 2 kunt u het op 0 (links) laten, maar als u de sketch later uitbreidt, kunt u voorwaarden toevoegen zoals:
if (scrollDirection == 0) {
// beweeg tekst naar links
} else if (scrollDirection == 1) {
// beweeg tekst naar rechts
} else if (scrollDirection == 2) {
// beweeg tekst omhoog
} else if (scrollDirection == 3) {
// beweeg tekst omlaag
}
Voor dit artikel documenteren we alleen de instelling. De volledige implementatie maakt deel uit van de code die onder het artikel is geladen.
Samenvatting
Project 2 verandert uw ESP32-S3 RGB LED Matrix in een eenvoudige maar opvallende tekstweergave. Door slechts een paar variabelen bovenaan de code te bewerken, kunt u snel wijzigen:
- Welk bericht wordt weergegeven (
scrollText). - De kleur van de tekst (
textRed,textGreen,textBlue). - De helderheid van de matrix (
matrixBrightness). - De snelheid van het scrollen (
scrollDelayMs). - De richting van het scrollen (
scrollDirection, als u ervoor kiest om dit te gebruiken).
De volledige sketch voor dit project is beschikbaar onder dit artikel (automatisch geladen door de website). Voor gedetailleerde stapsgewijze configuratie en een live demonstratie van de scrollende tekst in actie, zorg ervoor dat u het bijbehorende gedeelte van de video bekijkt. Als u het project leuk vindt en het zelf wilt bouwen, kunt u ook de ESP32-S3 RGB LED Matrix-module kopen via de affiliate-links die onder de code staan vermeld.
Deze tutorial maakt deel uit van: ESP32-S3 RGB LED-matrix
- ESP32-S3 RGB LED-matrixproject 1- Basispunt
- ESP32-S3 RGB LED-matrixproject 3 - Tekst vanaf mobiele telefoon
- ESP32-S3 RGB LED-matrixproject 4 - Kantelpunt
- ESP32-S3 RGB LED-matrixproject 5 - Pijl altijd omhoog
- ESP32-S3 RGB LED-matrixproject 6 - Cible-spel
- ESP32-S3 RGB LED-matrix Wi-Fi + NTP-tijdklokproject -1 Basisklok
- ESP32-S3 RGB LED-matrix internetklokproject - 2 klokken multi-kleur tijd- en datumweergave
- ESP32-S3 RGB LED-matrix internetklokproject - 3 nachtkleuren met datum
- ESP32-S3 RGB LED-matrix internetklokproject - 5 Regenboogkleur
- ESP32-S3 RGB LED-matrix internetklokproject - 4 willekeurige kleuren
- 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();
}
}
Dingen die je misschien nodig hebt
-
Amazon
-
eBay
-
AliExpressPurchase ESP32-S3 RGB matrix from AliExpresss.click.aliexpress.com
-
AliExpressPurchase ESP32-S3 RGB matrix from AliExpress (2)s.click.aliexpress.com
Hulpmiddelen en referenties
-
Intern🎨 Color picker Toolrobojax.com
Bestanden📁
Fritzing-bestand
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB