如何在TTGO-T-Display上使用SD卡:第二个SPI设备实战教程

【免费下载链接】TTGO-T-Display 【免费下载链接】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引脚:

TTGO-T-Display引脚映射图

核心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.hTFT_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卡模块

上图展示了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示例,你可以:

  1. 存储图片:将JPEG格式图片保存在SD卡根目录
  2. 解码显示:使用JPEGDecoder库解码并显示图片
  3. 动态更新:通过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卡功能,你可以创建一个完整的数据记录仪:

  1. 硬件连接:添加温湿度传感器(如DHT11/DHT22)
  2. 数据采集:定期读取传感器数据
  3. 存储到SD卡:以CSV格式保存数据
  4. 显示实时数据:在屏幕上显示当前读数
  5. 数据导出:通过USB或WiFi导出数据文件

TTGO-T-Display外壳设计

上图展示了TTGO-T-Display的3D打印外壳设计,适合制作便携式数据记录设备。

总结与扩展

通过本教程,你已经掌握了在TTGO-T-Display上连接和使用SD卡的关键技术。记住这些要点:

硬件连接:正确连接SPI引脚,注意电源和地线
软件配置:正确初始化SD卡库和文件系统
冲突解决:管理好多个SPI设备的片选信号
性能优化:根据应用需求调整SPI频率和内存使用

下一步学习方向

  1. 探索更多示例

  2. 深入学习文件系统

    • SPIFFS与SD卡的比较
    • 文件系统性能优化
    • 错误处理和恢复机制
  3. 项目扩展

    • 添加RTC模块记录时间戳
    • 实现OTA固件更新
    • 创建Web界面管理SD卡文件

现在,拿起你的TTGO-T-Display和SD卡模块,开始构建功能更强大的嵌入式项目吧!🚀

【免费下载链接】TTGO-T-Display 【免费下载链接】TTGO-T-Display 项目地址: https://gitcode.com/gh_mirrors/tt/TTGO-T-Display

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐