news 2026/4/23 14:44:31

ST7735上手教程:在ESP32上实现彩色显示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ST7735上手教程:在ESP32上实现彩色显示

从零点亮一块彩色屏:ST7735 + ESP32 图形开发实战手记

你有没有过这样的经历?
项目做到一半,想加个屏幕显示点数据——结果发现数码管太简陋,字符LCD又不够用。这时候,一块小小的1.8英寸彩色TFT屏就成了最理想的“视觉救星”。而它背后最常见的“大脑”,就是那颗驱动能力不俗、价格亲民的ST7735 芯片

更巧的是,如果你手头正用着ESP32这款集Wi-Fi/蓝牙于一身的明星MCU,那你已经握住了通往嵌入式图形界面的大门钥匙。今天我们就来一步步把这块小彩屏真正“点亮”——不是跑个例程就完事的那种,而是搞清楚每一根线怎么接、每一条命令在干什么、为什么有时候会黑屏或花屏。

准备好了吗?我们从一个最真实的问题开始:

“明明代码烧进去了,为什么我的ST7735还是黑的?”

别急,这问题我当年也问过自己三遍。答案往往藏在初始化序列和硬件连接里。接下来,咱们就一层层剥开这个看似复杂的显示系统。


ST7735 到底是个啥?

先给它“画像”。

ST7735 是思立微(Sitronix)推出的一款专为小型TFT设计的液晶驱动控制器,常见于 1.8 英寸、分辨率为128×160的屏幕上。虽然尺寸不大,但它支持RGB565 格式,能显示多达65,536 种颜色,色彩表现足够应付大多数可视化需求。

它的核心任务是:接收主控发来的指令和像素数据,写入内部的 GRAM(图形存储器),然后通过行列驱动电路控制每个像素点的颜色与亮度。

听起来很抽象?可以这样理解:
-GRAM 就像一块画布,你往上面“涂颜色”,屏幕就照着画。
- 每个像素占两个字节(RGB565),红5位、绿6位、蓝5位,组合成一个颜色值。
- 主控通过 SPI 发送命令设置绘图区域,再把一堆颜色数据“倒进去”,画面就更新了。

它强在哪?为什么选它而不是 ILI9341?

相比更出名的 ILI9341(常用于2.4寸屏),ST7735 的优势其实很务实:

对比项ST7735ILI9341
分辨率128×160240×320
封装大小更小,适合紧凑设备稍大
功耗更低,适合电池供电相对高
成本通常便宜1~2元略贵
社区资源Adafruit 支持完善同样丰富

所以如果你做的是便携仪表、智能手环原型或者教学套件,ST7735 是性价比极高的选择。

但注意!它也有“脾气”:
- 初始化必须严格按厂商提供的时序来,错一步可能直接黑屏;
- 不同厂商的模组(比如红标、黑标)需要不同的初始化参数;
- SPI 模式不能乱设,Mode 0 和 Mode 3 得匹配好,否则通信失败。

这些坑,后面都会踩到,也会告诉你怎么绕过去。


接线不难,关键细节决定成败

现在轮到 ESP32 上场了。我们得让它和 ST7735 “说上话”。

它们之间的桥梁是SPI 协议——准确说是四线制 SPI(SCK、MOSI、CS、DC),外加复位(RST)和背光(BLK)控制。

以下是推荐的引脚连接方案(避开 ESP32 内部Flash占用的 IO6~IO11):

ST7735 引脚功能说明推荐连接至 ESP32
VCC电源(3.3V)3.3V
GNDGND
SCL/SCKSPI 时钟线GPIO18
SDA/SDI数据输入(MOSI)GPIO23
CS片选GPIO15
DC命令/数据切换GPIO2
RES/RST复位信号GPIO5
BLK/LED背光控制GPIO4(PWM输出)

✅ 温馨提示:不要把 BLK 直接连到 3.3V!最好用 GPIO 控制,方便软件开关背光省电。

SPI 是怎么传数据的?

这里有个特别容易忽略的关键机制:DC 引脚的作用

  • DC = 0,表示接下来传输的是命令(比如“我要开始写显存了”)
  • DC = 1,表示接下来传输的是数据(比如真正的颜色值)

举个例子,你要清屏:
1. 拉低 CS(选中设备)
2. DC=0 → 发送命令0x2C(Write GRAM Start)
3. DC=1 → 开始连续发送 128×160 个 RGB565 数据(共 40960 字节)
4. 拉高 CS(结束通信)

整个过程由 SPI 硬件自动完成,但 DC 引脚必须由 GPIO 实时控制。

ESP32 的 SPI 外设支持 DMA,意味着你可以一次性丢一大块图像数据给它,CPU 可以去干别的事。这对提升刷新率非常关键。


初始化为何如此重要?

很多人烧完程序看到黑屏,第一反应是“坏了”。其实十有八九是初始化没配对。

ST7735 的初始化不是简单一句begin()就行的,它需要执行一段精确的寄存器配置序列。不同厂家的屏幕(尤其是所谓的“红标”、“黑标”)使用的电压配置、伽马曲线都不一样。

Adafruit 提供了一个贴心的解决方案:封装好的初始化宏。

tft.initR(INITR_BLACKTAB); // 黑标版本 // 或者 tft.initR(INITR_REDTAB); // 红标版本

这两个宏对应不同的寄存器写入流程。如果你不确定自己的模块属于哪种,建议都试一遍。

⚠️ 坑点提醒:有些国产模块标注“兼容ST7735”,其实是用的其他IC(如ST7789),分辨率也不一样。买之前一定要确认是不是128×160


让屏幕动起来:绘图 API 实战

有了正确的初始化,接下来就可以愉快地画画了。得益于Adafruit_GFX + Adafruit_ST7735库的强大支持,我们几乎不需要关心底层GRAM操作。

来看一段经典示例:

#include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #include <SPI.h> #define TFT_CS 15 #define TFT_DC 2 #define TFT_RST 5 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); void setup() { Serial.begin(115200); tft.initR(INITR_BLACKTAB); tft.setRotation(1); // 横屏显示 tft.fillScreen(ST77XX_BLACK); } void loop() { tft.fillScreen(ST77XX_BLUE); delay(500); tft.drawCircle(64, 80, 30, ST77XX_WHITE); // 白色圆环 tft.fillRect(10, 10, 50, 30, ST77XX_RED); // 红色矩形 tft.setCursor(70, 15); tft.setTextColor(ST77XX_YELLOW); tft.setTextSize(2); tft.println("Hello!"); delay(2000); }

短短几行,就能画出圆形、矩形、文字,效果如下:
- 屏幕交替变蓝
- 中间画一个白色空心圆
- 左上角红色实心方块
- 右边显示放大的黄色“Hello!”

这一切的背后,库函数帮你处理了:
- 设置GRAM窗口(CASET/RASET命令)
- 切换DC电平发送命令或数据
- 批量写入SPI总线

完全不用手动计算地址偏移或颜色编码。


性能优化:不只是“能跑就行”

当你想做一个实时波形图、动画菜单甚至小游戏时,就会发现默认刷新速度不够看了。

全屏刷新一次要传约 40KB 数据,在 26MHz SPI 下大约需要12ms,也就是理论帧率约83fps。但实际受CPU调度、函数开销影响,通常只能跑到20~30fps

怎么办?几个实用技巧送上:

1. 局部刷新代替全屏重绘

只更新变化的部分区域。例如:

tft.setAddrWindow(x, y, w, h); // 设置局部窗口 tft.pushColors(pixels, w * h); // 只推送这部分数据

避免每次都 fillScreen(),大幅减少数据量。

2. 使用 pushColors 加速批量传输

相比逐点 drawPixel,直接推送数组快得多:

uint16_t buffer[128]; // ...填充buffer... tft.pushColors(buffer, 128); // 一次推128个像素

3. 背光 PWM 调光

利用 ESP32 的 LEDC 通道实现背光亮度调节:

ledcSetup(0, 5000, 8); // 通道0,5kHz,8位精度 ledcAttachPin(4, 0); // 绑定GPIO4 ledcWrite(0, 128); // 50%亮度

4. 字体瘦身策略

默认字体太大?可以用 FontConverter 工具生成自定义精简字体,只保留你需要的字符(如数字+冒号),节省 Flash 空间。


实际应用场景:不只是“Hello World”

这块小屏的价值,远不止跑个demo。结合 ESP32 的联网能力,它可以成为真正的交互中心。

场景一:空气质量检测仪

  • 实时绘制 PM2.5 曲线图
  • 用颜色标识污染等级(绿色→黄色→红色)
  • 显示温湿度图标 + 数值

场景二:WiFi 配网助手

  • 显示当前SSID和信号强度
  • 输入密码界面(虚拟键盘)
  • 配网成功动画反馈

场景三:迷你音乐播放器

  • 歌名滚动显示
  • 进度条 + 播放/暂停图标
  • 专辑封面缩略图(压缩BMP解码)

你会发现,一旦有了图形界面,设备的“专业感”立刻不一样了。


调试秘籍:那些没人告诉你的“坑”

最后分享几个我在实战中踩过的雷:

❌ 黑屏无显示?

  • 检查 RST 是否接对,有时模块自带上拉,需确认是否需要外部复位
  • 查看 initR 参数是否匹配屏幕类型(红标 vs 黑标)
  • 用万用表测 BLK 引脚是否有电压,背光是否亮起

❌ 文字显示乱码或错位?

  • 可能是 setRotation() 方向不对,导致坐标系偏移
  • 检查 SPI 速率是否过高,尝试降到 10MHz 测试

❌ 刷新卡顿严重?

  • 关闭 Serial.print 在循环中的频繁调用(I/O阻塞)
  • 启用 SPI DMA(Adafruit库已默认启用)
  • 减少不必要的全屏刷新

❌ 内存不足报错?

  • 若使用双缓冲,128×160×2×2 ≈ 80KB,接近ESP32 PSRAM以外的堆限制
  • 解决办法:不用双缓,或启用PSRAM并合理分配

写在最后:这是起点,不是终点

当你第一次看到那个黄色的“Hello!”出现在彩色屏幕上时,那种成就感是真实的。

但这只是第一步。掌握了 ST7735 + ESP32 的协同工作原理后,你可以走得更远:

  • 接入 LVGL 图形框架,做出滑动菜单、按钮、进度条等现代UI组件
  • 实现触摸功能(搭配XPT2046电阻屏)
  • 做一个带GUI的OTA升级工具
  • 构建完整的物联网控制面板

技术的魅力就在于:每一个看似简单的功能背后,都有值得深挖的细节。而正是这些细节,决定了产品是从“能用”走向“好用”的分水岭。

所以,下次当你面对一块新屏幕时,别急着找例程复制粘贴。试着问一句:

“它是怎么把一个数字变成眼睛能看到的一抹颜色的?”

答案就在 GRAM 里,在 SPI 里,在那一串串寄存器配置之中。

欢迎你在评论区分享你的第一个图形项目,或者遇到的奇葩显示问题。我们一起拆解,一起点亮更多屏幕。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:04:29

2026前端性能优化:别等Lighthouse报警才想起来的12条军规

上周技术分享会上,有个做了两年前端的同事跟我吐槽:"哥们儿,咱们这个活动页Lighthouse跑分才32,产品经理说用户投诉页面太慢,让我三天之内优化到90分以上,我都不知道从哪下手..."我笑了笑说:"你现在想起来优化,已经晚了。"这不是危言耸听。真正的性能优化,…

作者头像 李华
网站建设 2026/4/18 3:14:57

网络安全威胁:TensorFlow异常流量识别

网络安全威胁&#xff1a;TensorFlow异常流量识别 在现代企业网络中&#xff0c;攻击手段日益隐蔽且复杂。传统的防火墙和基于规则的入侵检测系统&#xff08;IDS&#xff09;面对加密流量、零日漏洞利用或缓慢渗透式的高级持续性威胁&#xff08;APT&#xff09;&#xff0c;常…

作者头像 李华
网站建设 2026/4/23 13:03:28

价格动态调整:TensorFlow市场竞争分析

TensorFlow市场竞争分析&#xff1a;从技术深度到企业落地的全链路洞察 在AI技术加速渗透各行各业的今天&#xff0c;一个现实问题摆在工程师面前&#xff1a;为什么许多前沿研究项目偏爱PyTorch&#xff0c;而一旦进入生产部署阶段&#xff0c;企业却往往转向TensorFlow&#…

作者头像 李华
网站建设 2026/4/23 13:01:46

BRIA RMBG-1.4背景移除模型:企业级图像处理的终极解决方案

BRIA RMBG-1.4背景移除模型&#xff1a;企业级图像处理的终极解决方案 【免费下载链接】RMBG-1.4 项目地址: https://ai.gitcode.com/jiulongSQ/RMBG-1.4 面对海量图像内容处理的业务需求&#xff0c;如何实现高效、精准的背景分离已成为企业数字化转型的关键挑战。BRI…

作者头像 李华
网站建设 2026/4/23 13:46:36

Open-AutoGLM开源上线7天GitHub星标破万(究竟藏着哪些黑科技?)

第一章&#xff1a;Open-AutoGLM开源上线现象级爆发背后的真相Open-AutoGLM 自上线以来&#xff0c;在 GitHub 上星标数突破 15,000&#xff0c;社区贡献者数量在三周内增长至 327 人&#xff0c;成为近期最引人注目的开源大语言模型项目之一。其爆发式增长不仅源于强大的自动化…

作者头像 李华
网站建设 2026/4/23 14:35:28

如何让Open-AutoGLM支持自定义推理后端?深度解析API扩展架构设计

第一章&#xff1a;Open-AutoGLM使用第三方模型Open-AutoGLM 支持集成多种第三方大语言模型&#xff0c;以增强其在不同任务场景下的灵活性与适应性。通过配置适配接口&#xff0c;用户可以将外部模型无缝接入 Open-AutoGLM 的推理流程中&#xff0c;实现高效的模型调用与结果解…

作者头像 李华