概念科普

ESP32 接 ST7789 屏幕:7 根线分别是做什么的?

第一次连接 GMT130-V1.0 时,我只会照着接线表操作。本文把 VCC、GND、BLK、RES、SCK、SDA、DC 分成四类,沿完整显示链路解释它们怎样把 ESP32 代码变成可见画面,以及理解以后怎样安全地重新规划线路。

第一次点亮这块屏幕时,我只是照着 AI 给出的接线表操作:哪根线接哪个 GPIO,我就跟着接。但当我想把杂乱的线路重新整理一下时,我才发现,自己连一根线都不敢拔。

问题并不是我不会把导线插进面包板,而是我不知道这七根线为什么要这样接。它们哪些负责供电,哪些负责传送画面,哪些位置可以调整,哪些位置不能随便换,我都说不清楚。

从决定弄懂七根线,到最后完成重新走线,我大约花了两天。真正动手重新走线,只用了五分钟。

**这篇文章适合谁:**第一次用 ESP32 连接 ST7789 屏幕,能够照着接线表操作,却不知道每根线为什么这样接的人。

**读完能得到什么:**把七根线放进一条完整的显示链路,并理解重新规划线路时,哪些约束必须保留。

重新走线前,GMT130 屏幕与 ESP32-S3 之间使用多根较长线材连接,线路在面包板上方交叉。

重新走线前,GMT130 屏幕与 ESP32-S3 之间使用多根较长线材连接,线路在面包板上方交叉。

先别背七个英文:它们其实只有四类工作

我使用的是 GMT130-V1.0,屏幕背面标注的控制器是 ST7789,接口是 SPI。排针上一共有七个名字:GND、VCC、SCK、SDA、RES、DC、BLK。

如果一上来逐个背缩写,很容易越看越乱。先按工作类型分类,七根线其实只做四类事情:

工作类别针脚先记住的一句话
供电与参考VCC、GND让模块获得电能,并让 ESP32 和屏幕使用同一个电压零点。
背光BLK打开 LCD 后面的光源。
复位RES让 ST7789 回到可以重新初始化的起点。
SPI 写入SCK、SDA、DC把命令、参数和像素数据从 ESP32 写进屏幕。

GMT130-V1.0 正面排针旁依次标有 GND、VCC、SCK、SDA、RES、DC、BLK。

GMT130-V1.0 正面排针旁依次标有 GND、VCC、SCK、SDA、RES、DC、BLK。

这张分类表就是理解后面所有细节的地图。遇到任何一根线,先问它属于哪一类,再问它在这一类里负责什么。

七根线怎样汇合成一幅画面

这四类工作不是七根线依次排队执行,而是几条支路同时配合。

  1. **VCC 和 GND 建立工作基础。**屏幕模块获得电能,ESP32 和屏幕也有了共同的电压参考。

  2. **BLK 打开背光支路。**它只负责提供光,不负责生成像素。

  3. **RES 让控制器回到已知起点。**复位完成后,程序仍要继续发送初始化命令。

  4. **SCK、SDA、DC 完成 SPI 写入。**ESP32 把初始化命令、参数和像素数据送给 ST7789。

  5. **ST7789 驱动 LCD 像素。**背光穿过被控制的红、绿、蓝子像素,人眼才看到程序要求的颜色。

GMT130-V1.0 背面标有 240×240、Driver IC ST7789 和 Interface SPI。

GMT130-V1.0 背面标有 240×240、Driver IC ST7789 和 Interface SPI。

**背光亮和像素写入成功是两件事。**屏幕发亮,只能说明背光和部分供电路径在工作;它不能证明复位、初始化、SPI 通信和像素写入都已成功。

VCC 和 GND:不仅要有电,还要共享同一个零点

VCC 给模块提供电能。在我的这套 GMT130-V1.0 与 ESP32-S3 实物中,VCC 接到开发板的 3V3。这个结论只覆盖我已经验证的模块,不代表所有外观相似的屏幕都可以不看规格直接照抄,更不能据此改接 5V。

GND 有两个容易被混在一起的作用。

  • 它提供电流返回路径,让供电回路能够闭合。

  • 它让 ESP32 和屏幕共享同一个电压参考,也就是共同的“零点”。

屏幕判断 SDA 上是 0 还是 1,不是在识别一个沿着导线跑过来的数字,而是在比较 SDA 相对屏幕 GND 的电压。双方没有共地时,屏幕看到的高低电平就没有可靠的共同参考。

因此,“VCC 负责供电,GND 负责回路”还不够完整。更准确的说法是:VCC 提供电能,GND 同时提供回流路径和共同参考

BLK 和 RES:一个管光,一个让控制器重新开始

**BLK 是背光控制。**我的接法是把 BLK 直接接到 3V3,因此通电后背光保持开启。但背光只是 LCD 后面的光源,它不会发送命令,也不会凭空生成红色像素。

**RES 是硬件复位。**ESP32 通过 RES 给 ST7789 一个复位信号,让控制器回到规定的初始状态。它解决的是“从一个已知起点重新开始”,不是“自动把屏幕变成黑色或红色”。

复位之后,程序还要发送初始化命令,并把像素数据写入显示内存。也正因为 BLK 与 RES 属于不同支路,拉动 RES 时,直接接在 3V3 上的背光仍会继续亮。

SPI 写入:SDA 给内容,SCK 给时刻,DC 给类别

SPI 可以先理解为一套双方都遵守的传输约定。它不是一句“中文”或“英文”,而是对谁发送、线上怎样表示高低电平、什么时候读取以及数据按什么顺序组织的一组规则。

这块七针屏幕没有把读取返回线和片选线引出来。文章里最需要理解的是 SCK、SDA、DC 三根线:

针脚负责什么实际发生的事
SDA内容ESP32 依次把当前要发送的每一位设置为高电平或低电平。
SCK读取时刻时钟边沿到来时,ST7789 记录 SDA 当前稳定的值。
DC内容类别低电平表示命令,高电平表示参数或像素数据。

什么是“边沿”?一根线从低电平变为高电平,这个变化时刻叫上升沿;从高电平变为低电平,叫下降沿。在我验证成功的 Mode 3 配置中,ESP32 先让 SDA 稳定,再让 SCK 出现约定的上升沿,ST7789 就在这个时刻记录 SDA 是 0 还是 1。

这里最容易误解的一点是:**不是 SDA 自己发生变化,屏幕就自动读取。**SDA 即使一直保持高电平,只要 SCK 连续给出两个读取时刻,屏幕仍可以记录两个 1。

DC 则像字节的类别标记。如果 ESP32 原本想发送一条命令,但 DC 错误地一直保持高电平,即使 SDA 和 SCK 都正常,ST7789 也会把收到的八位当成数据,而不是命令。

SPI 也不是“一次只能发送一个字节,发完就结束”。软件常把连续的位每八位组织成一个字节,但一次绘图会连续发送许多个命令、参数和像素字节。

以 RGB565 为例,一个像素需要 16 位,也就是 2 字节。240×240 的整屏共有 57,600 个像素,单是像素内容就有 115,200 字节。因此,SPI 时钟速度和软件开销确实会影响整屏换色速度。

一行 fillScreen,最后怎样变成红色

现在把七根线放回一次真实调用里。程序执行 tft.fillScreen(红色) 时,背后大致经历这些步骤:

  1. 显示库把“填满整屏”转换为一个 240×240 的绘制区域。

  2. 程序先发送列地址、行地址和开始写显示内存的命令。

  3. DC 让 ST7789 知道当前收到的是命令,还是命令参数与像素。

  4. SDA 依次给出每一位的高低电平,SCK 给出读取节奏。

  5. ST7789 把连续收到的 RGB565 颜色写进显示内存,并驱动 LCD 面板对应的子像素。

  6. BLK 支路已经打开背光。背光穿过 LCD,人眼最终看到整块红色。

ESP32-S3 使用硬件 SPI Mode 3 驱动同一块 GMT130-V1.0,屏幕显示红色纯色画面。

ESP32-S3 使用硬件 SPI Mode 3 驱动同一块 GMT130-V1.0,屏幕显示红色纯色画面。

这条链路也解释了为什么排错时不能只问“屏幕亮没亮”。更有用的问题是:供电和共同参考是否成立?背光是否开启?控制器是否复位并初始化?SPI 命令与像素是否真正写入?

Mode 3 是我这块 GMT130-V1.0、当前库版本和程序已经验证的条件,不代表所有 ST7789 屏幕都必须使用 Mode 3。其他模块仍应先核对具体资料,再做单变量测试。

理解以后,怎样重新规划线路

理解七根线以后,“自主走线”不再是随便找七个孔插进去,而是先判断哪些约束必须保留。

  • **只改变线路经过的路径,不改变信号端点:**这是物理理线,一般不需要修改代码。

  • **把 SCK、SDA、RES、DC 换到其他合适 GPIO:**这是引脚修改。导线移动以后,代码中的 GPIO 定义也必须同步改变,还要检查新 GPIO 是否被其他硬件占用。

  • **VCC 和 GND:**它们不是可以随意替换的普通 GPIO。供电电压、共同地和模块电气限制必须保留。

我重新走线后确认的当前接口如下:

GMT130/ST7789ESP32-S3类别
GNDGND回路与共同参考
VCC3V3模块供电
SCKGPIO9SPI 时钟
SDAGPIO10SPI 数据写入
RESGPIO11控制器复位
DCGPIO12命令/数据选择
BLK3V3背光常亮

重新走线时,我调整了七根线的起点、终点和路径,也把原来的多股线换成了面包板专用线材。重新上电后,屏幕仍然像使用原来线材时一样变换颜色。

重新走线后,GMT130 与 ESP32-S3 之间改用较短的面包板专用线材,线路主要贴近面包板排列。

重新走线后,GMT130 与 ESP32-S3 之间改用较短的面包板专用线材,线路主要贴近面包板排列。

这两天真正增加的,不是屏幕的新功能。屏幕仍然只是循环显示颜色。真正的进展是,我开始理解这些针脚背后的基础知识,也能更轻松地自己规划线路。

实际走线只花了五分钟,前面的两天却没有浪费。因为以后再遇到相似问题时,我不必只盯着一张接线表照抄。我可以先识别供电、参考、控制和数据,再判断哪些端点固定、哪些信号能够在同步修改代码后重新选择。

最后,用这五个问题检查自己的接线

  1. 我确认了屏幕的具体型号、控制器、接口和允许电压吗?

  2. VCC、GND、BLK、RES、SCK、SDA、DC 分别属于哪一类?

  3. ESP32 与屏幕是否共地,供电是否使用已经确认的电压?

  4. 如果更换了 SCK、SDA、RES 或 DC 的 GPIO,代码是否同步修改?

  5. 上电后,我能否区分“背光亮”和“像素画面真正写入成功”?

当这五个问题都能回答时,七根线就不再是一张只能照抄的接线表,而是一条可以自己解释、自己规划、自己检查的显示链路。

资料来源与适用边界

本文中的具体 GPIO、3.3 V 供电、SPI Mode 3 和显示结果,只覆盖我实际使用并验证的 GMT130-V1.0、ESP32-S3 N16R8 开发板及对应软件环境。不同屏幕模块即使同样使用 ST7789,也应先核对自己的模块资料。

CONTINUE READING

继续阅读同一作品、元件或排查路径上的真实制作记录。