前些日子忙碌的不要不要的,平时下班回家也没精力折腾了,周末在家整理电子垃圾的时候,突然翻出来一个很久以前使用的RGB 8x8 的点阵,手里正好还有ESP32-C5 这块板子,结合IO底板那是非常的适合去点亮我的RGB,让它不再蒙尘,再现世间~

于是乎,说干就干,迅速找到一些杜邦线,然后就开始硬件连连看了~
  
接线方式文本版如下:
8x8 RGB 点阵 ESP32-C5
VCC 3V3
GND GND
CLK 23/SCLK
CE 3
MOSI 24/MO
然后创建sketch:
- Arduino-cli sketch new matrix_8x8
- cd matrix_8x8/
- vim matrix_8x8.ino
复制代码
添加代码:
- #include <SPI.h>
-
- // 定义点阵的引脚
- #define CLK_PIN 23 // 时钟线引脚
- #define MOSI_PIN 24 // 数据线引脚
- #define CS_PIN 3 // 片选线引脚
-
- static uint8_t data[4] = {0x0, 0x0,0x0,0x0};
-
- // 定义大心图案的数组
- void heartbig()
- {
- int j;
- static uint8_t heart[8] = {0x00, 0x66, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};
-
- for ( j = 0; j < 8; j++)
- {
- // data[0] = ~heart[j];
- data[0] = ~heart[j];
- // data[2] = heart[j]; //蓝色
- data[2] = 0xFF;
- data[1] = 0xFF;
- data[3] = 0x01 << j ;
- digitalWrite(CS_PIN, LOW);
- delayMicroseconds(1); // 确保片选信号稳定
- SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
- SPI.transfer(data[0]);
- SPI.transfer(data[2]);
- SPI.transfer(data[1]);
- SPI.transfer(data[3]);
- SPI.endTransaction();
- digitalWrite(CS_PIN, HIGH);
- delayMicroseconds(10); // 确保数据传输完成
- }
- };
-
- void heartsmall()
- {
- int j;
- static uint8_t heart[8] = {0x00, 0x00, 0x24, 0x7E, 0x7E, 0x3C, 0x18, 0x00};
- for ( j = 0; j < 8; j++)
- {
- data[0] = ~heart[j];
- data[2] = 0xFF;
- data[1] = 0xFF;
- data[3] = 0x01 << j ;
- digitalWrite(CS_PIN, LOW);
- delayMicroseconds(1);
- SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
- SPI.transfer(data[0]);
- SPI.transfer(data[2]);
- SPI.transfer(data[1]);
- SPI.transfer(data[3]);
- SPI.endTransaction();
- digitalWrite(CS_PIN, HIGH);
- delayMicroseconds(10);
- }
- };
-
- void matrixoff()
- {
- int j;
- static uint8_t heart[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
- for ( j = 0; j < 8; j++)
- {
- data[0] = ~heart[j];
- data[2] = 0xFF;
- data[1] = 0xFF;
- data[3] = 0x01 << j ;
- digitalWrite(CS_PIN, LOW);
- delayMicroseconds(1);
- SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
- SPI.transfer(data[0]);
- SPI.transfer(data[2]);
- SPI.transfer(data[1]);
- SPI.transfer(data[3]);
- SPI.endTransaction();
- digitalWrite(CS_PIN, HIGH);
- delayMicroseconds(2);
- }
-
- };
-
-
- void setup() {
- Serial.begin(9600); // 初始化串口通信
- Serial.println("Starting...");
- // 初始化 SPI
- SPI.begin(CLK_PIN, -1, MOSI_PIN, CS_PIN); // 初始化SPI,指定MISO为-1,因为不使用
- // 初始化片选引脚
- pinMode(CS_PIN, OUTPUT);
- digitalWrite(CS_PIN, HIGH); // 片选默认为高电平,不选中
- }
-
- void loop() {
- int m = 10;
- for (m=1000; m>0; m--){
- heartbig();
- };
- delay(100);
- matrixoff();
- for (m=1000; m>0; m--){
- heartsmall();
- };
- delay(100);
- matrixoff();
- }
-
复制代码
保存退出后,直接编译上传:
- arduino-cli compile -b esp32:esp32:esp32c5:CDCOnBoot=cdc -p /dev/ttyACM0 --upload
复制代码
上传效果:
看视频吧~哈哈
|