Eink墨水屏操作库的技巧策略与实现

Eink屏幕的“残影”与“刷新延迟”问题长期困扰开发者,而合理的刷新策略是改善用户体验的核心。现代Eink操作库通常内置多种刷新模式(如局部刷新、清屏刷新),并支持动态调整。本文将聚焦于操作库中刷新机制的实现原理,提供优化建议与实测对比。

一、概述

eink墨水屏操作库是LuatOS的电子墨水屏驱动库,支持微雪电子多种尺寸和型号的黑白电子墨水屏;

eink 库提供了如下几大类功能:

1、墨水屏初始化配置:支持多种型号的墨水屏初始化;

2、基本图形绘制:直线、圆、矩形、二维码等基本图形的绘制;

3、文本显示:支持中英文字体显示;

4、位图显示:支持 XBM 格式位图显示;

5、二维码生成:支持二维码生成和显示;

6、电池图标绘制:支持电池电量图标绘制;

注意事项:

1、墨水屏刷新速度较慢,不适合频繁更新的场景;

2、eink 初始化之前需要先初始化 SPI;

3、显示中文字体前,需要先使用 eink.setFont(font)接口进行设置,

4、目前大部分型号都只支持 eink.font_opposansm12 中文 12 号字体,

5、通过 eink.print(x, y, str, color)接口显示字符串,不管中文还是英文,

显示内容均以设置的坐标参数作为左下角进行显示;

6、未开启异步刷新 eink.async(1)的情况下,使用 eink.show()刷新缓冲区内容到屏幕,

需要等待刷新完代码才会往下执行。开启异步刷新eink.async(1)的情况下,

使用eink.show()屏幕刷新的同时代码也会往下执行;

7、部分屏幕使用 eink.clear(color, true)清除缓冲区和 eink.show(x, y, true)显示缓冲区内容这 2 个接口时,

屏幕都会执行清屏,可以只使用eink.show(x, y, true)接口就能实现清屏+显示的效果;

支持功能演示
image

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

2.1 核心代码

image

2.2核心代码演示效果

image

三、常量详解

核心库常量,顾名思义是由 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用,包含以下常量;

3.1 屏幕型号常量

屏幕型号常量都是对应的微雪的屏幕型号

3.1.1 黑白屏幕常量分类汇总

image

3.1.2 屏幕常量解释

3.1.2.1 eink.MODEL_1in02d

image

3.1.2.2 eink.MODEL_1in54

image

3.1.2.3 eink.MODEL_1in54_V2

image

3.1.2.4 eink.MODEL_1in54b

image

3.1.2.5 eink.MODEL_1in54b_V2

image

3.1.2.6 eink.MODEL_1in54_V3

image

3.1.2.7 eink.MODEL_1in54c

image

3.1.2.8 eink.MODEL_1in54r

image

3.1.2.9 eink.MODEL_2in13

image

3.1.2.10 eink.MODEL_2in13bc

image

3.1.2.11 eink.MODEL_2in13d

image

3.1.2.12 eink.MODEL_2in13_V2

image

3.1.2.13 eink.2in13b_V3

image

3.1.2.14 eink.MODEL_2in66

image

3.1.2.15 eink.MODEL_2in66b

image

3.1.2.16 eink.MODEL_2in7

image

3.1.2.17 eink.MODEL_2in7b

image

3.1.2.18 eink.MODEL_2in9

image

3.1.2.19 eink.MODEL_2in9_V2

image

3.1.2.20 eink.MODEL_2in9bc

image

3.1.2.21 eink.MODEL_2in9b_V3

image

3.1.2.22 eink.MODEL_2in9d

image

3.1.2.23 eink.MODEL_3in52

image

3.1.2.24 eink.MODEL_3in7

image

3.1.2.25 eink.MODEL_3in7_U

image

3.1.2.26 eink.MODEL_4in2

image

3.1.2.27 eink.MODEL_4in2_V2

image

3.1.2.28 eink.MODEL_4in2bc

image

3.1.2.29 eink.MODEL_4in2b_V2

image

3.1.2.30 eink.MODEL_5in65f

image

3.1.2.31 eink.MODEL_5in83

image

3.1.2.32 eink.MODEL_5in83bc

image

3.1.2.33 eink.MODEL_5in83_V2

image

3.1.2.34 eink.MODEL_5in83b_V2

image

3.1.2.35 eink.MODEL_7in5

image

3.1.2.36 eink.MODEL_7in5_HD

image

3.1.2.37 eink.MODEL_7in5_V2

image

3.1.2.38 eink.MODEL_7in5bc

image

3.1.2.39 eink.MODEL_7in5b_HD

image

3.1.2.40 eink.MODEL_7in5b_V2

image

3.2 字体常量

3.2.1 eink.font_opposansm12

image

3.2.2 eink.font_opposansm16

image

3.2.3 eink.font_opposansm18

image

3.2.4 eink.font_opposansm20

image

3.2.5 eink.font_opposansm22

image

3.2.6 eink.font_opposansm24

image

3.2.7 eink.font_opposansm32

image

3.2.8 eink.font_opposansm12_chinese

image

3.2.9 eink.font_opposansm14_chinese

image

3.2.10 eink.font_opposansm16_chinese

image

3.2.11 eink.font_opposansm18_chinese

image

3.2.12 eink.font_opposansm20_chinese

image

3.2.13 eink.font_opposansm22_chinese

image

3.2.14 eink.font_opposansm24_chinese

image

3.2.15 eink.font_opposansm32_chinese

image

四、 函数详解

4.1 初始化函数详解

4.1.1 eink.init(driver_ic, param, spi_device)

功能

eink 显示屏初始化(新接口),支持初始化时一次性设置屏幕型号,推荐使用此方式;

注意事项

初始化前必须使用 SPI 对象的方式进行 SPI 接口初始化,且 spi_id 、pin_cs 一定要按实际接线填对应引脚的 GPIO 号,否则会无显示;

在使用任何 eink 绘图功能前,必须先调用此函数初始化显示屏,且 pin_dc 、pin_busy 、pin_reset 一定要按实际接线填对应引脚的 GPIO 号,否则会无显示;

参数

driver_ic
image

param
image

spi_device
image

返回值

local result = eink.init(tp, param, spi_device)

result
image

示例
image

4.1.2 eink.setup(mode , spiid, pin_busy, pin_reset, pin_dc, pin_cs)

功能

eink 显示屏初始化(老接口),老接口不支持初始化时一次性设置屏幕型号,次选使用;

参数

mode
image

spiid
image

pin_busy
image

pin_reset
image

pin_dc
image

pin_cs
image

返回值

local result = eink.setup(full, spiid, pin_busy, pin_reset, pin_dc, pin_cs)

result
image

示例
image

4.2 屏幕控制函数详解

4.2.1 eink.sleep()

功能

进入休眠模式,休眠后需要重新初始化才能使用,显示字体需要重新使用 eink.setFont(font)设置后再使用;

参数

无

返回值

无

示例
image

4.2.2 eink.clear(color, force)

功能

清除绘图缓冲区;

注意事项

如果执行 eink.clear(color, force)接口屏幕会进行多次清屏,可以使用将 force 参数填 true;

参数

color
image

force
image

返回值

无

示例
image

4.2.3 eink.setWin(width, height, rotate)

功能

设置显示窗口像素高度、像素宽度和显示方向;

参数

width
image

height
image

rotate
image

返回值

无

示例
image

4.2.4 eink.getWin()

功能

获取窗口信息;

参数

无

返回值

local width, height, rotate = eink.getWin()

width
image

height
image

rotate
image

示例
image

4.2.5 eink.model(m)

功能

设置墨水屏驱动型号;

注意事项

用于动态切换墨水屏型号;

参数

m
image

返回值

无

示例
image

4.3 文本显示函数详解

4.3.1 eink.setFont(font)

功能

设置后续使用的字体;

注意事项

设置后会影响后续所有文本绘制操作;

参数

font
image

返回值

无

示例
image

4.3.2 eink.print(x, y, str, color)

功能

在指定位置绘制文本;

注意事项

需要在设置字体后调用;

参数

x
image

y
image

str
image

color
image

返回值

无

示例
image

4.4 基本图形绘制函数详解

4.4.1 eink.line(x, y, x2, y2, color)

功能

绘制直线,不能绘制斜线;

注意事项

在缓冲区中绘制直线;

参数

x
image

y
image

x2
image

y2
image

color
image

返回值

无

示例
image

4.4.2 eink.rect(x, y, x2, y2, color, fill)

功能

绘制矩形;

注意事项

可以绘制空心或实心矩形;

参数

x
image

y
image

x2
image

y2
image

color
image

fill
image

返回值

无

示例
image

4.4.3 eink.circle(x, y, radius, color, fill)

功能

绘制圆形;

注意事项

可以绘制空心或实心圆形;

参数

x
image

y
image

radius
image

color
image

fill
image

返回值

无

示例
image

4.5 高级功能函数详解

4.5.1 eink.show(x, y, noClear)

功能

将缓冲区图像输出到屏幕;

注意事项

所有绘图操作都是在缓冲区中进行,需要调用此函数才能显示;

如果执行 eink.show(x, y, false) 接口屏幕会进行多次清屏,可以使用将 noClear 参数填 true;

如果执行 eink.show(x, y, true) 接口屏幕会进行清屏,可以省略使用 eink.clear(color, force)接口;

参数

x
image

y
image

noClear
image

返回值

无

示例
image

4.5.2 eink.qrcode(x, y, str, size)

功能

绘制二维码;

注意事项

二维码大小会根据内容和纠错等级自动调整;

参数

x
image

y
image

str
image

size
image

返回值

无

示例
image

4.5.3 eink.bat(x, y, bat)

功能

绘制电池图标;

注意事项

根据电池电压绘制电量图标;

参数

x
image

y
image

bat
image

返回值

无

示例
image

4.5.4 eink.drawXbm(x, y, w, h, data)

功能

绘制 XBM 格式位图;

注意事项

XBM 是单色位图格式,每个 bit 位表示一个像素;

参数

x
image

y
image

w
image

h
image

data
image

返回值

无

示例
image

4.5.5 eink.async(index)

功能

启用异步刷新模式,启用后使用 eink.clear(color, force)和 eink.show(x, y, noClear)2 个接口,无需等待接口执行完毕也会执行之后的代码。在异步模式下可以使用 eink.clear().wait()和 eink.show().wait()实现同步模式的效果。

注意事项

1、异步模式下执行 eink.clear().wait() 接口,等价于同步模式下执行 eink.clear(color, false)接口

2、异步模式下执行 eink.show().wait()接口,等价于同步模式下执行 eink.show(0, 0, false) 接口

参数

index
image

返回值

无

示例

image

4.5.6 eink.weather_icon(x, y, code)

功能

根据天气代码绘制天气图标;

参数

X
image

Y
image

Code
image

返回值

无

示例
image

五、模组支持说明

1、软件是否支持,可以查看手册中 LuatOS 固件 章节对应型号是否支持 eink 核心库。

2、大部分 API 都只能在 eink.init(tp, param, spi_device)初始化成功后使用

今天的内容就分享到这里了~

posted @ 2026-02-11 15:28  电子老师傅  阅读(121)  评论(0)    收藏  举报