Content
0. 前言
咸鱼淘了块4.2寸的三色墨水屏,效果不错,但是没直接找到适配的库,搁置了一段时间。
后来在测试2.13寸三色墨水屏的时候,还是找到了可以直接用的库。
GxEPD2库经过些许改装,还是可以直接用的
**墨水屏IC:Hink-E042-A0
主控:ESP32-C3
如上图所示,没用什么有用的信息,甚至AI都觉得这是一款2.13寸的墨水屏。
1. 工程配置
工程创建过程已经写过,在此不多赘述PlatformIO中ESP8266使用GxEPD库和U8G2库驱动 2.9寸黑白墨水屏显示中文,注意!!!这次安装的库是GxEPD2而非GxEPD
将platformio.ini文件全部换成以下内容,可以确保完成后续操作。你也可以换成你的其他开发板。
platformio.ini
[env:esp32-c3-devkitm-1]
platform = espressif32
board = esp32-c3-devkitm-1
framework = arduino
monitor_speed = 115200
board_build.flash_mode = dio
lib_deps =
zinggjm/GxEPD2@^1.5.0
olikraus/U8g2_for_Adafruit_GFX@^1.8.0
build_flags =
-D ARDUINO_USB_MODE=1
-D ARDUINO_USB_CDC_ON_BOOT=1
2. 修改GxEPD2库
经过我的测试,如果直接使用以下代码进行初始化,可以初始化一部分屏幕,也就是2.13寸的位置,可以清楚的看到,GxEPD2_213_Z98c 这个名字是一个2.13寸的墨水屏。
你也可以用下面的代码进行初始化,不过记得要修改引脚。如果你的默认SPI引脚被占用,要创建新的SPI类来初始化。
#include <GxEPD2_3C.h>
GxEPD2_3C<GxEPD2_213_Z98c, GxEPD2_213_Z98c::HEIGHT> display(GxEPD2_213_Z98c (SS, 10, 3, 2));
打开工程目录下的这个文件,这个可以直接驱动,但是只会刷新一部分。
Epaper_Demo9\.pio\libdeps\esp32-c3-devkitm-1\GxEPD2\src\epd3c\GxEPD2_213_Z98c.h
现在来修改,让它能刷新更多内容。将这个类中的变量值修改成与我相同,这个将直接影响到屏幕的大小:
现在上传上去,会发现有一块区域无法刷新,这个是初始化命令的参数不对造成的
SSD1683芯片驱动手册
在第42页,可以看到设别初始化的过程:
-
- 硬件复位,等待至少10ms等待硬件复位完成。
-
- 软件复位,发送命令 0x12 进行复位,然后等待至少10ms,等待复位完成。
-
- 发送初始化命令,这个待会细讲
-
- 加载波形 LUT
-
- 写入图像和驱动器显示面板;
-
- 深度睡眠模式,这个不用管,咱们用不到。
- 深度睡眠模式,这个不用管,咱们用不到。
现在打开 GxEPD2_213_Z98c.cpp
,查看命令表
- 0x01 :控制行数。
- 0x11 :设置显示器方向。
- 0x3C :设置边界颜色 0x01黑 0x00白色。
- 0x18 :VCOM、温度相关 一般写入0x00或者0x80。
- 0x44 :RAMx设置命令,接下来的两个字节的数据是x的起始位置和终点位置。
- 0x45 :RAMy设置命令,接下来的四个字节的数据是y的其实位置和终点位置,但由于y是向下计数,所以有四个字节。
- 0x4E :RAMx设置命令,接下来的一个字节是RAMx的计数初值。
- 0x4F :RAMy设置命令,接下来的两个字节是RAMy的计数初值和计数终值。
找到下面这个代码,替换以下内容:
_writeCommand(0x01); //Driver output control
_writeData(0xF9);
_writeData(0x00);
_writeData(0x00);
更改为:
_writeCommand(0x01); //Driver output control 控制行数
_writeData(0x2B);
_writeData(0x01);
_writeData(0x00);
注意!!!不要全换
3. 使用效果
使用效果如下,看多了黑白墨水屏,感觉红色还不错: