本仓库 fork 自AntonVanke/MicroPython-uFont并进行了一些优化。
Micropython 的字体模块,可以用来显示 UTF16 编码的Unicode字符。
- 运行
micropython的开发板,且micropython>=1.17 - 使用
SSD1306驱动芯片的OLED屏幕或者是ST7735驱动芯片的LCD屏幕亦或是1.54英寸的e-Paper(只要是使用FrameBuffer的屏幕都支持,但本项目提供的驱动只有这三种) - 如果想要在
OLED或者e-Paper上使用ufont显示支持GB2312的所有字符,则至少230Kbyte的空闲 ROM 空间和20 Kbyte的空闲内存 如果想要在ST7735上使用ufont显示支持GB2312的所有字符,则至少230Kbyte的空闲 ROM 空间和100 Kbyte的空闲内存
该方法不会改变主机的文件系统,但运行速度很慢。
本人已经去 micropython 的仓库提 issue 了,现版本的 mpremote 应该支持显示 Unicode 字符了。 如果显示Unicode会崩溃的话,请把print中的内容都换成ASCII字符。
-
准备运行
micropython的开发板和一个SSD1306的OLED屏幕,并完成连接 -
克隆或下载仓库到 PC 机本地
-
打开
demos/remake_ssd1306_demo.py# 请修改为对应引脚 i2c = I2C(id=0, scl=Pin(17), sda=Pin(16))
-
下载官方的 mpremote 工具
pip3 install mpremote -
挂载代码目录到主机(请确保运行命令时路径处于代码目录,串口不被其他程序占用)
mpremote mount . -
运行简单演示
>>> import demos.remake_ssd1306_demo.py
-
准备运行
micropython的开发板和一个SSD1306的OLED屏幕,并完成连接 -
克隆或下载仓库到 PC 机本地
-
将
demos/ssd1306_demo.py用编辑器打开# 修改为对应的 Pin i2c = I2C(scl=Pin(2), sda=Pin(3)) # Line 29
-
依次将
demos/ssd1306_demo.py、drivers/ssd1306.py、ufont.py、16x16ForDemos.bmf上传到开发板根目录,运行ssd1306_demo.py即可
仅需三步就能使用ufont:
# 第一步:导入 ufont 库
import ufont
···
# 第二步:加载字体
font = ufont.BMFont("unifont-14-12917-16.v3.bmf")
···
# 第三步:显示文字
font.text(display, "你好", 48, 16, show=True)text(display, # 显示对象
string: str, # 显示文字
x: int, # 字符串左上角 x 轴
y: int, # 字符串左上角 y 轴
color: int = 0xFFFF, # 字体颜色(RGB565)
bg_color: int = 0, # 字体背景颜色(RGB565)
font_size: int = None, # 字号大小
half_char: bool = True, # 半宽显示 ASCII 字符
auto_wrap: bool = False, # 自动换行
show: bool = True, # 实时显示
clear: bool = False, # 清除之前显示内容
alpha_color: bool = 0, # 透明色(RGB565) 当颜色与 alpha_color 相同时则透明
reverse: bool = False, # 逆置(MONO)
color_type: int = -1, # 色彩模式 0:MONO 1:RGB565
line_spacing: int = 0, # 行间距
**kwargs)在 text 函数中第一个参数为显示对象,如果要使用你自己的驱动文件,你需要创建一个继承自framebuf.FrameBuffer的类并实现以下属性:
# 显示器像素宽高
width: int
height: int
# 帧缓存
buffer: bytearray
# 清除帧缓存数据并清屏
def clear(self):
pass
# 将帧缓存同步到GDDRAM
def show(self):
pass单色显示器帧缓存长度为 ceil(width*height/8) RGB565 显示器帧缓存长度为 width*height*2
推荐在原有驱动的基础上创建一个中间类用来适配就可以了 示例:
class ST7789_Compatibility(framebuf.FrameBuffer):
def __init__(self, st7789: ST7789) -> None:
self.st7789 = st7789
st7789.set_fullscreen()
self.width = st7789.width
self.height = st7789.height
self.buffer = bytearray(self.width * self.height * 2)
super().__init__(self.buffer, self.width, self.height, framebuf.RGB565)
def clear(self):
self.fill(0)
self.st7789.write_gddram(self.buffer)
def show(self):
self.st7789.write_gddram(self.buffer)MicroPython-uFont-Tools/如何生成点阵字体文件.md at master · AntonVanke/MicroPython-uFont-Tools · GitHub