墨水屏


WRCeKA.md.jpg

咸鱼淘的,15一套,三色的18一套,兼容微雪驱动,拆机屏幕,质量的确没有微雪的屏幕好,但还够用,要及时清屏,防止有残影。
微雪电子官网

2.13寸黑白屏幕常用函数:

WDvGIx.md.jpg

epd1in54.ino:使用Arduino IDE打开即可;
epd1in54.cpp(.h):是墨水屏的驱动程序;
epdif.cpp(.h):是硬件接口定义,里面封装了读写管脚电平,SPI传输数据,以及管脚初始化;
font8.cpp、font12.cpp、font16.cpp、font20.cpp、font24.cpp、fonts.h:为不同大小字符的模;
imagedata.cpp(.h):是图片数据,这个可以通过Img2Lcd(在开发资料中可下载)把2位深度的BMP图片转换成数组。
程序分为底层硬件接口、中间层墨水屏驱动、上层应用;

底层硬件接口:

在epdif.cpp(.h)两个文件中定义了硬件接口,并封装好读写管脚电平、延时、SPI传输等函数。

1、写管脚电平

int DigitalWrite(int pin,int value)

2、读管脚电平

int DigitalRead(int pin)

3、延时

DelayMs(unsigned int delaytime)

4、SPI数据输出

SpiTransfer(unsigned char data)

5、硬件初始化

int IfInit(void)

中间层墨水屏驱动:

1、实例化墨水屏

Epd epd;

2、墨水屏初始化,再屏幕开始工作时和退出睡眠模式之后调用
1.54inch e-Paper、1.54inch e-Paper V2、2.13inch e-Paper、2.13inch e-Paper V2、2.13inch e-Paper (D)、2.9inch e-Paper、2.9inch e-Paper (D)

epd.Init(lut_full_update); //全刷初始化
epd.Init(lut_partial_update); //局刷初始化

其他型号

epd.Init();

3、清屏,把墨水屏刷成白色

epd.clear();

可能某些程序里面会被拆分成两句,但是他们最终的效果都是一样的:

epd.ClearFrameMemory(0xFF); 
epd.DisplayFrame();//打开显示

4、传输一帧的图片数据并显示

void Display(const unsigned char* frame_buffer);
void DisplayFrame(const unsigned char* frame_buffer_black, const unsigned char* frame_buffer_red); //三色屏幕

5、睡眠

epd.Sleep();

进入睡眠模式,墨水屏讲进入超低耗电,如果长时间不用需要刷白保存,否则长时间会有残影。

上层应用:

上层应用也就是我们的需要用墨水屏实现的功能,一般就是画图、字符等功能,也就是epdpaint.cpp里面定义的功能
首先需要讲解一下缓存的坐标系,为了传输方便通常吧坐上定位原点,往右X轴增加,往下Y轴增加。只需要看public下函数即可。
1、初始化图片缓存

Paint(unsigned char* image, int width, int height);

第一个参数是图片缓存,第二个参数是定义图片长度,第三个参数定义图片高度,你可能会在程序中看到如下

Paint paint(image, 0, 0);    // width should be the multiple of 8

第二、三个参数这里设置成0,是因为下面还可以设置。
2、设置高宽、获取高宽、设置翻转角度、获取翻转角度

int  GetWidth(void); //得到宽度
void SetWidth(int width);//设置宽度
int  GetHeight(void);//得到高度
void SetHeight(int height);//设置高度
int  GetRotate(void);//得到翻转角度
void SetRotate(int rotate);//设置翻转角度
···
3、获取图像缓存
```c
unsigned char* GetImage(void);

4、画点

void DrawPixel(int x, int y, int colored);

在坐标(x,y)
5、写字符

void DrawCharAt(int x, int y, char ascii_char, sFONT* font, int colored);

在(x,y)这一点为左顶点写字符ascii_char,字体大小为font,颜色为colored
6、写字符串

void DrawStringAt(int x, int y, const char* text, sFONT* font, int colored);

在(x,y)这一点为左顶点写字符串text,字体大小为font,颜色为colored
7、画线

void DrawLine(int x0, int y0, int x1, int y1, int colored);

以(x0,y0)为起点,(x1,y1)为终点画一条线,斜率任意;
8、画横线

void DrawHorizontalLine(int x, int y, int width, int colored);

以(x0,y0)为起点,(x1,y1)为终点画一条横线,速度比DrawLine()快
9、画竖线

void DrawVerticalLine(int x, int y, int height, int colored);

以(x0,y0)为起点,(x1,y1)为终点画一条竖线,速度比DrawLine()快
10、矩形,画空心框

void DrawRectangle(int x0, int y0, int x1, int y1, int colored);

以(x0,y0)为起点,(x1,y1)为终点画一个框,边的颜色为colored
11、填充矩形,画实心框

void DrawFilledRectangle(int x0, int y0, int x1, int y1, int colored);

以(x0,y0)为起点,(x1,y1)为终点画一个框,并且内部填充,颜色为colored
12、画空心圆

void DrawCircle(int x, int y, int radius, int colored);

以(x,y)为圆心,radius为半斤画一个空心圆,颜色为colored
13、实心圆

void DrawFilledCircle(int x, int y, int radius, int colored);

以(x,y)为圆心,radius为半斤画一个实心心圆,颜色为colored

PS制作散点图

取模

2.13寸三色墨水屏(不兼容微雪的程序,但可参考)

微雪:2.13inch e-Paper HAT (B)

图片素材制作:首先用PS制作三色散点图,然后用PS将三色(黑白红)分两类,一张黑白,一张红白(使用PS吸管工具颜色替换,先将三色图中红色替换为白色,制成黑白图片;再将三色图中黑色替换为白色)实际上三色墨水屏是通过两张图片叠加而成的。
[WRpUQs.md.jpg


文章作者: 旧时南风
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 旧时南风 !
评论
  目录