在嵌入式系统中,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)接口就能实现清屏+显示的效果;

支持功能演示

二、核心示例

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

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

2.1 核心代码

2.2核心代码演示效果


三、常量详解

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

3.1 屏幕型号常量

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

3.1.1 黑白屏幕常量分类汇总


3.1.2 屏幕常量解释

3.1.2.1 eink.MODEL_1in02d


3.1.2.2 eink.MODEL_1in54

3.1.2.3 eink.MODEL_1in54_V2

3.1.2.4 eink.MODEL_1in54b

3.1.2.5 eink.MODEL_1in54b_V2

3.1.2.6 eink.MODEL_1in54_V3

3.1.2.7 eink.MODEL_1in54c

3.1.2.8 eink.MODEL_1in54r

3.1.2.9 eink.MODEL_2in13

3.1.2.10 eink.MODEL_2in13bc

3.1.2.11 eink.MODEL_2in13d

3.1.2.12 eink.MODEL_2in13_V2

3.1.2.13 eink.2in13b_V3

3.1.2.14 eink.MODEL_2in66

3.1.2.15 eink.MODEL_2in66b

3.1.2.16 eink.MODEL_2in7

3.1.2.17 eink.MODEL_2in7b

3.1.2.18 eink.MODEL_2in9

3.1.2.19 eink.MODEL_2in9_V2

3.1.2.20 eink.MODEL_2in9bc

3.1.2.21 eink.MODEL_2in9b_V3

3.1.2.22 eink.MODEL_2in9d

3.1.2.23 eink.MODEL_3in52

3.1.2.24 eink.MODEL_3in7

3.1.2.25 eink.MODEL_3in7_U

3.1.2.26 eink.MODEL_4in2

3.1.2.27 eink.MODEL_4in2_V2

3.1.2.28 eink.MODEL_4in2bc

3.1.2.29 eink.MODEL_4in2b_V2

3.1.2.30 eink.MODEL_5in65f

3.1.2.31 eink.MODEL_5in83

3.1.2.32 eink.MODEL_5in83bc

3.1.2.33 eink.MODEL_5in83_V2

3.1.2.34 eink.MODEL_5in83b_V2

3.1.2.35 eink.MODEL_7in5

3.1.2.36 eink.MODEL_7in5_HD

3.1.2.37 eink.MODEL_7in5_V2

3.1.2.38 eink.MODEL_7in5bc

3.1.2.39 eink.MODEL_7in5b_HD

3.1.2.40 eink.MODEL_7in5b_V2

3.2 字体常量

3.2.1 eink.font_opposansm12

3.2.2 eink.font_opposansm16

3.2.3 eink.font_opposansm18

3.2.4 eink.font_opposansm20

3.2.5 eink.font_opposansm22

3.2.6 eink.font_opposansm24

3.2.7 eink.font_opposansm32

3.2.8 eink.font_opposansm12_chinese

3.2.9 eink.font_opposansm14_chinese

3.2.10 eink.font_opposansm16_chinese

3.2.11 eink.font_opposansm18_chinese

3.2.12 eink.font_opposansm20_chinese

3.2.13 eink.font_opposansm22_chinese

3.2.14 eink.font_opposansm24_chinese

3.2.15 eink.font_opposansm32_chinese

四、 函数详解

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

param

spi_device

返回值

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

result

示例

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

功能

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

参数

mode

spiid

pin_busy

pin_reset

pin_dc

pin_cs

返回值

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

result

示例

4.2 屏幕控制函数详解

4.2.1 eink.sleep()

功能

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

参数

返回值

示例

4.2.2 eink.clear(color, force)

功能

清除绘图缓冲区;

注意事项

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

参数

color

force

返回值

示例

4.2.3 eink.setWin(width, height, rotate)

功能

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

参数

width

height

rotate

返回值

示例

4.2.4 eink.getWin()

功能

获取窗口信息;

参数

返回值

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

width

height

rotate

示例

4.2.5 eink.model(m)

功能

设置墨水屏驱动型号;

注意事项

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

参数

m

返回值

示例

4.3 文本显示函数详解

4.3.1 eink.setFont(font)

功能

设置后续使用的字体;

注意事项

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

参数

font

返回值

示例

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

功能

在指定位置绘制文本;

注意事项

需要在设置字体后调用;

参数

x

y

str

color

返回值

示例

4.4 基本图形绘制函数详解

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

功能

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

注意事项

在缓冲区中绘制直线;

参数

x

y

x2

y2

color

返回值

示例

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

功能

绘制矩形;

注意事项

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

参数

x

y

x2

y2

color

fill

返回值

示例

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

功能

绘制圆形;

注意事项

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

参数

x

y

radius
 

color

fill

返回值

示例

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

y

noClear

返回值

示例

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

功能

绘制二维码;

注意事项

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

参数

x

y

str

size

返回值

示例

4.5.3 eink.bat(x, y, bat)

功能

绘制电池图标;

注意事项

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

参数

x

y

bat

返回值

示例

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

功能

绘制 XBM 格式位图;

注意事项

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

参数

x

y

w

h

data

返回值

示例

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

返回值

示例

4.5.6 eink.weather_icon(x, y, code)

功能

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

参数

X

Y

Code

返回值

示例

五、模组支持说明


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

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

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

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐