摘要
ST7735S-Drives-Micropython 是一个面向 ESP32-S3 的单文件 TFT 屏幕驱动。它使用 MicroPython 的硬件 SPI 接口与 1.8 英寸 ST7735S 屏幕通信,提供清屏、区域填充、像素绘制、图像显示和旋转等基础能力,并针对受限内存环境准备了缓冲区降级策略。
项目背景
在 MicroPython 嵌入式项目中,显示驱动往往决定了界面开发的起点。一个可读、可修改、没有复杂依赖的驱动,既能缩短传感器仪表和状态屏的开发时间,也便于理解 SPI、RGB565 与显示控制器寄存器之间的关系。
这个项目将核心实现集中在 st7735s.py 中,适合直接复制到设备,也方便根据屏幕批次、引脚或方向进行定制。
核心功能
- 使用硬件 SPI 与屏幕通信,默认速率最高 40MHz。
- 支持 128×160 分辨率和 RGB565 颜色格式。
- 提供硬件复位和完整初始化序列。
- 支持设置显示窗口、清屏、填充矩形、绘制像素与显示图像。
- 支持 0°、90°、180°、270° 四种显示方向。
- 预分配绘图缓冲区,并在内存不足时缩减缓冲区。
- 支持可选背光控制引脚。
技术架构与技术栈
驱动直接使用 MicroPython 的 machine.Pin 与 machine.SPI。命令和数据通过 DC 引脚区分,CS 控制单次传输边界,RST 完成硬件复位。绘制前先通过 CASET、RASET 和 RAMWR 寄存器设置目标区域,再发送 RGB565 像素数据。
项目没有引入外部框架,核心依赖仅为 MicroPython 自带的 machine、time 和 gc 模块。对嵌入式环境而言,这种轻依赖方式易于移植与调试。
项目亮点
README 不只列出 API,还解释了接线、初始化寄存器、颜色格式、旋转参数、内存占用、性能建议和故障排查。对于想理解显示驱动工作方式的开发者,它比一个只提供调用示例的代码片段更有学习价值。
驱动也对内存不足进行了基础处理:优先申请全屏缓冲区,失败后回收内存并降级为较小缓冲区。区域绘制会根据像素数量选择复用缓冲区或临时申请空间。
使用与部署
先按 README 连接 DC、CS、RST、SCL、SDA、3.3V 和 GND;如果需要程序控制背光,再连接可选 BL 引脚。把 st7735s.py 上传到 ESP32-S3 文件系统后即可导入并实例化驱动。
初始化时可以按自己的接线传入 GPIO 编号。随后使用 clear、fill_rect、draw_point、show_image 和 rotate 等方法完成基础绘制。图像数据需要预先转换为连续的 RGB565 字节流。
不同厂商的 ST7735S 模组可能在颜色顺序、显示偏移、反色配置或最高稳定 SPI 频率上存在差异。首次使用建议从较低 SPI 频率开始测试,并根据实际屏幕调整初始化参数。README 中的 DMA 描述也应以所用 MicroPython 固件和端口实现为准。
适用场景
- ESP32-S3 传感器数据显示屏。
- 小型状态面板、仪表和设备菜单。
- MicroPython SPI 与 LCD 控制器学习。
- 需要单文件、低依赖显示驱动的快速原型。
项目地址
GitHub:https://github.com/hemo528/ST7735S-Drives-Micropython