22浏览
查看: 22|回复: 0

[ESP8266/ESP32] ESP32-C5 连载系列之我心永恒哈哈

[复制链接]
前些日子忙碌的不要不要的,平时下班回家也没精力折腾了,周末在家整理电子垃圾的时候,突然翻出来一个很久以前使用的RGB 8x8 的点阵,手里正好还有ESP32-C5 这块板子,结合IO底板那是非常的适合去点亮我的RGB,让它不再蒙尘,再现世间~
ESP32-C5 连载系列之我心永恒哈哈图1
于是乎,说干就干,迅速找到一些杜邦线,然后就开始硬件连连看了~

ESP32-C5 连载系列之我心永恒哈哈图2ESP32-C5 连载系列之我心永恒哈哈图3ESP32-C5 连载系列之我心永恒哈哈图4

接线方式文本版如下:
8x8 RGB 点阵          ESP32-C5
VCC                           3V3
GND                          GND
CLK                            23/SCLK
CE                              3
MOSI                         24/MO

然后创建sketch:
  1. Arduino-cli sketch new matrix_8x8
  2. cd matrix_8x8/
  3. vim matrix_8x8.ino
复制代码
添加代码:
  1. #include <SPI.h>
  2. // 定义点阵的引脚
  3. #define CLK_PIN 23 // 时钟线引脚
  4. #define MOSI_PIN 24 // 数据线引脚
  5. #define CS_PIN 3 // 片选线引脚
  6. static uint8_t data[4] = {0x0, 0x0,0x0,0x0};
  7. // 定义大心图案的数组
  8. void heartbig()
  9. {
  10.   int j;
  11.   static uint8_t heart[8] = {0x00, 0x66, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};
  12.   for ( j = 0; j < 8; j++)
  13.   {
  14.     // data[0] = ~heart[j];
  15.     data[0] = ~heart[j];
  16.     // data[2] = heart[j]; //蓝色
  17.     data[2] = 0xFF;
  18.     data[1] = 0xFF;
  19.     data[3] = 0x01 << j ;
  20.     digitalWrite(CS_PIN, LOW);
  21.     delayMicroseconds(1); // 确保片选信号稳定
  22.     SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
  23.     SPI.transfer(data[0]);
  24.     SPI.transfer(data[2]);
  25.     SPI.transfer(data[1]);
  26.     SPI.transfer(data[3]);
  27.     SPI.endTransaction();
  28.     digitalWrite(CS_PIN, HIGH);
  29.     delayMicroseconds(10); // 确保数据传输完成
  30.   }
  31. };
  32. void heartsmall()
  33. {
  34.   int j;
  35.   static uint8_t heart[8] = {0x00, 0x00, 0x24, 0x7E, 0x7E, 0x3C, 0x18, 0x00};
  36.   for ( j = 0; j < 8; j++)
  37.   {
  38.     data[0] = ~heart[j];
  39.     data[2] = 0xFF;
  40.     data[1] = 0xFF;
  41.     data[3] = 0x01 << j ;
  42.     digitalWrite(CS_PIN, LOW);
  43.         delayMicroseconds(1);
  44.         SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
  45.     SPI.transfer(data[0]);
  46.     SPI.transfer(data[2]);
  47.     SPI.transfer(data[1]);
  48.     SPI.transfer(data[3]);
  49.         SPI.endTransaction();
  50.     digitalWrite(CS_PIN, HIGH);
  51.         delayMicroseconds(10);
  52.   }
  53. };
  54. void matrixoff()
  55. {
  56.   int j;
  57.   static uint8_t heart[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  58.   for ( j = 0; j < 8; j++)
  59.   {
  60.     data[0] = ~heart[j];
  61.     data[2] = 0xFF;
  62.     data[1] = 0xFF;
  63.     data[3] = 0x01 << j ;
  64.     digitalWrite(CS_PIN, LOW);
  65.         delayMicroseconds(1);
  66.         SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
  67.     SPI.transfer(data[0]);
  68.     SPI.transfer(data[2]);
  69.     SPI.transfer(data[1]);
  70.     SPI.transfer(data[3]);
  71.         SPI.endTransaction();
  72.     digitalWrite(CS_PIN, HIGH);
  73.         delayMicroseconds(2);
  74.   }
  75. };
  76. void setup() {
  77.     Serial.begin(9600); // 初始化串口通信
  78.     Serial.println("Starting...");
  79.     // 初始化 SPI
  80.     SPI.begin(CLK_PIN, -1, MOSI_PIN, CS_PIN); // 初始化SPI,指定MISO为-1,因为不使用
  81.     // 初始化片选引脚
  82.     pinMode(CS_PIN, OUTPUT);
  83.     digitalWrite(CS_PIN, HIGH); // 片选默认为高电平,不选中
  84. }
  85. void loop() {
  86.         int m = 10;
  87.         for (m=1000; m>0; m--){
  88.                 heartbig();
  89.         };
  90.         delay(100);
  91.         matrixoff();
  92.         for (m=1000; m>0; m--){
  93.                 heartsmall();
  94.         };
  95.         delay(100);
  96.         matrixoff();
  97. }
复制代码
保存退出后,直接编译上传:
  1. arduino-cli compile -b esp32:esp32:esp32c5:CDCOnBoot=cdc -p /dev/ttyACM0 --upload
复制代码
上传效果:
看视频吧~哈哈

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail