2.9寸墨水屏驱动详解,基于微雪esp8266-waveshare-epd库

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)。
### Arduino ESP32墨水屏相关教程 #### 配置Arduino IDE并添加ESP32支持 为了使ESP32能够在Arduino IDE上编程,需先安装对应的开发环境。这一步骤可以通过访问官方文档或特定教程完成[^1]。 ```cpp // 安装ESP32板子的支持包后,在Arduino IDE首选项里添加URL: const char* esp32_board_manager_url = "https://dl.espressif.com/dl/package_esp32_index.json"; ``` #### 下载必要的文件 对于Waveshare提供的电子墨水屏来说,TFT_eSPI是一个重要的组成部分,它能够简化屏幕的操作流程,并提供丰富的API接口来实现各种功能[^2]。此外,还有专门针对不同尺和类型的EPD(Electronic Paper Display)可供选择,这些都可以通过Bodmer维护的GitHub仓获得最新版本和支持材料[^4]。 #### 连接硬件设备 当准备点亮一块新的墨水屏时,仔细核对所使用的驱动程序是否匹配是非常关键的一环;另外也要确认物理连接无误——特别是如果遇到像ESP32-S3这样没有自带排针的情况,则更要注意确保良好的电气接触质量[^3]。建议按照产品手册上的说明来进行线路布置,并且可以考虑使用面包板或其他辅助工具帮助稳定连接。 #### 示例代码展示如何初始化并更新图像至墨水屏 下面给出了一段简单的C++代码片段作为例子,展示了怎样利用上述提到过的去控制一个典型的黑白两色电子纸显示器: ```cpp #include <epd.h> // 导入合适的E-Paper头文件 void setup() { Serial.begin(115200); EPD.Init(); // 初始化E-Paper模块 delay(10); EPD.ClearFrameMemory(BLACK); // 清除帧缓存区内容为黑色背景 // 绘制一些测试图形... EPD.DrawRectangle(10, 10, 70, 70, WHITE); EPD.DisplayFrame(); } void loop() {} ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾小号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值