如何在TTGO-T-Display上使用SD卡:第二个SPI设备实战教程
想要为你的TTGO-T-Display开发板添加SD卡存储功能吗?本教程将手把手教你如何连接第二个SPI设备,让你的ESP32开发板拥有扩展存储能力!😊 无论你是物联网开发者还是嵌入式爱好者,掌握SD卡连接技术都能让你的项目存储更多数据、显示更多图片。## 为什么要在TTGO-T-Display上使用SD卡?TTGO-T-Display是一款集成了1.14英寸IPS显示屏的ESP32开发
如何在TTGO-T-Display上使用SD卡:第二个SPI设备实战教程
【免费下载链接】TTGO-T-Display 项目地址: https://gitcode.com/gh_mirrors/tt/TTGO-T-Display
想要为你的TTGO-T-Display开发板添加SD卡存储功能吗?本教程将手把手教你如何连接第二个SPI设备,让你的ESP32开发板拥有扩展存储能力!😊 无论你是物联网开发者还是嵌入式爱好者,掌握SD卡连接技术都能让你的项目存储更多数据、显示更多图片。
为什么要在TTGO-T-Display上使用SD卡?
TTGO-T-Display是一款集成了1.14英寸IPS显示屏的ESP32开发板,但板载存储有限。通过添加SD卡模块,你可以:
- 存储大量图片:用于显示界面、图标和动画
- 记录传感器数据:长期保存温湿度、GPS等数据
- 存储字体文件:使用更多样化的字体显示效果
- 离线存储网页内容:用于Web服务器项目
硬件准备与引脚连接
首先,让我们看看TTGO-T-Display的引脚分配。从引脚映射图可以看到,开发板已经为显示屏分配了主要SPI引脚:
核心SPI引脚分配(基于TFT_eSPI/User_Setups/Setup25_TTGO_T_Display.h):
- TFT_MOSI: GPIO 19
- TFT_SCLK: GPIO 18
- TFT_CS: GPIO 5
- TFT_DC: GPIO 16
- TFT_RST: GPIO 23
好消息是:ESP32支持多个SPI设备!我们可以使用VSPI(SPI3)接口连接SD卡模块。以下是推荐的连接方式:
| SD卡引脚 | TTGO-T-Display GPIO | 功能说明 |
|---|---|---|
| CS (SS) | GPIO 15 | SD卡片选引脚 |
| MOSI | GPIO 23 | 数据输出 |
| MISO | GPIO 19 | 数据输入 |
| SCK | GPIO 18 | 时钟信号 |
| VCC | 3.3V | 电源 |
| GND | GND | 地线 |
注意:GPIO 23在显示屏配置中用作TFT_RST,但我们可以重新分配或使用其他引脚。
软件配置:启用第二个SPI设备
1. 安装必要的库
确保你已经安装了以下Arduino库:
- TFT_eSPI:用于驱动显示屏
- SD:ESP32内置的SD卡库
- FS:文件系统支持
2. 修改TFT_eSPI配置
打开TFT_eSPI/User_Setup.h或TFT_eSPI/User_Setup_Select.h文件,确保选择了正确的配置:
// 在User_Setup_Select.h中取消注释以下行:
// #include <User_Setups/Setup25_TTGO_T_Display.h>
3. SD卡初始化代码
参考TFT_eSPI/examples/Generic/ESP32_SDcard_jpeg/ESP32_SDcard_jpeg.ino示例,以下是关键代码片段:
#include <SPI.h>
#include <FS.h>
#include <SD.h>
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup() {
Serial.begin(115200);
// 设置所有片选引脚为高电平,避免总线冲突
digitalWrite(22, HIGH); // 触摸控制器片选
digitalWrite(15, HIGH); // TFT屏幕片选
digitalWrite(5, HIGH); // SD卡片选(必须使用GPIO 5)
tft.begin();
// 初始化SD卡
if (!SD.begin()) {
Serial.println("SD卡挂载失败");
return;
}
uint8_t cardType = SD.cardType();
if (cardType == CARD_NONE) {
Serial.println("未检测到SD卡");
return;
}
Serial.print("SD卡类型: ");
// ... 继续初始化
}
实战演示:SD卡连接效果
上图展示了TTGO-T-Display成功连接SD卡模块的实际效果。屏幕上显示"SDCard Mount PASS"表示SD卡挂载成功,同时显示了SD卡容量和功能菜单。
常见问题解决
问题1:SD卡无法识别
- 检查电压:确保SD卡模块使用3.3V供电
- 检查连接:确认所有引脚连接正确
- 尝试格式化:将SD卡格式化为FAT32格式
问题2:SPI总线冲突
- 确保片选引脚正确管理:每个SPI设备必须有独立的CS引脚
- 添加上拉电阻:在MISO引脚上添加10kΩ上拉电阻
- 降低SPI频率:尝试降低SD卡的SPI时钟频率
问题3:文件系统错误
- 使用
SD.begin(5)指定CS引脚 - 检查文件路径:SD卡文件必须放在根目录
- 使用正确的文件打开模式
进阶应用:显示SD卡中的图片
TTGO-T-Display的强大之处在于可以显示SD卡中的图片。参考ESP32_SDcard_jpeg示例,你可以:
- 存储图片:将JPEG格式图片保存在SD卡根目录
- 解码显示:使用JPEGDecoder库解码并显示图片
- 动态更新:通过WiFi下载新图片到SD卡
// 显示SD卡中的JPEG图片
void drawSdJpeg(const char *filename, int xpos, int ypos) {
File jpegFile = SD.open(filename, FILE_READ);
if (!jpegFile) {
Serial.print("ERROR: File \"");
Serial.print(filename);
Serial.println("\" not found!");
return;
}
// 使用JPEGDecoder解码并显示
// ... 具体解码代码
}
性能优化技巧
1. 使用双缓冲区
对于动画或快速刷新,考虑使用双缓冲区技术:
// 创建Sprite作为缓冲区
TFT_eSprite buffer = TFT_eSprite(&tft);
buffer.createSprite(135, 240); // TTGO-T-Display分辨率
2. 优化SPI频率
在User_Setup.h中调整SPI频率:
#define SPI_FREQUENCY 40000000 // 显示屏SPI频率
// SD卡可以使用默认频率或稍低的频率
3. 合理管理内存
ESP32内存有限,注意:
- 分块读取大文件
- 及时关闭文件句柄
- 使用PROGMEM存储常量数据
项目实战:创建数据记录仪
结合SD卡功能,你可以创建一个完整的数据记录仪:
- 硬件连接:添加温湿度传感器(如DHT11/DHT22)
- 数据采集:定期读取传感器数据
- 存储到SD卡:以CSV格式保存数据
- 显示实时数据:在屏幕上显示当前读数
- 数据导出:通过USB或WiFi导出数据文件
上图展示了TTGO-T-Display的3D打印外壳设计,适合制作便携式数据记录设备。
总结与扩展
通过本教程,你已经掌握了在TTGO-T-Display上连接和使用SD卡的关键技术。记住这些要点:
✅ 硬件连接:正确连接SPI引脚,注意电源和地线
✅ 软件配置:正确初始化SD卡库和文件系统
✅ 冲突解决:管理好多个SPI设备的片选信号
✅ 性能优化:根据应用需求调整SPI频率和内存使用
下一步学习方向
-
探索更多示例:
- TFT_eSPI/examples/Smooth Fonts/SD_Card/ - 从SD卡加载平滑字体
- TFT_eSPI/examples/Sprite/ - 学习精灵和动画技术
-
深入学习文件系统:
- SPIFFS与SD卡的比较
- 文件系统性能优化
- 错误处理和恢复机制
-
项目扩展:
- 添加RTC模块记录时间戳
- 实现OTA固件更新
- 创建Web界面管理SD卡文件
现在,拿起你的TTGO-T-Display和SD卡模块,开始构建功能更强大的嵌入式项目吧!🚀
【免费下载链接】TTGO-T-Display 项目地址: https://gitcode.com/gh_mirrors/tt/TTGO-T-Display
更多推荐






所有评论(0)