This tutorial is part of: ESP32-S3 RGB LED Matrix
โปรเจ็กต์เจ๋งๆ ที่สร้างได้ทั้งเพื่อความสนุกและการใช้งานจริง โดยใช้โมดูล ESP32-S3 RGB Matrix ลิงก์ไปยังวิดีโออื่นๆ อยู่ด้านล่างบทความนี้
โปรเจกต์ ESP32-S3 RGB LED Matrix 2 - ข้อความเลื่อน
โปรเจกต์ 2 – การเลื่อนข้อความบน ESP32-S3 RGB LED Matrix
ในโปรเจกต์นี้ เราจะเปลี่ยน ESP32-S3 RGB LED Matrix ให้เป็นป้ายข้อความขนาดเล็ก ข้อความสั้นๆ (เช่น Robojax) จะเลื่อนผ่านจอแสดงผล RGB ขนาด 8×8 และคุณสามารถเปลี่ยนข้อความ สี ความสว่าง และความเร็วในการเลื่อนได้โดยตรงในโค้ด สิ่งนี้มีประโยชน์มากสำหรับการแจ้งเตือนง่ายๆ ป้ายชื่อ หรือข้อความสถานะขนาดเล็ก
โปรเจกต์ทั้งหกในชุดนี้ได้รับการสาธิตและอธิบายในวิดีโอ YouTube เดียว วิดีโอเดียวกันนี้ถูกฝังอยู่ในหน้านี้ เพื่อให้คุณเห็นได้อย่างชัดเจนว่าการเลื่อนข้อความมีลักษณะอย่างไรแบบเรียลไทม์ และการตั้งค่าแต่ละอย่างส่งผลต่อแอนิเมชันอย่างไร โค้ดที่สมบูรณ์สำหรับโปรเจกต์นี้จะถูกโหลดโดยอัตโนมัติด้านล่างบทความ และคุณสามารถซื้อโมดูล ESP32-S3 RGB LED Matrix ได้จากร้านค้าในเครือที่ระบุไว้ใต้ส่วนโค้ด
โปรเจกต์นี้ต่อยอดจากพื้นฐานของโปรเจกต์ 1 (จุดเคลื่อนที่และการควบคุมสี) และเพิ่มการแสดงผลข้อความและการเลื่อนโดยใช้ไลบรารี NeoMatrix


ภาพรวมโมดูล ESP32-S3 RGB LED Matrix
ฮาร์ดแวร์จะเหมือนกันในทั้งหกโปรเจกต์: ไมโครคอนโทรลเลอร์ ESP32-S3 พร้อม Wi-Fi และบลูทูธ, เมทริกซ์ LED RGB ขนาด 8×8 (LED RGB ที่ระบุแอดเดรสได้ 64 ดวง), มาตรวัดความเร่ง QMI8658C, พอร์ต USB และพิน IO ที่เข้าถึงได้

- ESP32-S3 – CPU หลักพร้อม Wi-Fi/BLE สำหรับโปรเจกต์ขั้นสูง
- เมทริกซ์ RGB ขนาด 8×8 – LED RGB 64 ดวงสำหรับไอคอน ข้อความ และแอนิเมชัน
- มาตรวัดความเร่ง 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 matrix และอธิบายขั้นตอนทั้งหมดใน Arduino IDE
การติดตั้งบอร์ด ESP32 ใน Arduino IDE
ก่อนรันโค้ดการเลื่อนข้อความ ตรวจสอบให้แน่ใจว่าได้ติดตั้งการรองรับ ESP32 ใน Arduino IDE ของคุณแล้ว:
- เปิด
File > Preferencesและเพิ่ม URL ของบอร์ด ESP32 ใน “Additional Boards Manager URLs” - ไปที่
Tools > Board > Boards Manager…ค้นหาESP32และติดตั้งแพ็กเกจ ESP32 อย่างเป็นทางการ - เลือกบอร์ด ESP32-S3 RGB Matrix ของคุณจาก
Tools > Board - เชื่อมต่อโมดูลผ่าน USB และเลือกพอร์ต COM/ซีเรียลที่ถูกต้องภายใต้
Tools > Port
หากประเภทบอร์ดหรือพอร์ตไม่ถูกต้อง สเก็ตช์จะไม่สามารถอัปโหลดได้
การติดตั้ง NeoMatrix และไลบรารีที่จำเป็น
การเลื่อนข้อความถูก implement โดยใช้ Adafruit NeoMatrix และ dependencies ของมัน ในวิดีโอ มีการติดตั้งผ่าน Library Manager
คุณจะต้องมี:
Adafruit NeoMatrixAdafruit NeoPixelAdafruit GFX Library
- เปิด
Sketch > Include Library > Manage Libraries… - ค้นหา
Adafruit NeoMatrixและคลิก Install - เมื่อได้รับแจ้ง อนุญาตให้ติดตั้ง
Adafruit GFXและAdafruit NeoPixelเป็น dependencies
หากการติดตั้งสำเร็จ คุณควรเห็นตัวอย่างสเก็ตช์ภายใต้ File > Examples > Adafruit NeoMatrix และ File > Examples > Adafruit NeoPixel
โปรเจกต์ 2 – การตั้งค่าโค้ด (การเลื่อนข้อความ)
สเก็ตช์การเลื่อนข้อความแบบเต็มจะถูกโหลดโดยอัตโนมัติด้านล่างบทความนี้บนเว็บไซต์ ที่นี่เราจะเน้นเฉพาะค่าการกำหนดค่าที่คุณอาจต้องการแก้ไข: พิน ขนาดเมทริกซ์ ความสว่าง สตริงข้อความ สี ความเร็วในการเลื่อน และทิศทางเสริม
ตัวอย่างโค้ดทั้งหมดด้านล่างนำมาจากส่วนการกำหนดค่าที่ด้านบนของสเก็ตช์ เพื่อให้คุณสามารถปรับเปลี่ยนพฤติกรรมได้อย่างรวดเร็วโดยไม่ต้องแตะตรรกะหลัก
พินและขนาดเมทริกซ์
เช่นเดียวกับโปรเจกต์ 1 เมทริกซ์ RGB เชื่อมต่อกับ GPIO 14 และมี LED 64 ดวง (8×8) ตรวจสอบให้แน่ใจว่าสองบรรทัดนี้ตรงกับโมดูลของคุณ:
// พินที่เชื่อมต่อกับเมทริกซ์ RGB ขนาด 8×8
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 Matrix ของคุณให้เป็นจอแสดงข้อความที่เรียบง่ายแต่สะดุดตา โดยการแก้ไขตัวแปรเพียงไม่กี่ตัวที่ด้านบนของโค้ด คุณสามารถเปลี่ยนได้อย่างรวดเร็ว:
- ข้อความที่แสดง (
scrollText) - สีของข้อความ (
textRed,textGreen,textBlue) - ความสว่างของเมทริกซ์ (
matrixBrightness) - ความเร็วในการเลื่อน (
scrollDelayMs) - ทิศทางการเลื่อน (
scrollDirectionหากคุณเลือกใช้)
โค้ดเต็มสำหรับโปรเจกต์นี้มีอยู่ด้านล่างบทความนี้ (โหลดโดยอัตโนมัติโดยเว็บไซต์) สำหรับการกำหนดค่าแบบทีละขั้นตอนโดยละเอียดและการสาธิตสดของข้อความเลื่อน โปรดดูวิดีโอในส่วนที่เกี่ยวข้อง หากคุณชอบโปรเจกต์นี้และต้องการสร้างด้วยตัวเอง คุณสามารถซื้อโมดูล ESP32-S3 RGB LED Matrix จากลิงก์พันธมิตรที่ระบุไว้ใต้โค้ดได้
This tutorial is part of: ESP32-S3 RGB LED Matrix
- โปรเจกต์ ESP32-S3 RGB LED Matrix 1- จุดพื้นฐาน
- โปรเจกต์ ESP32-S3 RGB LED Matrix 3 - ข้อความจากโทรศัพท์มือถือ
- โปรเจกต์ ESP32-S3 RGB LED Matrix 4 - จุดเอียง
- โปรเจกต์ ESP32-S3 RGB LED Matrix 5 - ลูกศรชี้ขึ้นเสมอ
- โปรเจกต์ ESP32-S3 RGB LED Matrix 6 - เกม Cible
- โปรเจกต์นาฬิกา ESP32-S3 RGB LED Matrix Wi-Fi + NTP Time Clock -1 นาฬิกาพื้นฐาน
- โปรเจกต์นาฬิกาอินเทอร์เน็ต RGB LED Matrix ESP32-S3 - จอแสดงเวลาและวันที่หลากสี 2 นาฬิกา
- โปรเจกต์นาฬิกาอินเทอร์เน็ต RGB LED Matrix ESP32-S3 - 3 สีกลางคืนพร้อมวันที่
- โครงการนาฬิกาอินเทอร์เน็ตจอ LED Matrix RGB ESP32-S3 - 5 สีรุ้ง
- โปรเจกต์นาฬิกาอินเทอร์เน็ต RGB LED Matrix ESP32-S3 - 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