st7789_mpy:MicroPython ST7789显示屏驱动,支持多尺寸与高性能绘制

Fast pure-C driver for MicroPython that can handle display modules on ST7789 chip

分支1Tags0
文件最后提交记录最后更新时间
6 年前
6 年前
7 年前
7 年前
2 年前
6 年前

ST7789驱动程序 for MicroPython

概览

本驱动程序是专为MicroPython设计的,用于处理基于ST7789芯片的低成本显示屏。

ST7789显示屏照片

它支持240x240和135x240两种分辨率的显示模块。

此驱动由纯C语言编写,因此需要用户自行编译固件。 目前支持ESP8266、ESP32和STM32平台。

构建指南

按照手册准备构建工具。 在编译MicroPython固件前,请确保能够不依赖该显示模块完成固件构建。

将此模块与MPY源代码一同克隆:

git clone https://github.com/devbis/st7789_mpy.git

进入MicroPython的端口目录,并对于ESP8266运行:

cd micropython/ports/esp8266

对于ESP32:

cd micropython/ports/esp32

然后,指定USER_C_MODULES目录来编译模块:

make USER_C_MODULES=../../../st7789_mpy/ all

如果你有其他用户模块,需将st7789_driver/st7789复制到用户模块目录中。

使用esptool.py以常规方式上传生成的固件至你的MCU(参见MicroPython文档了解更多部署信息)。

make deploy

工作示例

本模块已在ESP32和ESP8266微控制器上测试。

你需要提供一个machine.SPI对象以及屏幕上的重置(RESET)和数据选择(DC)针脚至少两个引脚给显示对象。

ESP 8266 示例

import machine
import st7789
spi = machine.SPI(1, baudrate=40000000, polarity=1)
display = st7789.ST7789(spi, 240, 240, reset=machine.Pin(5, machine.Pin.OUT), dc=machine.Pin(4, machine.Pin.OUT))
display.init()

ESP32 示例

对于ESP32,需要特定的SPI引脚配置。

import machine
import st7789
spi = machine.SPI(2, baudrate=40000000, polarity=1, sck=machine.Pin(18), mosi=machine.Pin(23))
display = st7789.ST7789(spi, 240, 240, reset=machine.Pin(4, machine.Pin.OUT), dc=machine.Pin(2, machine.Pin.OUT))
display.init()

方法概述

仅支持RGB565格式的16位颜色。

  • ST7789.fill(color): 填充整个显示屏为指定颜色。
  • ST7789.pixel(x, y, color): 将指定位置的像素设置为给定颜色。
  • ST7789.line(x0, y0, x1, y1, color): 绘制从(x0, y0)(x1, y1)的直线。
  • ST7789.hline(x, y, length, color): 绘制长度为length的水平线。
  • ST7789.vline(x, y, length, color): 绘制长度为length的垂直线。
  • ST7789.rect(x, y, width, height, color): 绘制矩形。
  • ST7789.fill_rect(x, y, width, height, color): 填充矩形区域。
  • ST7789.blit_buffer(buffer, x, y, width, height): 将字节内容复制到屏幕内部内存中。

模块还提供了预定义颜色:BLACK, BLUE, RED, GREEN, CYAN, MAGENTA, YELLOW, WHITE

辅助函数

  • color565(r, g, b): 将颜色转换为2字节的RGB565格式。
  • map_bitarray_to_rgb565(bitarray, buffer, width, color=WHITE, bg_color=BLACK): 将位数组转换为适合blit操作的RGB565颜色缓冲区,用于高效打印高分辨率文本。

性能表现

与针对Arduino的高性能库比较,以及一个较慢的纯Python实现进行了对比,显示了在ESP8266和ESP32上绘制一条从(0,0)到(239,239)直线的时间差异。

库名称 ESP8266 (ms) ESP32 (ms)
Arduino-ST7789 26 23
st7789py_mpy (Python) 450 450
st7789_mpy (本驱动) 12 47

ESP32的绘制速度比ESP8266慢约4倍。

故障排查

  • IRAM溢出错误: 构建ESP8266固件时可能会遇到链接器错误。解决方法包括将st7789模块移到irom0段,在esp8266_common.ld文件的.irom0.text部分添加相应的编译指示。
  • 不支持的尺寸: 仅支持240x240和135x240分辨率的显示器。如果使用其他分辨率,可以在创建显示对象时通过xstartystart参数指定偏移量以适应非标准尺寸。

项目介绍

高速纯C语言编写的MicroPython驱动程序,适用于操控基于ST7789芯片的显示模块【此简介由AI生成】

定制我的领域