搜索代码

ESP32-S3 RGB LED矩阵项目 1- 基本点阵

ESP32-S3 RGB LED矩阵项目 1- 基本点阵

项目1 - 在ESP32-S3 RGB LED矩阵上移动点和心形动画

在这个项目中,我们首先在 ESP32-S3 RGB LED 矩阵上实现最简单的动画:一个单点在 8×8 RGB 显示屏上移动。除此之外,我们还添加了一个小心形动画,这样当电源打开时,你可以将开发板变成一个小型装饰显示屏。这是一个很好的第一步,可以让你对矩阵上控制单个像素、颜色和动画速度变得更加熟悉。

本系列的六个项目在一个视频中进行了演示和讲解。该视频嵌入在此页面上,您可以观看完整的逐步讲解和移动点及心形动画的实时演示。该项目的完整代码自动加载在文章下方,您可以在代码部分列出的附属商店购买ESP32-S3 RGB LED矩阵模块。

如果您刚开始使用这个开发板,该项目是一个完美的方式来:

  • 检查您的ESP32-S3开发板和USB连接是否正常。
  • 确认8×8 RGB矩阵已连接到正确的引脚。
  • 实验基本动画的时间、颜色和亮度。

ESP32-S3 RGB LED矩阵模块概述

该项目使用的电路板基于ESP32-S3微控制器,结合了一个8×8 RGB LED矩阵(64个可单独寻址的RGB LED),后面有一个QMI8658C运动传感器,以及一个用于供电和编程的USB端口。:contentReference[oaicite:0]{index=0}

该模块的主要特征:

  • ESP32-S3支持Wi-Fi和蓝牙的双核微控制器。
  • 8×8 RGB LED矩阵电路板前面有64个RGB LED,适合用于图标、文本和小型游戏。
  • QMI8658C 加速度计 / 运动传感器在背面,因此您可以检测倾斜、移动和方向,以用于互动项目。
  • USB接口对于编程和电力来说。
  • 可访问的别针在边缘部分,这样电路板仍然可以像普通ESP32那样用于其他IO项目。
  • 启动和重启按钮用于进入编程模式和重新启动您的草图。

在这个第一个项目中,我们只使用了电路板的 LED 矩阵部分,但相同的硬件足够强大,可以运行文本显示、网络控制的消息、运动控制的游戏等,这些都在本系列的其他项目中进行了介绍。

视频中涵盖的项目(时间戳)

所有六个项目共享同一个YouTube视频。大致的时间戳是:

  • 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:目标游戏

为了更好地理解,强烈建议您在阅读本文时观看视频。视频展示了矩阵上点和心形的实时行为,以及Arduino IDE中的所有步骤。

在Arduino IDE中安装ESP32开发板

在将任何代码上传到ESP32-S3之前,您必须在Arduino IDE中安装ESP32开发板支持包。在视频中,这部分内容在“安装开发板”部分演示。

一般步骤:

  1. 打开Arduino IDE并前往File > Preferences.
  2. 在“附加的板管理器 URL”字段中,添加官方 ESP32 板的 URL。
  3. 打开Tools > Board > Boards Manager…搜索ESP32,并为ESP32开发板安装这个软件包。
  4. 安装完成后,前往Tools > Board并选择适合您的ESP32-S3 RGB矩阵模块的正确板卡条目。
  5. 通过 USB 连接电路板,并在下方选择其串口Tools > Port.

如果没有选择正确的板子和端口,即使你的代码是正确的,你的草图也无法上传。

安装 NeoMatrix 和必需的库

LED矩阵内部使用Adafruit NeoPixel驱动,为了更方便地进行二维绘图,我们使用Adafruit NeoMatrix库。安装NeoMatrix将自动引入依赖项。

NeoMatrix 和依赖项

从库管理器安装以下内容:

  • Adafruit NeoMatrix
  • Adafruit NeoPixel
  • Adafruit GFX Library

在库管理器中:

  1. 开放Sketch > Include Library > Manage Libraries….
  2. 搜索Adafruit NeoMatrix并点击安装.
  3. 允许IDE安装所有建议的依赖项(Adafruit GFX和Adafruit NeoPixel)。

QMI8658C运动传感器库(用于后续项目)

项目 1 并不直接使用加速度计,但现在安装运动传感器库是个好主意,因为在项目 4、5 和 6 中将需要它。

来自图书馆管理员:

  1. 根据作者名称搜索QMI8658库。
  2. 安装该库,使其显示在File > Examples进行快速测试。

项目 1 - 代码设置(移动点和心形)

本文章下方的网页上自动加载了运行项目1的完整草图。这里我们只关注您可能会更改的关键设置:引脚、像素数量、亮度、颜色和动画速度。对于心形动画,我们还展示了如何控制颜色以及心形是实心还是轮廓。

LED引脚和像素数量

在此模块上,8×8 RGB 矩阵连接到 ESP32-S3 的 GPIO 14。像素总数为 64(8 × 8)。在你的代码中,你应该看到类似的内容:

 
// Pin connected to the 8×8 RGB matrix 
const int MATRIX_PIN = 14;
 // must be 14 on this module 
// Total number of LEDs (8 × 8 matrix) 
const int NUMPIXELS = 64; // change only if you use a different matrix size 

如果你不小心离开NUMPIXELS在16(来自原始的NeoPixel示例)时,只有矩阵的四分之一将被使用,动画不会填满整个8×8屏幕。

颜色顺序和LED类型

不同的LED条和矩阵可能使用不同的颜色顺序(例如,GRB而不是RGB)。该板上的矩阵期待RGB顺序。在NeoPixel或NeoMatrix构造函数中,确保颜色类型设置正确:


 // Example for a NeoPixel-style object: 
Adafruit_NeoPixel pixels( NUMPIXELS, MATRIX_PIN, NEO_RGB + NEO_KHZ800 // make sure this matches the matrix color order ); 

如果您发现显示器上的红色和绿色互换,请首先检查这一行并纠正颜色顺序。

动画速度(步骤之间的延迟)

移动点的速度通常由一个简单的毫秒延迟值控制。较小的延迟意味着更快的移动;较大的延迟意味着更慢的移动。寻找一个类似于的变量:

 
// Delay between dot moves (in milliseconds)
 int dotDelayMs = 50; // 50 ms is fairly fast 

典型调整:

  • 设置dotDelayMs = 20;对于一个快速移动的点。
  • 设置dotDelayMs = 100;或更高以获得缓慢、平静的动画。

loop()功能,这个值通常被传递给delay(dotDelayMs);每次帧更新后。

点的颜色和亮度

移动点的RGB颜色由范围为0-255的三个值控制(红色、绿色、蓝色)。例如:

 
// Dot color (R, G, B) from 0–255 uint8_t dotRed = 255; // full red 
uint8_t dotGreen = 0; // no green 
uint8_t dotBlue = 0; // no blue 

这将产生一个明亮的红点。一些有用的组合:

  • 纯红色:(255, 0, 0)
  • 纯绿色:(0, 255, 0)
  • 纯蓝色:(0, 0, 255)
  • 黄色:(255, 255, 0)
  • 白色:(255, 255, 255)

整体亮度通常由单独的亮度功能控制:

 
// Overall matrix brightness (0–255) 
uint8_t matrixBrightness = 40; // keep it low to avoid too much glare // In setup(): matrix.setBrightness(matrixBrightness); 

一个大约的值30–60通常适合室内使用。

心形设置

除了移动的点之外,您还可以在电路板首次启动时在矩阵上显示一个小心形。本文的示例代码(如下所示)包含类似的设置:

 
// Heart color (solid heart) 
uint8_t heartRed = 255; 
uint8_t heartGreen = 0; 
uint8_t heartBlue = 0; 
// Optional: rainbow or outline modes 
bool showOutlinedHeart = false; 
// true = outline only 
bool useRainbowHeart = false; 
// true = cycle colors over time 

典型用法:

  • 设置showOutlinedHeart = false;useRainbowHeart = false;为一个红色实心心形。
  • 集合showOutlinedHeart = true;只显示心形轮廓。
  • 设置useRainbowHeart = true;不断循环心脏颜色,形成彩虹效果。

心形是通过文章下方代码中的NeoMatrix坐标函数绘制的。您只需更改上面的变量即可自定义其外观。

总结

项目1为您提供了一个简单但强大的起点,使用ESP32-S3 RGB LED矩阵:您将学习如何寻址所有64个像素,控制颜色,调整亮度和设置动画速度。您还将看到如何轻松地在同一硬件上从一个移动的点切换到静态或动画心形图案。

请确保观看嵌入在本页面上的完整视频,以获得移动点和心形动画的完整逐步演示,以及剩下的五个项目。完整的源代码可在本文下方获取,您可以通过在代码部分列出的关联链接购买该模块来支持未来的项目。

图像

ESP32 S3 Matrix  pin out
ESP32 S3 Matrix pin out
ESP32 S3 Matrix displaying green heart
ESP32 S3 Matrix displaying green heart
ESP32 S3 Matrix displaying rainbow heart
ESP32 S3 Matrix displaying rainbow heart
ESP32-S3 RGB Matrix- Mobile Phone Text
ESP32-S3 RGB Matrix- Mobile Phone Text
ESP32-S3-Mtrix - Alway Up
ESP32-S3-Mtrix - Alway Up
799-ESP32-S3 RGB LED Matrix Project 1 - Dot
语言: C++
/*
 * 项目 1:点 - ESP32-S3 RGB LED 矩阵(Waveshare)
 * 
 * 在屏幕上显示一个点并移动它
 * 
 * ▶️ 视频教程:
 * https://youtu.be/JKLuYrRcLMI
 * 
 * 📚⬇️ 资源与代码页面:
 * https://robojax.com/RJT829
 * 
 * QMI8658_RGB_2
 */
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // 适用于16 MHz Adafruit Trinket
#endif

 // Arduino上的哪个引脚连接到NeoPixels?
#define PIN        14 // 在Trinket或Gemma上,建议将此更改为1。

 // 有多少个 NeoPixel 连接到 Arduino 上?
#define NUMPIXELS 64 // 流行的NeoPixel环尺寸

 // 在设置NeoPixel库时,我们告诉它有多少个像素,
 // 以及使用哪个引脚发送信号。请注意,对于较旧的NeoPixel
 // 你可能需要更改第三个参数——请参见
 // strandtest 示例以获取有关可能值的更多信息。
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_RGB + NEO_KHZ800);

#define DELAYVAL 50 // 在像素之间暂停的时间(以毫秒为单位)

void setup() {
 // 这些线路专门用于支持Adafruit Trinket 5V 16 MHz。
 // 其他的董事会中,您可以移除这个部分(但留着不妨)。
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
 // 结束 Trinket 特定代码。

  pixels.begin(); // 初始化 NeoPixel 灯带对象(必需)
}

void loop() {
  pixels.clear(); // 将所有像素颜色设置为“关闭”

 // 一串中的第一个NeoPixel是#0,第二个是1,依此类推。
 // 到像素数量减去一。
  for(int i=0; i<NUMPIXELS; i++) { // 对于每个像素...

 // pixels.Color() 接受 RGB 值,从 0,0,0 到 255,255,255。
 // 这里我们使用一种适中的亮绿色:
    pixels.setPixelColor(i, pixels.Color(255, 255, 0));

    pixels.show(); // 将更新后的像素颜色发送到硬件。

    delay(DELAYVAL); // 在下一次循环经过之前暂停
    pixels.clear();
  }



}

|||您可能需要的东西

资源与参考

文件📁

Fritzing 文件