如何编程实现Adafruit Trinket 3V与ST7789显示屏的SPI通信?
实现Adafruit Trinket 3V与ST7789显示屏的SPI通信及SD卡图像显示
一、补全必要引脚连接
你目前的SPI连接还缺两个核心引脚,必须补上才能正常通信:
- ST7789的SCK(时钟引脚):接Trinket 3V的#2引脚(SPI时钟线)
- ST7789的CS(片选引脚):选Trinket空闲引脚(比如#3),用于触发显示屏接收数据
- ST7789的DC(数据/命令引脚):选另一个空闲引脚(比如#4),区分发送的是指令还是图像数据
二、PlatformIO配置文件(platformio.ini)
确保配置正确指定开发板和依赖库:
[env:adafruit_trinket3] platform = atmelavr board = adafruit_trinket3 framework = arduino lib_deps = adafruit/Adafruit ST7735 and ST7789 Library@^1.10.0 adafruit/Adafruit SD Library@^2.5.0 adafruit/Adafruit GFX Library@^1.11.5
三、基础通信测试代码
先验证显示屏能正常初始化,再扩展SD卡功能:
#include <Adafruit_GFX.h> #include <Adafruit_ST7789.h> #include <SPI.h> // 按实际连接修改引脚定义 #define TFT_CS 3 // Trinket#3 #define TFT_DC 4 // Trinket#4 #define TFT_RST 5 // 你已连接的复位引脚 // 初始化显示屏对象 Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); void setup() { Serial.begin(9600); while (!Serial); // 调试用,等待串口连接 // 初始化显示屏(按你的屏幕分辨率调整参数) tft.init(240, 240); tft.setRotation(3); // 按需调整显示方向 // 测试显示内容 tft.fillScreen(ST77XX_BLACK); tft.setTextColor(ST77XX_WHITE); tft.setTextSize(2); tft.setCursor(10, 10); tft.println("ST7789 Test OK!"); } void loop() { // 后续添加SD卡逻辑 }
四、SD卡图像显示实现
- 提前将SD卡格式化为FAT32,图像保存为BMP格式(ST7789库原生支持),注意图像尺寸不能超过Trinket的内存上限(建议用160x120或更小的图)
- 扩展代码实现SD卡读取与图像显示:
#include <Adafruit_GFX.h> #include <Adafruit_ST7789.h> #include <SPI.h> #include <SD.h> #define TFT_CS 3 #define TFT_DC 4 #define TFT_RST 5 #define SD_CS 6 // SD卡片选引脚(Trinket空闲引脚) Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); void setup() { Serial.begin(9600); while (!Serial); // 初始化显示屏 tft.init(240, 240); tft.setRotation(3); tft.fillScreen(ST77XX_BLACK); // 初始化SD卡 if (!SD.begin(SD_CS)) { tft.setCursor(10, 10); tft.println("SD Init Fail!"); while (1); // 初始化失败则停止运行 } // 读取并显示SD卡中的BMP图像 if (!tft.drawBMP("/test.bmp", 0, 0)) { tft.setCursor(10, 40); tft.println("Image Not Found!"); } } void loop() { // 无需循环操作 }
五、关键注意事项
- Trinket 3V RAM仅512字节,无法直接加载大尺寸图像,建议用分块读取方式(可参考库的进阶示例)
- SPI引脚必须严格对应:SCK→Trinket#2,MOSI(SI)→Trinket#1,MISO(SO)→Trinket#0
- 检查焊接连接,避免虚焊导致通信中断
内容的提问来源于stack exchange,提问作者Emily Kelley
相关产品推荐
相关产品推荐

