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.02寸d型号墨水屏;
数据类型: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.54寸b型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_1in54b)
3.1.5 eink.MODEL_1in54b_V2
参数含义:1.54寸b_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.54寸c型号墨水屏;
数据类型: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.13寸bc型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_2in13bc)
3.1.11 eink.MODEL_2in13d
参数含义:2.13寸d型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_2in13d)
3.1.12 eink.MODEL_2in13_V2
参数含义:2.13寸V2型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_2in13_V2)
3.1.13 eink.MODEL_2in54b_V3
参数含义:2.13寸b_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.66寸b型号墨水屏;
数据类型: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.7寸b型号墨水屏;
数据类型: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.9寸bc型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_2in9bc)
3.1.21 eink.MODEL_2in9b_V3
参数含义:2.9寸b_V3型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_2in9b_V3)
3.1.22 eink.MODEL_2in9d
参数含义:2.9寸d型号墨水屏;
数据类型: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.2寸V2(ssd1683)型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_4in2_V2)
3.1.28 eink.MODEL_4in2bc
参数含义:4.2寸b型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_4in2bc)
3.1.29 eink.MODEL_4in2b_V2
参数含义:4.2寸V2型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_4in2b_V2)
3.1.30 eink.MODEL_5in65f
参数含义:5.65寸f型号墨水屏;
数据类型: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.83寸bc型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_5in83bc)
3.1.33 eink.MODEL_5in83_V2
参数含义:5.83寸V2型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_5in83_V2)
3.1.34 eink.MODEL_5in83b_V2
参数含义:5.83寸bV2型号墨水屏;
数据类型: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.5寸HD型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_7in5_HD)
3.1.37 eink.MODEL_7in5_V2
参数含义:7.5寸V2型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_7in5_V2)
3.1.38 eink.MODEL_7in5bc
参数含义:7.5寸bc型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_7in5bc)
3.1.39 eink.MODEL_7in5b_HD
参数含义:7.5寸b_HD型号墨水屏;
数据类型:number;
取值范围:固定常量值;
是否必选:常量,直接使用;
注意事项:用于init函数的tp参数;
参数示例:eink.model(eink.MODEL_7in5b_HD)
3.1.40 eink.MODEL_7in5b_V2
参数含义:7.5寸b_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.1到3.1.40屏幕型号常量章节;
是否必选:必须传入此参数;
注意事项:需要根据实际使用的屏幕型号选择;
参数示例:eink.MODEL_4in2bc
param
参数含义:附加参数表;
数据类型:table;
取值范围:包含pin_busy、port、pin_dc、pin_rst等字段;
是否必选:必须传入此参数;
注意事项:具体参数取决于屏幕型号;
参数示例:
         {
            参数含义:通信端口类型;
            数据类型:string;
            取值范围:1、0,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-1,0表示黑色背景,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.1到3.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.1到3.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;
取值范围:0或1,默认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;
取值范围:0或1,默认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;
取值范围:0或1,默认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;
取值范围:0或1,默认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级尺寸21,2级尺寸25,3级尺寸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)初始化成功后使用