This tutorial is part of: ESP32-S3 RGB LED 点阵
这是一个很棒的项目,可以使用 ESP32-S3 RGB 矩阵模块进行创作,兼具趣味性和实用性。本文下方有其他相关视频的链接。
ESP32-S3 RGB LED矩陣項目2 - 滾動文字
項目2 – ESP32-S3 RGB LED矩陣上嘅文字滾動
喺呢個項目入面,我哋將ESP32-S3 RGB LED矩陣變成一個細細嘅文字橫額。一段短訊息(例如Robojax)會喺8×8 RGB顯示屏上面滾動,你可以好容易咁直接喺程式碼入面改文字、顏色、亮度同滾動速度。呢個對於簡單通知、名牌或者細小狀態訊息好有用。
呢個系列嘅全部六個項目都會喺一條YouTube影片入面示範同解釋。同一條影片已經嵌入喺呢個頁面,所以你可以確切咁睇到文字滾動喺即時係點樣,同埋每個設定點樣影響動畫。呢個項目嘅完整程式碼會自動載入喺文章下面,你可以喺程式碼部分列出嘅聯盟商店購買ESP32-S3 RGB LED矩陣模組。
呢個項目建立喺項目1(移動點同顏色控制)嘅基礎上,並使用NeoMatrix函式庫加入文字渲染同滾動功能。


ESP32-S3 RGB LED矩陣模組概覽
硬件喺全部六個項目入面都係一樣:一個帶Wi-Fi同藍牙嘅ESP32-S3微控制器、一個8×8 RGB LED矩陣(64粒可尋址RGB LED)、一個QMI8658C加速度計、USB端口,同埋可用嘅IO引腳。

- ESP32-S3 – 主要CPU,帶Wi-Fi/BLE,用於進階項目。
- 8×8 RGB矩陣 – 64粒RGB LED,用於圖示、文字同動畫。
- QMI8658C加速度計 – 喺之後嘅項目中用於傾斜同方向感應。
- USB端口 – 用於供電同透過Arduino IDE編程。
- 外露引腳 – 令你可以好似普通ESP32咁用呢塊板做其他IO。
- Boot / Reset按鈕 – 用於韌體上傳同重新啟動草圖。
喺項目2入面,我哋主要集中喺矩陣同NeoMatrix文字功能。加速度計暫時未用到,但同一塊板之後都會處理所有互動同遊戲項目。

影片入面涵蓋嘅項目(時間戳)
同呢篇文章配合嘅影片涵蓋全部六個項目。大約時間戳如下:
- 00:00 – 介紹
- 02:01 – 安裝ESP32板
- 03:32 – 安裝函式庫
- 05:32 – 項目1:移動點
- 11:11 – 項目2:文字滾動
- 12:59 – 項目3:HTTP文字
- 16:41 – 項目4:傾斜點
- 18:55 – 項目5:向上箭嘴
- 20:02 – 項目6:目標遊戲
建議你一邊睇呢篇文章,一邊睇影片。影片會展示文字喺LED矩陣上即時滾動,並逐步講解喺Arduino IDE入面嘅所有步驟。
喺Arduino IDE入面安裝ESP32板
喺執行文字滾動程式碼之前,確保你嘅Arduino IDE已經安裝咗ESP32支援:
- 開啟
File > Preferences,將ESP32板嘅URL加入「Additional Boards Manager URLs」。 - 去
Tools > Board > Boards Manager…,搜尋ESP32,然後安裝官方ESP32套件。 - 從
Tools > Board選擇你嘅ESP32-S3 RGB矩陣板。 - 透過USB連接模組,然後喺
Tools > Port下面選擇正確嘅COM/串行端口。
如果板類型或者端口唔正確,草圖就唔會上傳到。
安裝NeoMatrix同所需函式庫
文字滾動係用Adafruit NeoMatrix同佢嘅依賴函式庫實現嘅。喺影片入面,佢哋係透過Library Manager安裝嘅。
你需要:
Adafruit NeoMatrixAdafruit NeoPixelAdafruit GFX Library
- 開啟
Sketch > Include Library > Manage Libraries…。 - 搜尋
Adafruit NeoMatrix,然後撳Install。 - 系統提示時,允許佢安裝
Adafruit GFX同Adafruit NeoPixel作為依賴函式庫。
如果安裝成功,你應該會喺File > Examples > Adafruit NeoMatrix同File > Examples > Adafruit NeoPixel下面見到範例草圖。
項目2 – 程式碼設定(文字滾動)
完整嘅文字滾動草圖會自動載入喺網站上呢篇文章下面。呢度我哋只集中喺你大概想改嘅設定值:引腳、矩陣尺寸、亮度、文字字串、顏色、滾動速度,同埋可選嘅方向。
下面所有片段都係取自草圖頂部嘅設定部分,等你可以快速調整行為,而唔使掂到主要邏輯。
矩陣引腳同尺寸
同項目1一樣,RGB矩陣連接去GPIO 14,包含64粒LED(8×8)。確保呢兩行同你嘅模組匹配:
// 連接去8×8 RGB矩陣嘅引腳
const int MATRIX_PIN = 14; // 喺呢個模組上必須係14 // 矩陣尺寸(寬度同高度)
const int MATRIX_WIDTH = 8;
const int MATRIX_HEIGHT = 8;
如果你從NeoMatrix函式庫複製範例,佢可能用唔同嘅引腳或者尺寸;一定要改返做同呢塊板匹配。
文字嘅亮度
亮度通常用0到255之間嘅值控制,0係熄,255係最大亮度。一個中等嘅值通常已經夠:
// 整體矩陣亮度(0–255)
uint8_t matrixBrightness = 40; // 室內舒適亮度 // 喺
setup():
matrix.setBrightness(matrixBrightness);
如果你喺光猛環境或者短時間用塊面板,可以加大呢個值,但如果你近距離睇顯示屏,就唔好校得太高。
要滾動嘅文字
實際訊息係以字串形式儲存。喺影片入面,例子文字係Robojax。你可以改成任何你鍾意嘅短標籤或者訊息:
// 要喺8×8矩陣上滾動嘅文字 const char scrollText[] = "Robojax";
// 改成你嘅訊息
記住呢個只係一個8×8矩陣,所以好長嘅訊息會滾動得耐啲,而且可能難啲睇。
文字顏色(RGB數值)
滾動文字嘅顏色係由紅、綠、藍三個部分(0–255)設定。例如,純紅色係(255, 0, 0),純綠色係(0, 255, 0),純藍色係(0, 0, 255)。喺程式入面你會見到類似咁嘅嘢:
// 文字顏色(R, G, B) uint8_t textRed = 255; // 紅色部分 uint8_t textGreen = 0; // 綠色部分 uint8_t textBlue = 0; // 藍色部分
要改顏色:
- 黃色:
textRed = 255; textGreen = 255; textBlue = 0; - 青色:
textRed = 0; textGreen = 255; textBlue = 255; - 白色:
textRed = 255; textGreen = 255; textBlue = 255;
影片入面仲示範咗用網上顏色揀選器嚟搵RGB數值,然後輸入落程式度。
滾動速度(幀之間嘅延遲)
滾動速度係由每次更新步驟之間嘅延遲值(以毫秒計)控制。數值越細,文字郁得越快;數值越大,就慢啲。喺程式入面,你應該會搵到一個變數好似:
// 滾動步驟之間嘅延遲(以毫秒計) int scrollDelayMs = 50;
// 越細越快,越大越慢
例子:
scrollDelayMs = 20;→ 快速滾動。scrollDelayMs = 50;→ 中等速度(同影片差唔多)。scrollDelayMs = 100;或者更多 → 慢速,容易閱讀嘅滾動。
喺loop()入面,呢個值會喺每次重新繪製文字位置之後用喺delay(scrollDelayMs);嘅呼叫度。
滾動方向(可選)
喺「基本文字滾動」項目入面,我哋通常向左滾動,但定義一個符號方向變數會有用,等你可以之後試其他方向(左、右、上、下)。
一個常見嘅模式係:
// 滾動方向選擇器 // 0 = 左,1 = 右,2 = 上,3 = 下
int scrollDirection = 0; // 預設:向左滾動
主循環跟住檢查scrollDirection,然後將文字移向所選方向。對於項目2,你可以將佢設為0(左),但如果你之後擴展程式,你可以加條件好似:
if (scrollDirection == 0) {
// 將文字移向左
} else if (scrollDirection == 1) {
// 將文字移向右
} else if (scrollDirection == 2) {
// 將文字移向上
} else if (scrollDirection == 3) {
// 將文字移向下
}
呢篇文章只記錄設定。完整實現係喺文章下面載入嘅程式碼入面。
總結
項目2將你嘅ESP32-S3 RGB LED矩陣變成一個簡單但搶眼嘅文字顯示屏。只要編輯程式碼頂部嘅幾個變數,你就可以快速更改:
- 顯示邊個訊息(
scrollText)。 - 文字嘅顏色(
textRed、textGreen、textBlue)。 - 矩陣嘅亮度(
matrixBrightness)。 - 滾動嘅速度(
scrollDelayMs)。 - 滾動嘅方向(
scrollDirection,如果你選擇用佢)。
呢個項目嘅完整程式喺呢篇文章下面有得睇(由網站自動載入)。想睇詳細嘅逐步設定同埋滾動文字嘅實際示範,記得睇返影片嘅相應部分。如果你鍾意呢個項目,想自己整一個,你都可以喺程式下面列出嘅聯盟連結度購買ESP32-S3 RGB LED矩陣模組。
This tutorial is part of: ESP32-S3 RGB LED 点阵
- ESP32-S3 RGB LED矩陣項目1-基本點
- ESP32-S3 RGB LED矩陣項目3 - 手機文字
- ESP32-S3 RGB LED矩陣項目 4 - 傾斜點
- ESP32-S3 RGB LED矩陣項目5 - 箭嘴永遠向上
- ESP32-S3 RGB LED矩陣項目6 - Cible遊戲
- ESP32-S3 RGB LED矩陣 Wi-Fi + NTP時鐘項目 -1 基本時鐘
- ESP32-S3 RGB LED矩陣網絡時鐘項目 - 2個時鐘多色時間及日期顯示
- ESP32-S3 RGB LED矩陣互聯網時鐘項目 - 3種夜間顏色連日期
- ESP32-S3 RGB LED矩陣網絡時鐘項目 - 5 彩虹色
- ESP32-S3 RGB LED矩陣網絡時鐘項目 - 4種隨機顏色
- 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();
}
}
你可能需要嘅嘢
-
亞馬遜
-
易贝
-
阿里巴巴速卖通Purchase ESP32-S3 RGB Matrix from AliExpresss.click.aliexpress.com
-
阿里巴巴速卖通Purchase ESP32-S3 RGB Matrix from AliExpress (2)s.click.aliexpress.com
資源與參考資料
-
內部🎨 Color picker Toolrobojax.com
文件📁
Fritzing 文件
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB