ESP32+MicroPython天气时钟项目
需要下面连个文件,一个是 7735 的驱动程序,另外一个是用到的字符库文件,这个只是英文常用字符库,没有汉字库,汉字库后面可以再介绍如何添加进来使用。分辨率:128×160像素(部分型号为128×128),支持全视角显示,色彩细腻度达到16位色深(RGB565模式,红色5位、绿色6位、蓝色5位)。引脚精简:仅需SCLK(时钟)、MOSI(主出从入)、CS(片选)、DC(数据/命令选择)、RST(复
一个互联网技术玩家,一个爱聊技术的家伙。在工作和学习中不断思考,把这些思考总结出来,并分享,和大家一起交流进步。
一、项目介绍
看到网上有一个比较不错的案例,想自己使用 microPython 来实现一个。实现类似的天气时钟,如下图所示。

二、项目实现介绍
实现上我想分成 4~5 个部分来逐步介绍整个设计开发过程。
-
介绍硬件连接调测,主要介绍 esp32 与 1.8 TFT 显示屏的连接和基本调测。
-
介绍显示屏幕上怎么展示文字信息,包括中文字库的显示。
-
介绍显示屏幕上怎么展示天气图标,包括天气图标和温度图标。
-
介绍显示屏幕上怎么展示时间信息,包括时间、日期、星期。
-
介绍显示屏幕上划线布局,组装成一个完整的天气时钟。
整体代码开发完成之后会分享到 github 上,方便大家学习。也欢迎大家测试提交代码。
1. 介绍 ESP32 与 1.8st7735显示屏的连接和调测。
一、屏幕基本参数与特性
这里使用的显示屏是:高清 SPI 1.8寸 TFT显示彩屏 OLED液晶屏 st7735。
1. 显示性能
-
分辨率:128×160像素(部分型号为128×128),支持全视角显示,色彩细腻度达到16位色深(RGB565模式,红色5位、绿色6位、蓝色5位)。
-
亮度与对比度:典型亮度300cd/m²,对比度500:1,适用于室内外多种光照环境。
-
响应时间:≤15ms,动态画面无拖影,适合显示简单动画或实时数据。
2. 物理特性
-
尺寸:1.8英寸对角,厚度仅1.2mm,适用于小型便携设备。
-
接口类型:支持SPI(串行外设接口)通信,部分型号兼容8位并行接口。
-
功耗:工作电压3.3V,待机功耗低至0.5mA,适合电池供电场景。
二、SPI接口与硬件设计
SPI接口优势
-
引脚精简:仅需SCLK(时钟)、MOSI(主出从入)、CS(片选)、DC(数据/命令选择)、RST(复位)等5-6根线,节省MCU资源。
-
传输速率:最高支持40MHz时钟频率,实测刷新率可达60fps(128×160全屏)。
-
灵活性:支持软件模拟SPI(GPIO控制)或硬件SPI(专用外设加速),适配不同MCU型号。
硬件连接要点
-
关键引脚定义:
-
-
CS:片选信号,低电平激活通信。
-
DC:高电平传输像素数据,低电平发送控制命令。
-
RST:硬件复位引脚,初始化时需拉低至少100ms。
-
-
电平匹配:需确保MCU与屏幕电平一致(通常为3.3V),5V系统需加电平转换电路。

三、显示屏引脚功能说明

四、 显示屏和 esp32硬件连接方式
|
模块 |
型号/参数 |
连接方式 |
ESP32引脚分配 |
|---|---|---|---|
|
主控 |
ESP32-WROOM-32D |
- |
- |
|
TFT屏幕 |
ST7735S 1.8 SPI |
SPI |
SCK=18, MOSI=23 |
|
控制线 |
CS=5, DC=21, RST=5 |
||
|
背光控制 |
BLK=4 (PWM调光) |
||
|
WiFi模块 |
板载 |
- |
- |
|
屏幕引脚 |
esp32 引脚 |
|---|---|
|
sck/scl |
Pin(18) |
|
mosi/sda |
Pin(23) |
|
miso |
Pin(19) |
|
DC |
Pin(21) |
|
Reset/rst |
Pin(2) |
|
CS |
Pin(5) |
五、驱动测试
需要下面连个文件,一个是 7735 的驱动程序,另外一个是用到的字符库文件,这个只是英文常用字符库,没有汉字库,汉字库后面可以再介绍如何添加进来使用。这两个文件可以联系我拿,后面我也会为这个项目整理一下专门的仓库存放这些代码。
-
驱动文件:st7735.py,存放在 lib目录下。
-
字库文件:sysfont.py,存放在 lib目录下。
from machine import Pin, SoftSPI
from drivers.st7735 import TFT7735
from drivers.sysfont import sysfont
# 初始化SPI
spi = SoftSPI(baudrate=600000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19))
display = TFT7735(spi, 21, 2, 5)
display.initg()#按RGB中的g重置屏幕
display.rgb(True)
display.fill(TFT7735.BLACK)
display.invertcolor(True)#反转屏幕颜色,负片,反色
display.fill(TFT7735.BLACK)
v = 30
display.text((0, v), "Hello World!", TFT7735.RED, sysfont, 1, nowrap=True)
v += sysfont["Height"]
display.text((0, v), "Hello World!", TFT7735.YELLOW, sysfont, 2, nowrap=True)
v += sysfont["Height"] * 2
display.text((0, v), "Hello World!", TFT7735.GREEN, sysfont, 2, nowrap=True)
v += sysfont["Height"] * 3
display.text((0, v), str(1234.567), TFT7735.BLUE, sysfont, 2, nowrap=True)
五、测试结果

六、总结
本文档介绍了使用ST7735驱动的TFT-LCD显示屏的初始化设置及其显示效果。通过SPI接口连接显示屏,并设置了不同颜色的文本显示。实验结果显示,显示屏能够正确显示不同颜色的“Hello World”文本,并且能够显示数字。
下次实验预告
下次实验将重点探讨在中文字体显示上的实现方法,包括字体文件的准备、编码转换的实现。
更多推荐



所有评论(0)