开发指南 2025-06-02 约 3 分钟阅读
ESP32 驱动 TFT 液晶屏完整教程:SPI 接线 + 驱动库 + LVGL 上手
从零开始用 ESP32/ESP32-S3 点亮一块 SPI TFT 屏,含接线表、库选择、最小示例代码与排错清单。
ESP32 系列是中小尺寸显示方案里最常用的主控之一:自带 WiFi/蓝牙、价格低、生态成熟。这篇讲清楚用 ESP32 点亮一块 SPI TFT 屏的完整流程。
一、需要准备
- 一块 SPI 接口 TFT 屏(建议 2.4 寸以内,320×240 或 240×320)
- ESP32 或 ESP32-S3 开发板
- 杜邦线若干(接线尽量短,建议 10cm 以内)
- Arduino IDE(或 PlatformIO)+ TFT_eSPI 库
二、接线(以常见 SPI 屏为例)
| 屏幕引脚 | ESP32 引脚 | 说明 |
|---|---|---|
| VCC | 3.3V | 注意不要接 5V |
| GND | GND | 共地 |
| SCL / SCK | GPIO 18 | SPI 时钟 |
| SDA / MOSI | GPIO 23 | SPI 数据 |
| CS | GPIO 15 | 片选 |
| DC / RS | GPIO 2 | 数据/命令选择 |
| RES / RST | GPIO 4 | 复位 |
| BLK / LED | 3.3V(或 PWM) | 背光,可接 PWM 调亮度 |
注意:不同型号屏的引脚定义不同,务必以规格书为准。接线过长或接触不良是新手最常见的白屏原因。
三、编写最小示例
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup() {
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_CYAN, TFT_BLACK);
tft.setTextSize(2);
tft.setCursor(20, 60);
tft.println("EYA Display");
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextSize(1);
tft.setCursor(20, 100);
tft.println("ESP32 + SPI TFT OK");
}
void loop() {
delay(1000);
}TFT_eSPI 需要在库目录的 User_Setup.h 里配置驱动芯片型号和引脚定义,配置错误会出现白屏、花屏或颜色错位。
四、进阶:用 LVGL 做界面
- LVGL 是开源嵌入式图形库,适合做按钮、列表、图表等复杂 UI
- ESP32 + LVGL 在 320×240 尺寸下体验流畅;更大尺寸建议 ESP32-S3(带 PSRAM)
- 接线不变,只需在代码里把 LVGL 的显示缓冲指向 TFT 驱动
- 如果需要快速量产,可直接用 ESP32 串口屏 + 组态软件,跳过 UI 编码
五、排错清单
| 现象 | 常见原因 |
|---|---|
| 完全白屏 | 背光未接 / 复位引脚接错 / 驱动芯片型号配错 |
| 花屏、噪点 | 接线过长或接触不良 / SPI 时钟过高 |
| 颜色不对(红蓝互换) | RGB/BGR 顺序配置错误 |
| 能显示但闪烁 | 供电电流不足(换独立 3.3V 供电) |
| 触摸无效 | 触摸芯片型号未配置 / I2C 地址不对 |
常见问题
ESP32 和 ESP32-S3 驱动屏幕有什么区别?
ESP32-S3 主频更高(240MHz)、支持更大 PSRAM 和 USB OTG,驱动大尺寸屏幕或跑 LVGL 更流畅;ESP32 适合小尺寸简单 UI。
SPI 屏最多能多大?
从带宽考虑,SPI 适合 3.5 寸以内、480×320 以下分辨率的场景。更大尺寸建议改用 RGB 或 MIPI 接口。
屏幕供电能用开发板的 3.3V 吗?
小尺寸可以;2.8 寸以上或高亮屏建议用独立 3.3V 供电,否则背光会让电压跌落导致闪烁。