esp8266-waveshare-epd库介绍
微雪教程链接https://www.waveshare.net/wiki/E-Paper_ESP8266_Driver_Board
1. 硬件底层接口 (DEV_Config.h 和 DEV_Config.cpp)
- 负责硬件的初始化和底层操作,包括 GPIO 配置、SPI 通信等。
- 定义了电子纸模块所需的引脚,如时钟线(SCK)、主输出从输入线(MOSI)、片选线(CS)、复位线(RST)、数据 / 命令选择线(DC)和忙信号线(BUSY)。
- 提供了初始化模块、设置 GPIO 模式、SPI 读写等功能函数。
2. 图形绘制库 (GUI_Paint.h 和 GUI_Paint.cpp)
- 实现了各种图形绘制功能,如绘制点、线、矩形、圆形等。
- 支持显示字符、字符串、数字和时间。
- 提供了图像旋转、镜像等功能。
- 支持不同的点大小、线样式和填充方式。
3. 电子纸驱动头文件 (EPD.h)
- 包含了多种 Waveshare 电子纸模块的驱动头文件,如 1.54 寸、2.13 寸、2.7 寸、2.9 寸、4.2 寸、5.65 寸、5.83 寸、7.5 寸等不同尺寸和类型的电子纸。
#define EPD_SCK_PIN 14
#define EPD_MOSI_PIN 13
#define EPD_CS_PIN 15
#define EPD_RST_PIN 2
#define EPD_DC_PIN 4
#define EPD_BUSY_PIN 5
#define GPIO_PIN_SET 1
#define GPIO_PIN_RESET 0
GND
3V3
SCK 14 D5
SDA 13 D7
RST 2 D
DC 4 D2
CS1 15 D8
BUSY 5 D1
CS2
epd2in9、epd2in9_V2、epd2in9d、epd2in9bc、epd2in9b_V3、epd2in9b_V4
epd2in9
- 驱动屏幕类型:普通的 2.9 寸黑白电子纸显示屏。
- 特点:这种屏幕只能显示黑白两种颜色,适用于对色彩要求不高,更注重低功耗和高对比度显示的场景,如电子标签、电子书等。
epd2in9_V2
- 驱动屏幕类型:2.9 寸第二代黑白电子纸显示屏,支持 4 级灰度显示。
- 特点:相比第一代普通黑白屏,它增加了 4 级灰度显示功能,能够呈现出更丰富的画面细节和层次感,使显示效果更加细腻,适用于显示图片、图表等对色彩和细节有一定要求的内容。
epd2in9d
- 驱动屏幕类型:2.9 寸可局部刷新的黑白电子纸显示屏。
- 特点:除了具备普通黑白屏的特性外,还支持局部刷新功能。这意味着在更新屏幕内容时,可以只刷新部分区域,而不是整个屏幕,从而提高刷新速度,减少功耗,适用于需要频繁更新局部信息的场景,如实时时钟显示、天气信息更新等。
epd2in9bc
- 驱动屏幕类型:2.9 寸红黑白三色电子纸显示屏。
epd2in9b_V3
- 驱动屏幕类型:2.9 寸第三代红黑白三色电子纸显示屏。
- 特点:能够显示红色、黑色和白色三种颜色,相比黑白屏可以呈现出更丰富的视觉效果,适用于需要突出显示某些信息的场景,如交通指示牌、广告展示等。
epd2in9b_V4
- 驱动屏幕类型:2.9 寸第四代红黑白三色电子纸显示屏。
- 特点:在第三代的基础上可能进行了性能优化,如更高的刷新速度、更好的色彩表现等。同样支持红、黑、白三色显示,并且提供了快速显示和局部显示等功能,适用于对显示速度和效果有较高要求的场景。
DEV_Config.h
UBYTE DEV_Module_Init(void);
//设备初始化
void GPIO_Mode(UWORD GPIO_Pin, UWORD Mode);
void DEV_SPI_WriteByte(UBYTE data);
UBYTE DEV_SPI_ReadByte();
void DEV_SPI_Write_nByte(UBYTE *pData, UDOUBLE len);
GUI_Paint.h
部分常量
#define ROTATE_0 0
#define ROTATE_90 90
#define ROTATE_180 180
#define ROTATE_270 270
#define WHITE 0xFF
#define BLACK 0x00
#define RED BLACK
//实际红白屏内部,1为红色、0为白色。实际黑白屏内部,1为白色、0为黑色。
//显示函数有对红色数据进行取反
//故,外在呈现红白、黑白显示方式统一:白色存储为1,红色或者黑色存储为0
//不同的墨水屏,显示方式可能不一样,注意是否要颜色反转
1. init and Clear
// 创建一个新的图像,并设置其属性
// image: 指向图像缓存的指针
// Width: 图像的宽度
// Height: 图像的高度
// Rotate: 图像的旋转角度(0, 90, 180, 270)
// Color: 图像的颜色
void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color);
// 后续的绘图操作(如 DrawString、DrawPoint)都会基于这个初始化的缓存区进行,最终通过 Display 函数将缓存内容刷新到屏幕上。
// 选择要绘制的图像
// image: 指向图像缓存的指针
void Paint_SelectImage(UBYTE *image);
// 设置图像的旋转角度
// Rotate: 旋转角度(0, 90, 180, 270)
void Paint_SetRotate(UWORD Rotate);
// 设置图像的镜像方式
// mirror: 镜像方式(MIRROR_NONE, MIRROR_HORIZONTAL, MIRROR_VERTICAL, MIRROR_ORIGIN)
void Paint_SetMirroring(UBYTE mirror);
// 在指定位置绘制一个像素点
// Xpoint: 像素点的 X 坐标
// Ypoint: 像素点的 Y 坐标
// Color: 像素点的颜色
void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color);
// 设置图像的缩放比例
// scale: 缩放比例(支持 2, 4, 7)
void Paint_SetScale(UBYTE scale);
// 用指定颜色清除整个图像
// Color: 要填充的颜色
void Paint_Clear(UWORD Color);
// 用指定颜色清除指定区域的图像
// Xstart: 区域的起始 X 坐标
// Ystart: 区域的起始 Y 坐标
// Xend: 区域的结束 X 坐标
// Yend: 区域的结束 Y 坐标
// Color: 要填充的颜色
void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color);
2. Drawing
// 在指定位置绘制一个点
// Xpoint: 点的 X 坐标
// Ypoint: 点的 Y 坐标
// Color: 点的颜色
// Dot_Pixel: 点的大小(DOT_PIXEL_1X1 到 DOT_PIXEL_8X8)
// Dot_FillWay: 点的填充方式(DOT_FILL_AROUND 或 DOT_FILL_RIGHTUP)
void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color, DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_FillWay);
// 绘制一条直线
// Xstart: 直线起点的 X 坐标
// Ystart: 直线起点的 Y 坐标
// Xend: 直线终点的 X 坐标
// Yend: 直线终点的 Y 坐标
// Color: 直线的颜色
// Line_width: 直线的宽度
// Line_Style: 直线的样式(LINE_STYLE_SOLID 或 LINE_STYLE_DOTTED)
void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style);
// 绘制一个矩形
// Xstart: 矩形左上角的 X 坐标
// Ystart: 矩形左上角的 Y 坐标
// Xend: 矩形右下角的 X 坐标
// Yend: 矩形右下角的 Y 坐标
// Color: 矩形的颜色
// Line_width: 矩形边框的宽度
// Draw_Fill: 矩形是否填充(DRAW_FILL_EMPTY 或 DRAW_FILL_FULL)
void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill);
// 绘制一个圆形
// X_Center: 圆心的 X 坐标
// Y_Center: 圆心的 Y 坐标
// Radius: 圆的半径
// Color: 圆的颜色
// Line_width: 圆边框的宽度
// Draw_Fill: 圆是否填充(DRAW_FILL_EMPTY 或 DRAW_FILL_FULL)
void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill);
3. Display string
// 绘制一个英文字符
// Xstart: 字符的起始 X 坐标
// Ystart: 字符的起始 Y 坐标
// Acsii_Char: 要显示的英文字符
// Font: 字符的字体
// Color_Foreground: 字符的前景色
// Color_Background: 字符的背景色
void Paint_DrawChar(UWORD Xstart, UWORD Ystart, const char Acsii_Char, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background);
// 绘制一个英文字符串
// Xstart: 字符串的起始 X 坐标
// Ystart: 字符串的起始 Y 坐标
// pString: 要显示的英文字符串的指针
// Font: 字符串的字体
// Color_Foreground: 字符串的前景色
// Color_Background: 字符串的背景色
void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background);
// 仅处理单字节字符(0x00~0x7F)。