跳转至

eink - 墨水屏操作库

作者:江访

一、概述

eink 墨水屏操作库是 LuatOS 的电子墨水屏驱动库,支持多种尺寸和型号的电子墨水屏,提供低功耗的显示解决方案;

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

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

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

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

4、目前大部分型号都支持 eink.font_opposansm12 中文 12 号字体,具体可以查看选型手册中合宙LuatOS固件章节对应型号是否支持eink库和12号中文字体;

5、通过 eink.print(x, y, str, colored)接口显示字符串,不管中文还是英文,显示内容以设置的坐标为左下角;

支持功能演示


显示类型
说明
效果
相关函数
文字效果
文本


eink.print(x, y, str, colored)

线

eink.line(x, y, x2, y2, colored)

空心圆

eink.circle(x, y, radius, colored, 0)
实心园

eink.circle(x, y, radius, colored, 1)
矩形框

eink.rect(x, y, x2, y2, colored, 0)
实心矩形

eink.rect(x, y, x2, y2, colored, 1)

电池图标

eink.bat(x, y, bat)
二维码


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

二、核心示例

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

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

3、更加完整和详细的 demo,请参考 LuatOS 仓库 中各个产品目录下的 demo/eink

2.1 核心代码

-- 本核心示例演示eink库的基本使用流程:
-- 1、初始化SPI设备
-- 2、初始化墨水屏
-- 3、设置显示窗口和字体
-- 4、绘制文本和图形
-- 5、刷新显示到屏幕

-- 按接线引脚正确配置GPIO号
local spi_id = 0
local pin_cs = 31
local pin_dc = 30
local pin_busy = 32
local pin_reset = 29

-- 主函数
local function main()
    -- 注意:eink初始化之前需要先初始化spi,使用spi对象方式初始化
    spi_eink = spi.deviceSetup(spi_id, pin_cs, 0, 0, 8, 20 * 1000 * 1000, spi.MSB, 1, 1)

    -- 初始化接到spi0的eink.MODEL_1in54_V2
    eink.init(eink.MODEL_1in54_V2,
        { port = "device", pin_dc = pin_dc, pin_busy = pin_busy, pin_rst = pin_reset },
        spi_eink)

    -- 设置显示窗口和方向
    eink.setWin(200, 200, 0)
    eink.clear(1, true)

    -- 绘制外边框(水平+垂直线组合)
    eink.line(5, 5, 195, 5, 0)         -- 上边框水平线
    eink.line(5, 195, 195, 195, 0)     -- 下边框水平线
    eink.line(5, 5, 5, 195, 0)         -- 左边框垂直线
    eink.line(195, 5, 195, 195, 0)     -- 右边框垂直线

    -- 标题区域(22号英文字体)
    eink.setFont(eink.font_opposansm22)
    eink.rect(10, 10, 190, 40, 0, 0)         -- 标题背景(无斜线)

    eink.print(35, 34, "LuatOS-eink", 0)     -- 黑色文字

    -- 区域分隔线(水平)
    eink.line(10, 50, 190, 50, 0)       -- 标题与内容分隔线
    eink.line(100, 55, 100, 190, 0)     -- 左右区域分隔线(垂直)

    -- 左侧区域(左半屏)
    -- 1. 文本演示,中文目前仅支持12号中文字体
    eink.setFont(eink.font_opposansm12_chinese)
    eink.print(15, 65, "1. 字体演示", 0)
    eink.print(20, 85, "12号字体示例", 0) 

    -- 2. 矩形与线条演示
    eink.print(15, 110, "2. 图形演示", 0)
    eink.circle(33, 135, 15, 0, 0)        -- 空心圆形
    eink.circle(73, 135, 15, 0, 1)        -- 实心圆形
    eink.rect(20, 160, 60, 185, 0, 0)     -- 空心矩形
    eink.rect(70, 160, 90, 185, 0, 1)     -- 实心矩形

    -- 右侧区域(右半屏)
    -- 3. 二维码演示
    eink.print(110, 65, "3. 二维码", 0)
    eink.qrcode(115, 70, "https://docs.openluat.com/osapi/core/eink/", 69)

    -- 4. 电池与位图演示
    eink.print(110, 160, "4. 状态图标", 0)
    eink.bat(120, 170, 3750)     -- 电池图标
    eink.print(150, 180, "电量", 0)

    -- 刷新屏幕
    eink.show(0, 0, true)
end

-- 运行主函数
sys.taskInit(main)

2.1 核心代码演示效果

三、常量详解

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

3.1 屏幕型号常量

3.1.1 eink.MODEL_1in02d

参数含义:1.02d型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_1in02d)

3.1.2 eink.MODEL_1in54

参数含义:1.54寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_1in54)

3.1.3 eink.MODEL_1in54_V2

参数含义:1.54_V2型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_1in54_V2)

3.1.4 eink.MODEL_1in54b

参数含义:1.54b型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_1in54b)

3.1.5 eink.MODEL_1in54b_V2

参数含义:1.54b_V2型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_1in54b_V2)

3.1.6 eink.MODEL_1in54_V3

参数含义:1.54_V3型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_1in54_V3)

3.1.7 eink.MODEL_1in54c

参数含义:1.54c型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_1in54c)

3.1.8 eink.MODEL_1in54r

参数含义:1.54寸三色屏152*152
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_1in54r)

3.1.9 eink.MODEL_2in13

参数含义:2.13寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in13)

3.1.10 eink.MODEL_2in13bc

参数含义:2.13bc型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in13bc)

3.1.11 eink.MODEL_2in13d

参数含义:2.13d型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in13d)

3.1.12 eink.MODEL_2in13_V2

参数含义:2.13V2型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in13_V2)

3.1.13 eink.MODEL_2in54b_V3

参数含义:2.13b_V3型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in54b_V3)

3.1.14 eink.MODEL_2in66

参数含义:2.66寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in66)

3.1.15 eink.MODEL_2in66b

参数含义:2.66b型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in66b)

3.1.16 eink.MODEL_2in7

参数含义:2.7寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in7)

3.1.17 eink.MODEL_2in7b

参数含义:2.7b型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in7b)

3.1.18 eink.MODEL_2in9

参数含义:2.9寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in9)

3.1.19 eink.MODEL_2in9_V2

参数含义:2.9_V2型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in9_V2)

3.1.20 eink.MODEL_2in9bc

参数含义:2.9bc型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in9bc)

3.1.21 eink.MODEL_2in9b_V3

参数含义:2.9b_V3型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in9b_V3)

3.1.22 eink.MODEL_2in9d

参数含义:2.9d型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_2in9d)

3.1.23 eink.MODEL_3in52

参数含义:3.52寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_3in52)

3.1.24 eink.MODEL_3in7

参数含义:3.7寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_3in7)

3.1.25 eink.MODEL_3in7_U

参数含义:3.7寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_3in7_U)

3.1.26 eink.MODEL_4in2

参数含义:4.2寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_4in2)

3.1.27 eink.MODEL_4in2_V2

参数含义:4.2V2(ssd1683)型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_4in2_V2)

3.1.28 eink.MODEL_4in2bc

参数含义:4.2b型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_4in2bc)

3.1.29 eink.MODEL_4in2b_V2

参数含义:4.2V2型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_4in2b_V2)

3.1.30 eink.MODEL_5in65f

参数含义:5.65f型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_5in65f)

3.1.31 eink.MODEL_5in83

参数含义:5.83寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_5in83)

3.1.32 eink.MODEL_5in83bc

参数含义:5.83bc型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_5in83bc)

3.1.33 eink.MODEL_5in83_V2

参数含义:5.83V2型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_5in83_V2)

3.1.34 eink.MODEL_5in83b_V2

参数含义:5.83bV2型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_5in83b_V2)

3.1.35 eink.MODEL_7in5

参数含义:7.5寸型号墨水屏;
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_7in5)

3.1.36 eink.MODEL_7in5_HD

参数含义:7.5HD型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_7in5_HD)

3.1.37 eink.MODEL_7in5_V2

参数含义:7.5V2型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_7in5_V2)

3.1.38 eink.MODEL_7in5bc

参数含义:7.5bc型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_7in5bc)

3.1.39 eink.MODEL_7in5b_HD

参数含义:7.5b_HD型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_7in5b_HD)

3.1.40 eink.MODEL_7in5b_V2

参数含义:7.5b_V2型号墨水屏
数据类型:number
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数
参数示例:eink.model(eink.MODEL_7in5b_V2)

3.2 字体常量

3.2.1 eink.font_opposansm12

参数含义:12号英文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm12)

3.2.2 eink.font_opposansm16

参数含义:16号英文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm16)

3.2.3 eink.font_opposansm18

参数含义:18号英文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm18)

3.2.4 eink.font_opposansm20

参数含义:20号英文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm20)

3.2.5 eink.font_opposansm22

参数含义:22号英文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm22)

3.2.6 eink.font_opposansm24

参数含义:24号英文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm24)

3.2.7 eink.font_opposansm32

参数含义:32号英文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm32)

3.2.8 eink.font_opposansm12_chinese

参数含义:12号中文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm12_chinese)

3.2.9 eink.font_opposansm14_chinese

参数含义:14号中文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm14_chinese)

3.2.10 eink.font_opposansm16_chinese

参数含义:16号中文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm16_chinese)

3.2.11 eink.font_opposansm18_chinese

参数含义:18号中文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm18_chinese)

3.2.12 eink.font_opposansm20_chinese

参数含义:20号中文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm20_chinese)

3.2.13 eink.font_opposansm22_chinese

参数含义:22号中文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm22_chinese)

3.2.14 eink.font_opposansm24_chinese

参数含义:24号中文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(eink.font_opposansm24_chinese)

3.2.15 eink.font_opposansm32_chinese

参数含义:32号中文字体;
数据类型:font
取值范围:固定字体对象;
是否必选:常量,直接使用;
注意事项:用于setFont函数的font参数
参数示例:eink.setFont(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

参数含义:墨水屏型号;
数据类型:number
取值范围:eink.MODEL_*系列常量,见常量详解的3.1.13.1.40屏幕型号常量章节;
是否必选:必须传入此参数;
注意事项:需要根据实际使用的屏幕型号选择;
参数示例:eink.MODEL_4in2bc

param

参数含义:附加参数表;
数据类型:table
取值范围:包含pin_busyportpin_dcpin_rst等字段
是否必选:必须传入此参数;
注意事项:具体参数取决于屏幕型号;
参数示例:
         {
            参数含义:通信端口类型;
            数据类型:string
            取值范围:10,1,2表示具体的标准SPI硬件端口ID
                     2"device"表示具体的标准SPI硬件端口对象
                        device的方式是通过spi.deviceSetup()先将SPI接口设置为SPI对象
                        并赋值给一个全局变量,然后再将全局变量放到eink.init()
                        第三个参数spi_device,在此需要赋值port = "device" 
            是否必选:必须传入此参数;
            注意事项:暂无;
            参数示例:port = "device",
            port = ,

            参数含义:忙状态检测引脚;
            数据类型:number
            取值范围:有效的GPIO端口号
            是否必选:必选,不填无法检测屏幕状态;
            注意事项:暂无;
            使用示例:pin_busy = 1
            pin_busy = ,

            参数含义:数据/命令选择引脚;
            数据类型:number
            取值范围:有效的GPIO端口号,推荐接SPI端口对应的MISO引脚
            是否必选:必须传入此参数;
            注意事项:用于区分数据传输和命令传输;
            参数示例:pin_dc = 17
            pin_dc = ,

            参数含义:复位引脚;
            数据类型:number
            取值范围:有效的GPIO端口号
            是否必选:必须传入此参数;
            注意事项:用于复位屏幕;
            参数示例:pin_rst = 19
            pin_rst = ,
         }

spi_device

参数含义:SPI设备对象
数据类型:userdata
取值范围:spi.deviceSetup返回的标准SPI硬件端口对象
是否必选:当port="device"时必须传入;
注意事项:需要先初始化SPI设备
参数示例:spi_eink

返回值

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

result

含义说明:初始化结果;
数据类型:boolean
取值范围:true-成功,false-失败;
注意事项:返回true表示初始化成功
返回示例:local result = eink.init(tp, param, spi_device)
         if result == true then
             eink.print(20, 20, "LuatOS-eink TEST1", 0)
         end

示例

-- 按接线引脚正确配置GPIO号
local spi_id = 0
local pin_cs = 31
local pin_dc = 30
local pin_busy = 32
local pin_reset = 29

-- 注意:eink初始化之前需要先初始化spi,使用spi对象方式初始化
spi_eink = spi.deviceSetup(spi_id, pin_cs, 0, 0, 8, 20 * 1000 * 1000, spi.MSB, 1, 1)

-- 初始化接到spi0的eink.MODEL_1in54_V2
eink.init(eink.MODEL_1in54_V2,
    { port = "device", pin_dc = pin_dc, pin_busy = pin_busy, pin_rst = pin_reset },
    spi_eink)

-- 设置显示窗口和方向
eink.setWin(200, 200, 0)

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

功能

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

参数

full

参数含义:刷新模式;
**数据类型**number
**取值范围**0-全屏刷新,1-局部刷新;
**是否必选**:必须传入此参数;
**注意事项**:默认全屏刷新;
**参数示例**0

spiid

参数含义:SPI编号
**数据类型**number
**取值范围**0,1,2...
**是否必选**:必须传入此参数;
**注意事项**:默认是0
**参数示例**0

pin_busy

参数含义:忙状态检测引脚,高电平忙,低电平空闲;
数据类型:number
取值范围:有效的GPIO端口号
是否必选:必选,不填无法检测屏幕状态,与屏幕通信超时不能正常刷新;
注意事项:暂无;
使用示例:1

pin_reset

参数含义:Reset复位管脚
数据类型:number
取值范围:有效的GPIO端口号
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:11

pin_dc

参数含义:DC数据命令选择管脚
数据类型:number
取值范围:有效的GPIO端口号
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:12

pin_cs

参数含义:CS使能管脚
数据类型:number
取值范围:有效的GPIO端口号
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:13

返回值

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

result

含义说明:初始化结果;
数据类型:boolean
取值范围:true-成功,false-失败;
注意事项:返回true表示初始化成功
返回示例:true

示例

-- 按接线引脚正确配置GPIO号
local spi_id = 0
local pin_cs = 31
local pin_dc = 30
local pin_busy = 32
local pin_reset = 29

-- 注意:eink初始化之前需要先初始化spi
spi.setup(spi_id, pin_cs, 0, 0, 8, 20 * 1000 * 1000, spi.MSB, 1, 1)

-- 手动设置墨水屏型号
eink.model(eink.MODEL_1in54_V2)

-- 初始化eink
eink.setup(0, spi_id, pin_busy, pin_reset, pin_dc, pin_cs)

4.2 屏幕控制函数详解

4.2.1 eink.sleep()

功能

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

参数

返回值

示例

-- 进入休眠模式
eink.sleep()

4.2.2 eink.clear(color, force)

功能

清除绘图缓冲区,默认进行一次清屏;

参数

color

参数含义:刷屏颜色;
数据类型:number
取值范围:0-10表示黑色背景,1表示白色背景,默认1白色;
是否必选:可选传入此参数;
注意事项:暂无;
参数示例:1

force

参数含义:是否立即清屏;
数据类型:boolean
取值范围:true-不清屏,false-清屏;
是否必选:可选传入此参数;
注意事项:默认false
参数示例:false

返回值

示例

-- 缓冲区按白色填充,不进行请屏
eink.clear(1, true)

4.2.3 eink.setWin(width, height, rotate)

功能

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

参数

width

参数含义:窗口宽度;
**数据类型**number
**取值范围**:大于0的整数,默认width为200
**是否必选**:必须传入此参数;
**注意事项**:需要根据屏幕实际尺寸设置;
**参数示例**200

height

参数含义:窗口高度;
**数据类型**number
**取值范围**:大于0的整数,默认height为200
**是否必选**:必须传入此参数;
**注意事项**:需要根据屏幕实际尺寸设置;
**参数示例**200

rotate

参数含义:显示方向;
**数据类型**number
**取值范围**0/1/2/3,默认rotate为0
**是否必选**:必须传入此参数;
**注意事项**0-0度,1-90度,2-180度,3-270度;
**参数示例**0

返回值

示例

-- 设置显示窗口
eink.setWin(200, 200, 0)

4.2.4 eink.getWin()

功能

获取窗口信息;

参数

返回值

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

width

含义说明:窗口宽度;
**数据类型**number
**取值范围**:取决于设置;
**注意事项**:暂无;
**返回示例**200

height

含义说明:窗口高度;
**数据类型**number
**取值范围**:取决于设置;
**注意事项**:暂无;
**返回示例**200

rotate

含义说明:旋转方向;
**数据类型**number
**取值范围**0-3
**注意事项**:暂无;
**返回示例**0

示例

-- 获取窗口信息
local w, h, r = eink.getWin()
log.info("eink", "窗口:", w, h, r)

4.2.5 eink.model(m)

功能

设置墨水屏驱动型号;

注意事项

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

参数

m

参数含义:型号名称;
**数据类型**number
**取值范围**eink.MODEL_*系列常量,见常量详解的3.1.13.1.40屏幕型号常量章节;
**是否必选**:必须传入此参数;
**注意事项**:需要与硬件匹配;
**参数示例**eink.MODEL_1in54_V2

返回值

示例

-- 设置墨水屏型号
eink.model(eink.MODEL_1in54_V2)

4.3 文本显示函数详解

4.3.1 eink.setFont(font)

功能

设置后续使用的字体;

注意事项

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

参数

font

参数含义:字体对象;
数据类型:userdata
取值范围:eink.font_*系列常量,见常量详解的3.2.13.2.15章节;
是否必选:必须传入此参数;
注意事项:需要根据显示内容选择合适的字体;
参数示例:eink.setFont(eink.font_opposansm12_chinese)

返回值

示例

-- 设置12号中文字体,对之后的print有效
eink.setFont(eink.font_opposansm12_chinese)

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

功能

在指定位置绘制文本;

注意事项

需要在设置字体后调用;

参数

x

参数含义:文本X坐标
数据类型:number
取值范围:0-窗口宽度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:10

y

参数含义:文本Y坐标
数据类型:number
取值范围:0-窗口高度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:20

str

参数含义:要显示的字符串;
数据类型:string
取值范围:任意字符串;
是否必选:必须传入此参数;
注意事项:需要设置合适的字体;
参数示例:"LuatOS"

colored

参数含义:文本颜色;
数据类型:number
取值范围:01,默认0
是否必选:可选传入此参数;
注意事项:0-黑色,1-白色;
参数示例:0

返回值

示例

-- 绘制黑色文本
eink.print(10, 20, "LuatOS", 0)

-- 绘制白色文本
eink.print(10, 40, "电子墨水屏", 1)

4.4 基本图形绘制函数详解

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

功能

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

注意事项

在缓冲区中绘制直线;

参数

x

参数含义:起点X坐标
数据类型:number
取值范围:0-窗口宽度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:0

y

参数含义:起点Y坐标
数据类型:number
取值范围:0-窗口高度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:0

x2

参数含义:终点X坐标
数据类型:number
取值范围:0-窗口宽度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:10

y2

参数含义:终点Y坐标
数据类型:number
取值范围:0-窗口高度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:20

colored

参数含义:线条颜色;
数据类型:number
取值范围:01,默认0
是否必选:可选传入此参数;
注意事项:0-黑色,1-白色;
参数示例:0

返回值

示例

-- 绘制黑色直线
eink.line(0, 0, 10, 20, 0)

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

功能

绘制矩形;

注意事项

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

参数

x

参数含义:左上顶点X坐标
数据类型:number
取值范围:0-窗口宽度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:0

y

参数含义:左上顶点Y坐标
数据类型:number
取值范围:0-窗口高度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:0

x2

参数含义:右下顶点X坐标
数据类型:number
取值范围:0-窗口宽度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:10

y2

参数含义:右下顶点Y坐标
数据类型:number
取值范围:0-窗口高度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:20

colored

参数含义:矩形颜色;
数据类型:number
取值范围:01,默认0
是否必选:可选传入此参数;
注意事项:0-黑色,1-白色;
参数示例:0

fill

参数含义:是否填充;
数据类型:number
取值范围:0-不填充,1-填充;
是否必选:可选传入此参数;
注意事项:默认0-不填充;
参数示例:1

返回值

示例

-- 绘制空心矩形
eink.rect(0, 0, 10, 20)

-- 绘制实心矩形
eink.rect(0, 0, 10, 20, 0, 1)

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

功能

绘制圆形;

注意事项

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

参数

x

参数含义:圆心X坐标
数据类型:number
取值范围:0-窗口宽度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:0

y

参数含义:圆心Y坐标
数据类型:number
取值范围:0-窗口高度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:0

radius

参数含义:圆半径;
数据类型:number
取值范围:大于0的整数;
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:10

colored

参数含义:圆形颜色;
数据类型:number
取值范围:01,默认0
是否必选:可选传入此参数;
注意事项:0-黑色,1-白色;
参数示例:0

fill

参数含义:是否填充;
数据类型:number
取值范围:0-不填充,1-填充;
是否必选:可选传入此参数;
注意事项:默认0-不填充;
参数示例:1

返回值

示例

-- 绘制空心圆形
eink.circle(0, 0, 10)

-- 绘制实心圆形
eink.circle(0, 0, 10, 1, 1)

4.5 高级功能函数详解

4.5.1 eink.show(x, y, noClear)

功能

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

注意事项

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

参数

x

参数含义:输出的X坐标
数据类型:number
取值范围:0-窗口宽度,默认0
是否必选:可选传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:0

y

参数含义:输出的Y坐标
数据类型:number
取值范围:0-窗口高度,默认0
是否必选:可选传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:0

noClear

参数含义:是否不清屏;
数据类型:boolean
取值范围:true-不清屏,false-清屏,默认false-清屏;
是否必选:可选传入此参数;
注意事项:默认false-清屏,有的屏幕调用显示会进行一次清屏,如果闪烁次数过多,参数可以填true
参数示例:false

返回值

示例

-- 刷新显示
eink.show()

-- 在指定位置刷新显示,且不清屏
eink.show(10, 10, true)

4.5.2 eink.draw(buff, buff2, noclear)

功能

直接输出数据到屏幕;

注意事项

支持双色数据输出;

参数

buff

参数含义:zbuff指针
数据类型:userdata
取值范围:有效的zbuff对象
是否必选:必须传入此参数;
注意事项:需要先创建zbuff
参数示例:zbuff.create({1024, 8})

buff2

参数含义:第二个zbuff指针
数据类型:userdata
取值范围:有效的zbuff对象
是否必选:可选传入此参数;
注意事项:用于双色显示;
参数示例:zbuff.create({1024, 8})

noclear

参数含义:是否不清屏;
数据类型:boolean
取值范围:true-不清屏,false-清屏;
是否必选:可选传入此参数;
注意事项:默认false-清屏;
参数示例:false

返回值

示例

-- 输出单色数据
local buff1 = zbuff.create({64, 64, 16}, 0x0000)
eink.draw(buff)

-- 输出双色数据
local buff1 = zbuff.create({64, 64, 16}, 0x0000)
local buff2 = zbuff.create({64, 64, 16}, 0xFFFF)
eink.draw(buff1, buff2)

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

功能

绘制二维码;

注意事项

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

参数

x

参数含义:二维码左上角X坐标
数据类型:number
取值范围:0至屏幕宽度减1
是否必选:必须传入此参数;
注意事项:坐标从屏幕左上角开始;
参数示例:10

y

参数含义:二维码左上角Y坐标
数据类型:number
取值范围:0至屏幕高度减1
是否必选:必须传入此参数;
注意事项:坐标从屏幕左上角开始;
参数示例:10

str

参数含义:二维码内容;
数据类型:string
取值范围:任意字符串;
是否必选:必须传入此参数;
注意事项:内容长度影响二维码大小;
参数示例:"https://docs.openluat.com"

size

参数含义:二维码尺寸,显示大小为正方形,尺寸 = size*size
数据类型:number
取值范围:正整数,size建议填大于21的参数
是否必选:必须传入此参数;
注意事项:二维码等级1-40级,每级尺寸按(8+4*二维码等级+9)计算,
         1级尺寸212级尺寸253级尺寸29……40级尺寸177,假如设置尺寸为24
         24大于1级尺寸小于2级尺寸,那么会显示一个21*21像素的二维码,外面3个像素的白框。         
参数示例:21

返回值

示例

-- 绘制二维码
eink.qrcode((10, 10, "https://docs.openluat.com", 49)

4.5.4 eink.bat(x, y, bat)

功能

绘制电池图标;

注意事项

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

参数

x

参数含义:电池图标左上角X坐标
数据类型:number
取值范围:0-窗口宽度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:10

y

参数含义:电池图标左上角Y坐标
数据类型:number
取值范围:0-窗口高度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:10

bat

参数含义:电池电压,单位mV
数据类型:number
取值范围:2500 - 4200,对应电池图标为空 - 完全填充;
是否必选:必须传入此参数;
注意事项:适合大致电量显示;
参数示例:3800

返回值

示例

-- 绘制电池图标
eink.bat(10, 10, 3700)

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

功能

绘制 XBM 格式位图;

注意事项

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

参数

x

参数含义:位图左上角X坐标
数据类型:number
取值范围:0至屏幕宽度减1
是否必选:必须传入此参数;
注意事项:坐标从屏幕左上角开始;
参数示例:0

y

参数含义:位图左上角Y坐标
数据类型:number
取值范围:0至屏幕高度减1
是否必选:必须传入此参数;
注意事项:坐标从屏幕左上角开始;
参数示例:0

w

参数含义:位图宽度;
数据类型:number
取值范围:大于0的整数;
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:16

h

参数含义:位图高度;
数据类型:number
取值范围:大于0的整数;
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:16

data

参数含义:位图数据;
数据类型:string
取值范围:XBM格式数据字符串
是否必选:必须传入此参数;
注意事项:数据需要是XBM格式
参数示例:string.char(0x80,0x00,0x80,0x00,...)

返回值

示例

-- 取模使用PCtoLCD2002软件即可,方式:阴码 逐行 逆向
-- 绘制16x16位图
eink.drawXbm(0, 0, 16, 16, string.char(
    0x80,0x00,0x80,0x00,0x40,0x01,0x20,0x02,
    0x10,0x04,0x48,0x08,0x84,0x10,0x83,0x60,
    0x00,0x00,0xF8,0x0F,0x00,0x08,0x00,0x04,
    0x00,0x04,0x00,0x02,0x00,0x01,0x80,0x00
))

4.5.6 eink.setCtx(index)

功能

切换颜色画板, 适合多色墨水屏;

参数

index

参数含义:颜色索引;
数据类型:number
取值范围:0-黑色,1-红色;
是否必选:必须传入此参数;
注意事项:仅适合多色墨水屏;
参数示例:1

返回值

示例

-- 切换到红色画板
eink.setCtx(1)

4.5.7 eink.async(index)

功能

启用异步刷新模式,使用此方式需要先 require("sysplus"),之后再使用 eink.clear().wait()、 eink.show().wait()进行刷屏,异步模式会等待 BUSY 引脚变为低电平再进行实际的清屏和显示操作;

参数

index

参数含义:异步模式开关;
数据类型:number
取值范围:1-启用异步;
是否必选:必须传入此参数;
注意事项:启用异步模式使用清屏和显示时,后面需要加上.wait()
         异步模式会等待BUSY引脚变为低电平再进行实际的清屏和显示操作
参数示例:1

返回值

示例

-- 启用异步模式
eink.async(1)

-- 清除缓冲区数据
eink.clear().wait()

-- 使用异步的方式,将缓冲区数据刷新到屏幕上
eink.show().wait()

4.5.8 eink.weather_icon(x, y, code)

功能

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

参数

X

参数含义:图标左上角X坐标
数据类型:number
取值范围:0-窗口宽度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:0

Y

参数含义:图标左上角Y坐标
数据类型:number
取值范围:0-窗口高度;
是否必选:必须传入此参数;
注意事项:坐标从窗口左上角开始;
参数示例:0

Code

参数含义:天气代码;
数据类型:number
取值范围:数字代码,见下方详细说明
         100晴天
         101多云天气
         102少量云
         103晴转多云
         104阴天
         200有风天气
         201无风
         205微风
         208大风
         301阵雨
         302强阵雨/雷阵雨
         303雷阵雨
         304雷雨冰雹
         305小雨
         306中雨
         307大雨
         308暴雨
         309细雨
         310大暴雨
         311特大暴雨
         312极端暴雨
         313冻雨
         400小雪
         401中雪
         402大雪
         403暴雪
         404雨夹雪
         405雨雪交替
         406阵性雨夹雪
         407阵雪
         500薄雾
         501
         502
         503扬沙/沙尘
         504浮尘/沙尘暴
         507强沙尘暴
         508浓雾
         900高温
         901低温
         999未知天气
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:0

返回值

示例

-- 使用数字代码绘制天气图标
eink.weather_icon(10, 10, 100)      -- 晴天
eink.weather_icon(50, 10, 101)      -- 阴天  
eink.weather_icon(90, 10, 305)      -- 小雨
eink.weather_icon(130, 10, 401)     -- 中雪

五、产品支持说明

1、软件支持可以查看选型手册对应模组及固件是否支持 eink 功能或 eink 库

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