Этот учебник является частью: ESP32-S3 RGB LED матрица
Замечательный проект для создания развлекательных и практических приложений с использованием модуля RGB-матрицы ESP32-S3. Ссылки на другие видеоролики находятся ниже этой статьи.
Проект RGB LED матрицы ESP32-S3 2 - Прокручиваемый текст
Проект 2 - Прокрутка текста на RGB LED матрице ESP32-S3
В этом проекте мы превращаем RGB LED-матрицу ESP32-S3 в маленький текстовый баннер. Короткое сообщение (напримерRobojax) прокручивается по 8×8 RGB-дисплею, и вы можете легко изменить текст, цвет, яркость и скорость прокрутки непосредственно в коде. Это очень полезно для простых уведомлений, бейджей с именами или небольших статусных сообщений.
Все шесть проектов в этой серии демонстрируются и объясняются в одном видео на YouTube. Это же видео встроено на этой странице, поэтому вы можете увидеть, как именно выглядит прокрутка текста в реальном времени, и как каждое изменение настройки влияет на анимацию. Полный код для этого проекта автоматически загружается под статьей, и вы можете приобрести модуль RGB LED Matrix на базе ESP32-S3 в магазинах-партнерах, перечисленных в разделе кода.
Этот проект основывается на основах Проекта 1 (перемещающаяся точка и управление цветом) и добавляет рендеринг текста и прокрутку с использованием библиотеки NeoMatrix.


Обзор модуля RGB LED матрицы ESP32-S3
Аппаратное обеспечение одинаково во всех шести проектах: микроконтроллер ESP32-S3 с Wi-Fi и Bluetooth, матрица RGB LED 8×8 (64 адресуемых RGB LED), акселерометр QMI8658C, USB-порт и доступные выводы IO.:contentReference[oaicite:0]{index=0}

- ESP32-S3- основной ЦП с Wi-Fi/BLE для продвинутых проектов.
- 8×8 RGB матрица- 64 RGB-светодиода для иконок, текста и анимаций.
- QMI8658C акселерометр- использовался в последующих проектах для наклона и ориентации.
- USB-порт- используется для питания и программирования через Arduino IDE.
- Открытые контакты- позволить вам использовать плату как обычный ESP32 для других входов/выходов.
- Кнопки загрузки / сброса- для загрузки прошивки и перезагрузки скетчей.
В Проекте 2 мы в основном сосредоточены на матрицах и текстовых функциях NeoMatrix. Акселлометр пока не используется, но та же плата будет обрабатывать все последующие взаимодействия и игровые проекты.

Проекты, охваченные в видео (временные метки)
Видео, сопутствующее этой статье, охватывает все шесть проектов. Приблизительные временные метки:
- 00:00- Введение
- 02:01- Установка плат ESP32
- 03:32- Установка библиотек
- 05:32- Проект 1: Двигающаяся точка
- 11:11- Проект 2: Прокрутка текста
- 12:59- Проект 3: HTTP Текст
- 16:41- Проект 4: Tilt Dot
- 18:55Проект 5: Стрелка вверх
- 20:02- Проект 6: Игра-цель
Вас призывают смотреть видео во время чтения этой статьи. В нем показывается, как текст прокручивается в реальном времени на светодиодной матрице и подробно описываются все шаги в Arduino IDE.
Установка плат ESP32 в Arduino IDE
Перед запуском кода для прокрутки текста убедитесь, что поддержка ESP32 установлена в вашей Arduino IDE:
- Открыть
File > Preferencesи добавьте URL-адрес плат ESP32 в "Дополнительные URL-адреса менеджера плат". - Идти к
Tools > Board > Boards Manager…, ищите дляESP32, и установите официальный пакет ESP32. - Выберите свою плату RGB Matrix ESP32-S3 из
Tools > Board. - Подключите модуль через USB и выберите правильный COM/последовательный порт под
Tools > Port.
Если тип платы или порт неверны, sketch не загрузится.
Установка NeoMatrix и необходимых библиотек
Текстовый скролл реализован с использованием Adafruit NeoMatrix и его зависимостей. В видео они устанавливаются через Менеджер библиотек.
Вам понадобится:
Adafruit NeoMatrixAdafruit NeoPixelAdafruit GFX Library
- Открыть
Sketch > Include Library > Manage Libraries…. - Поиск за
Adafruit NeoMatrixи нажмитеУстановить. - Когда появится запрос, разрешите установить.
Adafruit GFXиAdafruit NeoPixelкак зависимости.
Если установка прошла успешно, вы должны увидеть примеры эскизов подFile > Examples > Adafruit NeoMatrixиFile > Examples > Adafruit NeoPixel.
Проект 2 - Настройки кода (Прокрутка текста)
Полный текстовой эскиз прокрутки автоматически загружается ниже этой статьи на сайте. Здесь мы сосредоточимся только на значениях конфигурации, которые, вероятно, вы захотите изменить: пин, размер матрицы, яркость, строка текста, цвет, скорость прокрутки и необязательное направление.
Все фрагменты ниже взяты из секции конфигурации вверху эскиза, чтобы вы могли быстро настроить поведение, не трогая основную логику.
Матрица пина и размера
Так же как и в Проекте 1, RGB-матрица подключена к GPIO 14 и содержит 64 светодиода (8×8). Убедитесь, что эти две строки соответствуют вашему модулю:
// Pin connected to 8×8 RGB matrix
const int MATRIX_PIN = 14; // must be 14 on this module // Matrix size (width and height)
const int MATRIX_WIDTH = 8;
const int MATRIX_HEIGHT = 8;
Если вы скопируете пример из библиотеки NeoMatrix, он может использовать другой контакт или размер; всегда изменяйте их, чтобы они соответствовали этой плате.
Яркость текста
Яркость обычно регулируется значением от 0 до 255, где 0 — это выключено, а 255 — максимальная яркость. Обычно достаточно умеренного значения:
// Overall matrix brightness (0–255)
uint8_t matrixBrightness = 40; // comfortable indoor brightness // In
setup():
matrix.setBrightness(matrixBrightness);
Если вы используете панель в яркой обстановке или в течение короткого времени, вы можете увеличить это значение, но старайтесь не подниматься слишком высоко, если вы близко к экрану.
Текст для прокрутки
Фактическое сообщение хранится в виде строки. В видео пример текста -RobojaxВы можете изменить это на любую короткую метку или сообщение, которое вам нравится:
// Text to scroll on the 8×8 matrix const char scrollText[] = "Robojax";
// change this to your message
Имейте в виду, что это всего лишь матрица 8×8, поэтому очень длинные сообщения будут прокручиваться дольше и могут стать трудными для чтения.
Цвет текста (значения RGB)
Цвет прокручиваемого текста задается с помощью красного, зеленого и синего компонентов (0-255). Например, чистый красный - это(255, 0, 0), чистый зеленый — это(0, 255, 0), и чистый голубой это(0, 0, 255). На эскизе вы увидите нечто подобное:
// Text color (R, G, B) uint8_t textRed = 255; // red component uint8_t textGreen = 0; // green component uint8_t textBlue = 0; // blue component Чтобы изменить цвет:
- Жёлтый:
textRed = 255; textGreen = 255; textBlue = 0; - Циан:
textRed = 0; textGreen = 255; textBlue = 255; - Белый:
textRed = 255; textGreen = 255; textBlue = 255;
В видео также демонстрируется использование онлайн-выборщика цветов для поиска значений RGB, а затем их ввода в код.:contentReference[oaicite:1]{index=1}
Скорость прокрутки (Задержка между кадрами)
Скорость прокрутки контролируется значением задержки в миллисекундах между каждым шагом обновления. Более маленькое значение делает текст быстрее; более большое значение замедляет его. В эскизе вы должны найти переменную, подобную:
// Delay between scroll steps (in milliseconds) int scrollDelayMs = 50;
// smaller = faster, larger = slower
Примеры:
scrollDelayMs = 20;→ быстрый прокрутка.scrollDelayMs = 50;→ средняя скорость (аналогично видео).scrollDelayMs = 100;или больше → медленный, легкий для чтения прокрутка.
Внутриloop(), это значение используется в аdelay(scrollDelayMs);вызывайте после каждого перерисовки позиции текста.
Направление прокрутки (необязательно)
В проекте "основной текстовый скролл" мы обычно прокручиваем влево, но полезно определить символическую переменную направления, чтобы вы могли позже экспериментировать с другими направлениями (влево, вправо, вверх, вниз).
Один общий шаблон:
// Scroll direction selector // 0 = left, 1 = right, 2 = up, 3 = down
int scrollDirection = 0; // default: scroll to the left
Главный цикл затем проверяетscrollDirectionи перемещает текст в выбранном направлении. Для Проекта 2 вы можете оставить это на0(слева), но если позже вы расширите эскиз, вы сможете добавить такие условия, как:
if (scrollDirection == 0) {
// move text left
} else if (scrollDirection == 1) {
// move text right
} else if (scrollDirection == 2) {
// move text up
} else if (scrollDirection == 3) {
// move text down
}
В этой статье мы документируем только настройки. Полная реализация является частью кода, загруженного под статьей.
Резюме
Проект 2 превращает вашу RGB-матрицу LED ESP32-S3 в простой, но привлекательный дисплей текста. Изменив всего лишь несколько переменных в начале кода, вы можете быстро изменить:
- Какое сообщение отображается (
scrollText). - Цвет текста (
textRed,textGreen,textBlue). - Яркость матрицы
matrixBrightness). - Скорость прокрутки (
scrollDelayMs). - Направление прокрутки
scrollDirection, если вы решите использовать его).
Полная схема для этого проекта доступна ниже этой статьи (загружена автоматически сайтом). Для подробной пошаговой настройки и живой демонстрации действия прокручивающегося текста обязательно посмотрите соответствующий раздел видео. Если вам нравится проект и вы хотите собрать его самостоятельно, вы также можете приобрести модуль RGB LED матрицы ESP32-S3 по партнерским ссылкам, указанным под кодом.
Этот учебник является частью: ESP32-S3 RGB LED матрица
- Проект матрицы RGB LED ESP32-S3 1 - Основной штрих
- Проект RGB LED матрицы ESP32-S3 3 - Текст с мобильного телефона
- Проект RGB LED матрицы ESP32-S3 4 - Наклоненная точка
- Проект матрицы RGB LED на ESP32-S3 5 - Стрелка всегда вверх
- Проект матрицы RGB LED ESP32-S3 6 - Игра цель
- ESP32-S3 RGB LED матрица Wi-Fi + NTP проект часы - 1 базовые часы
- ESP32-S3 RGB светодиодная матрица Интернет-часы - 2-часовой многоцветный дисплей времени и даты
- Проект интернет-часов на матрице RGB LED ESP32-S3 - 3 ночных цвета с датой
- Проект интернет-часов на матрице RGB LED ESP32-S3 - 5 радуга цветов
- Проект интернет-часы с матрицей RGB LED на ESP32-S3 - 4 случайных цвета
- Тест матрицы RGB LED ESP32-S3 для настройки RGB, GRB
/*
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();
}
}
Вещи, которые могут вам понадобиться
-
Амазонка
-
eBay
-
АлиЭкспрессКупить ESP32-S3 RGB-матрицу на AliExpresss.click.aliexpress.com
-
АлиЭкспрессПриобретите ESP32-S3 RGB Matrix на AliExpress (2)s.click.aliexpress.com
Ресурсы и ссылки
-
Внутренний🎨 Инструмент выбора цветаrobojax.com
Файлы📁
Файл Fritzing
-
esp32-S3-supermini-tht часть фритзинга
esp32-S3-supermini-tht.fzpz0.02 MB