前面我们学了1602 LCD屏幕,它能显示两行字符,但只有蓝底白字,看久了总觉得有点单调。今天我们要上一个档次——240x240分辨率的彩色TFT屏幕!
这块屏幕能显示65536种颜色,240x240分辨率,无论是显示文字、绘制图形,还是展示传感器数据,效果都比字符屏惊艳得多。
本节课就带大家从零开始,让ESP32驱动这块彩色屏幕,显示出绚丽的画面!
第一步:找到课程,看看成品效果
打开逗脑IDE,点击顶部 “教程”,在 “硬件” → “ESP32 + MicroPython” 分类下,找到240x240显示屏1。
打开课件,你会看到本节课的最终效果——屏幕上一直在打印 Hello。
第二步:认识这块屏幕
这块240x240屏幕,像素分辨率是240行×240列,虽然不大,但显示文字和图形已经非常够用了。
引脚说明:
| 引脚名称 | 功能说明 |
|---|---|
| VCC | 电源正极 |
| GND | 电源负极 |
| SCL | SPI时钟线 |
| SDA | SPI数据线 |
| RES | 复位引脚 |
| DC | 数据/命令选择引脚 |
| CS | 片选引脚 |
| BLK | 背光控制引脚 |
这块屏幕使用SPI协议进行数据传输,主控芯片是ST7789。
第三步:什么是SPI?比I2C更快!
我们在上一节课学了I2C(两根线传数据)。这节课的SPI和I2C类似,也是一种通信协议,但速度更快。
SPI使用4根线:
| 信号线 | 全称 | 作用 |
|---|---|---|
| MOSI | Master Output Slave Input | 主机→从机,发送数据 |
| MISO | Master Input Slave Output | 从机→主机,接收数据 |
| SCLK | Serial Clock | 时钟信号,控制传输节奏 |
| SS | Slave Select | 片选信号,选择跟哪个设备通信 |
第四步:动手接线——SPI四线搞定
接线依然很简单:
| 屏幕引脚 | 连接ESP32引脚 | 说明 |
|---|---|---|
| VCC | VCC | 3.3V |
| GND | GND | 电源地 |
| SCL | GPIO18 | SPI时钟 |
| SDA | GPIO23 | SPI数据 |
| RES | GPIO15 | 复位 |
| DC | GPIO2 | 数据 |
| CS | GPIO5 | 片选 |
| BLK | 5v(3.3V对面) | 背光控制,接高电平点亮 |
第五步:上传驱动和字体文件
本节课的代码需要两个额外文件才能运行:
- 驱动文件
st7789py.py:让屏幕能显示画面的底层驱动 - 字体文件夹
romfonts:包含显示文字所需的字体数据
操作流程:
- 点击课件中的下载链接,下载压缩包
- 解压缩得到文件夹和文件
- 将
st7789py.py上传到ESP32 - 将
romfonts整个文件夹上传到ESP32
第六步:一键打开代码,直接运行
驱动和字体都传好了,接下来就是主代码。
课件提供了两个示例,我们先看示例1——测试纯色填充和文字显示:
import random
import time
from machine import Pin, SPI
import st7789py
from romfonts import vga2_8x16 as font
# 唤醒屏幕
st7789py.wakeup(SPI(2, 60000000), dc=Pin(2), cs=Pin(5), rst=Pin(15))
time.sleep_ms(100)
# 创建显示对象
tft = st7789py.ST7789(SPI(2, 60000000), 240, 240,
reset=Pin(15), dc=Pin(2), cs=Pin(5), rotation=0)
# 测试纯色填充
tft.fill(st7789py.RED) # 全屏红色
time.sleep(1)
tft.fill(st7789py.GREEN) # 全屏绿色
time.sleep(1)
tft.fill(st7789py.BLUE) # 全屏蓝色
time.sleep(1)
tft.fill(st7789py.BLACK) # 清屏
# 显示文字
tft.text(font, "Hello", 0, 0, st7789py.RED, st7789py.WHITE)
tft.text(font, "World!", 0, 32, st7789py.WHITE, st7789py.RED)
找到对应的代码块,点击 “打开” 按钮,代码自动加载到编辑器中。
第七步:保存到开发板,看彩色画面!
按 Ctrl + S 保存,选择ESP32开发板设备,给文件命名(比如test1.py),点击保存。
保存成功后,点击运行按钮。
运行后——240x240彩色屏幕依次显示:
- 全屏红色 🔴
- 全屏绿色 🟢
- 全屏蓝色 🔵
- 最后显示 “Hello World!”,文字带有红白配色
进阶一下:随机彩色“Hello!”跑起来
示例1只是静态显示,示例2才是真正的炫酷效果:
程序会在屏幕上随机位置、随机颜色地不断显示“Hello!”文字,每次显示的位置和颜色都不一样,看起来就像彩色文字在屏幕上四处跳动。
import random
import time
from machine import Pin, SPI
import st7789py
from romfonts import vga2_8x16 as font # 使用8位宽字体
# 唤醒屏幕
st7789py.wakeup(SPI(2, 60000000), dc=Pin(2), cs=Pin(5), rst=Pin(15))
time.sleep_ms(100)
# 创建显示屏对象
tft = st7789py.ST7789(SPI(2, 60000000), 240, 240,
reset=Pin(15), dc=Pin(2), cs=Pin(5), rotation=0)
def show_text():
for rotation in range(4):
tft.rotation(rotation)
tft.fill(st7789py.BLACK)
col_max = tft.width - font.WIDTH * 6
row_max = tft.height - font.HEIGHT
for _ in range(100):
tft.text(
font,
"Hello!",
random.randint(0, col_max),
random.randint(0, row_max),
st7789py.color565(random.getrandbits(8), random.getrandbits(8), random.getrandbits(8)), # 随机前景色
st7789py.color565(random.getrandbits(8), random.getrandbits(8), random.getrandbits(8)) # 随机背景色
)
time.sleep(1)
# 随机显示Hello!
while True:
show_text()
从字符到彩色,你的屏幕升级了
回顾一下屏幕相关课程的升级路径:
| 屏幕 | 特点 |
|---|---|
| 1602 LCD(字符屏) | 2行×16字符,蓝底白字 |
| 240x240 TFT(彩色屏) | 彩色显示、240×240分辨率、65536色 |
本节课的突破:
- 从字符显示升级为像素级彩色显示
- 学会了SPI协议(比I2C更快)
- 可以显示任意颜色、任意位置的文字和图形
应用场景:
- 智能家居控制面板
- 数据可视化仪表盘
- 电子相册、时钟
- 简易游戏机
全程回顾
| 步骤 | 操作 | 效果 |
|---|---|---|
| 找到课程 | 教程→硬件→ESP32+MicroPython→240显示屏 | 了解彩色屏幕效果 |
| 认识屏幕 | 学习8个引脚和SPI协议 | 理解硬件原理 |
| 动手接线 | 5V-GND-SCL-SDA-RES-DC-CS-BLK | 硬件准备就绪 |
| 上传驱动 | 上传st7789py.py到ESP32 | 屏幕有了“驱动程序” |
| 上传字体 | 上传romfonts文件夹到ESP32 | 显示文字有了“字库” |
| 打开代码 | 点击“打开”按钮 | 示例代码进入编辑器 |
| 保存运行 | Ctrl+S → 选择ESP32 → 运行 | 彩色画面出现! |
去官网(www.dounao.cn**)下载逗脑IDE,准备好ESP32和240x240彩色屏幕,跟着第九节课走一遍。当屏幕上第一次出现彩色画面时,你会觉得——**前面所有的努力都值了。
有任何问题或建议,欢迎在评论区留言告诉我们。