这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)

共1条 1/1 1 跳转至

【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)

助工
2026-04-11 22:17:12     打赏

摘要:本文主要介绍在Arduino IDE开发环境下,如何快速上手使用MCU驱动不同的墨水屏;一、关于GxEPD2库

在Arduino IDE开发环境中,驱动墨水屏的相关库有:GxEPD / GxEPD2 等;



GxEPD2是GxEPD的升级,专门用于控制带有SPI接口的电子纸显示器(EPD),GxEPD2库依赖于Adafruit_GFX图形库,可用于绘制文本和几何形状等功能;

(除了Adafruit_GFX库的基础功能之外,GxEPD2库还有专用于EPD显示的优化等功能)



image-20260318212722001.png



关于GxEPD2库

GxEPD2_Arduino库是驱动SPI接口电子墨水屏的强大工具,支持Good Display和Waveshare等的各种E-Paper显示屏;


是一个用于MCU (Arduino / ESP32等) 驱动SPI接口电子纸显示屏的显示库:




主要核心功能:

屏幕驱动与通信抽象:封装了 SPI 通信、初始化、刷新流程,不用直接操作底层命令就能把内容显示到电子纸上;

图形与文字绘制能力:与 Adafruit_GFX 兼容,可绘制文字、线条、矩形、位图等;

支持多种型号与刷新方式:覆盖很多不同尺寸/型号的电子纸,并提供局部刷新/快速刷新等能力;

资源受限设备的使用模式:提供分页/分块等绘制方法,适配小内存的MCU等;



很多裸电子纸面板 / 模块需要3.3V供电与3.3V逻辑电平;不要直接把Arduino的5V_IO接上去,需要电平转换 / 分压等保护措施;



image-20260315165725354.png


屏幕支持:1.54寸黑白 / 2.13寸4色 / 2.9寸黑白(三色) / 4.2寸黑白(三色) GDEWx、GDEMx、GDEYx 等型号;


开发板支持:ESP32 / ESP8266 / AVR(UNO/Nano) / STM32 / RP2040等;

image-20260315165830077 更多屏幕型号详见


image-20260315165830077.png




二、开发环境搭建

1、下载开发环境 Arduino IDE

image-20251009205311004.png


2、安装库

1、安装 GxEPD2 库;


image-20260315174105802.png



2、复制相关头文件


路径:...\Arduino IDE\Documents\libraries\GxEPD2\examples\GxEPD2_HelloWorld


将以下文件复制到自己的工程项目中;


image-20260316190638941.png


3、关于头文件作用

GxEPD2_display_selection_new_style.h:新版API配置文件(屏幕显示 / 驱动)等功能;

(新版配置方法更加直观)


// 旧版配置方式
#include "GxEPD2_display_selection.h"
#include "GxEPD2_display_selection_added.h"

// 新版配置方式
#include "GxEPD2_display_selection_new_style.h"



GxEPD2_selection_check.h:用于检查屏幕类型与驱动类是否匹配;

GxEPD2_wiring_examples.h:显示不同硬件MCU的引脚(默认SPI)连接方式;





三、使用方法



image-20260321220720979

开发方式主要为:

1、裸屏 / 转接板 + 开发板;【大多数开发方式】

2、带接口的主控驱动板 / 带驱动板屏幕 (Waveshare ESP32 Driver Board / E-Paper Shield等);


1、开发硬件

当前使用的开发硬件为:Arduino GIGA R1开发板 + 2.9寸黑白红(三色)墨水屏 + 24pin_SPI转接板;


GIGA R1开发板

image-20260315182852109.png



2.9寸(296×128)三色墨水屏(WFT0290CZ10)


image-20260315182417605.png


24pin_SPI转接板


image-20260315183634433.png




image.png




























实物搭建效果:


image-20260408104154001.png


2、参数配置


GxEPD2_display_selection_new_style.h 头文件中进行配置;


2.1、屏幕配置


1、显示类型(色彩)配置


当前硬件为三色墨水屏,故取消 #define GxEPD2_DISPLAY_CLASS GxEPD2_3C 注释;


GxEPD2_BW:黑白(两色);

GxEPD2_3C:红黑白(三色);√

GxEPD2_4C:黑白红黄(四色);

GxEPD2_7C:黑白红绿黄橙蓝(彩色);



同时在当前项目.ino中添加所对应的头文件:


#include <GxEPD2_BW.h>  //黑白

#include <GxEPD2_3C.h>  //3色  

#include <GxEPD2_4C.h>  //4色

#include <GxEPD2_7C.h>  //7色(彩色)



image-20260315221553602.png


2、显示驱动IC配置

当前硬件为WFT0290CZ10 / GDEW029Z10 (IC:UC8151)

故取消 #define GxEPD2_DRIVER_CLASS GxEPD2_290c 注释;

如果实在不知道当前屏幕的IC类型 / 型号是哪个

可以选择当前屏幕所对应色彩(3-color)、分辨率(128x296)下的IC

然后一个个试,直到能正常显示;


image-20260316174557193.png

image-20260316174557193

2.2、开发板配置


1、使用默认SPI方法

默认SPI引脚示例(GxEPD2_wiring_examples.h)

 GxEPD2_wiring_examples.h :有不同开发板所对应的硬件默认SPI(SCK / MOSI)等引脚连接定义;


因此只需在项目中自定义 CS / DC / RST / BUSY 引脚即可

(若不指定,则默认使用 GxEPD2_wiring_examples.h 中的相关引脚定义)




例:


image.png













2、使用自定义SPI方法

(更多其他MCU 自定义SPI配置方法详见:【GxEPD2_Example.ino】示例)



示例:


// ESP32 开发板
SPIClass hspi(HSPI);

void setup{
    ...
 hspi.begin(SCLK_Pin, MISO_Pin, MOSI_Pin, CS_Pin); // SCLK, MISO, MOSI, SS
 display.epd2.selectSPI(hspi, SPISettings(4000000, MSBFIRST, SPI_MODE0));
 display.init(115200); 
    ...
}

 -------------------------------------------
     
// ARDUINO_ARCH_RP2040 / ARDUINO_RASPBERRY_PI_PICO / ARDUINO_RASPBERRY_PI_PICO_W
arduino::MbedSPI SPIn(miso_pin, mosi_pin, sck_pin); // MbedSPI(int miso, int mosi, int sck);

void setup{
    ...
  display.epd2.selectSPI(SPIn, SPISettings(4000000, MSBFIRST, SPI_MODE0));
  display.init(115200); 
    ...
}


3、软件SPI驱动方法示例...\Arduino IDE\Documents\libraries\GxEPD2\extras\sw_spi


3、示例代码

相关英文字体文件路径:...\Arduino IDE\Documents\libraries\Adafruit_GFX_Library\Fonts



相关display功能函数API(对应屏幕色彩头文件):#include <GxEPD2_3C.h>


若要使用默认相关中文字体,需导入 U8g2_for_Adafruit_GFX 库;

#include <U8g2_for_Adafruit_GFX.h>



使用示例


1、包含主要相关头文件

#include "GxEPD2_display_selection_new_style.h"

#include <GxEPD2_3C.h>



2、选择SPI方式 (默认 / 自定义)

1、自定义相关引脚

#define EPD_CS / DC / RST / BUSY


2、选择不同MCU所对应的SPI配置方法 (详见:GxEPD2_Example.ino)


image.png



示例代码


#include "GxEPD2_display_selection_new_style.h" // 在该文件中定义 GxEPD2_DRIVER_CLASS / GxEPD2_DISPLAY_CLASS
#include <GxEPD2_3C.h>  // 3色
// #include <GxEPD2_BW.h>  //黑白
#include <Fonts/FreeSansBold18pt7b.h> //定义在 Adafruit_GFX库中fonts文件夹的英文字体

// 自定义引脚
#define EPD_CS 10
#define EPD_DC 8
#define EPD_RST 9
#define EPD_BUSY 7


// 1、默认SPI: 引脚定义在 `GxEPD2_wiring_examples`
// 若使用分页模式:  GxEPD2_DRIVER_CLASS::HEIGHT / 2
// GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, GxEPD2_DRIVER_CLASS::HEIGHT> display(
  // GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ EPD_DC, /*RST=*/ EPD_RST, /*BUSY=*/ EPD_BUSY));

// 2、指定SPI:
// 若为 ESP32: SPIClass hspi(HSPI);
// 若为 Arduino_MbedOS
arduino::MbedSPI SPIn(12, 11, 13); // MbedSPI(int miso, int mosi, int sck);
// 指定自定义引脚
GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, GxEPD2_DRIVER_CLASS::HEIGHT> display(
  GxEPD2_DRIVER_CLASS(/*CS=*/ EPD_CS, /*DC=*/ EPD_DC, /*RST=*/ EPD_RST, /*BUSY=*/ EPD_BUSY));


void helloWorld()
{
  display.setRotation(1);	//设置显示方向
  display.setFont(&FreeSansBold18pt7b);	//设置字体
  display.setTextColor(GxEPD_RED);	// 设置字体颜色
  int16_t tbx, tby; uint16_t tbw, tbh;
  display.getTextBounds("Hello World", 0, 0, &tbx, &tby, &tbw, &tbh);	// tbx:X轴偏移量 tbw:文本总宽度
  uint16_t x = ((display.width() - tbw) / 2) - tbx;	// 水平居中
  uint16_t y = ((display.height() - tbh) / 2) - tby;// 垂直居中
  display.setFullWindow();
  display.firstPage();
  do
  {
    display.fillScreen(GxEPD_WHITE);	// 清屏
    display.setCursor(x, y);	// 居中显示
    display.print("Hello World");
  }
  while (display.nextPage());
}

void setup()
{
  Serial.begin(115200);
  // Arduino_MbedOS 
  display.epd2.selectSPI(SPIn, SPISettings(4000000, MSBFIRST, SPI_MODE0));	// SPI设置

  // 若为 ESP32
  /* hspi.begin(13, 12, 14, 15); // SCLK, MISO, MOSI, SS
  display.epd2.selectSPI(hspi, SPISettings(4000000, MSBFIRST, SPI_MODE0)); */

  display.init(115200); // 初始化屏幕
  helloWorld();
  display.hibernate(); // 进入休眠模式
}

void loop() {};







四、效果演示




屏幕显示“Hello World”字符;



image-20260317205127765.png







image-20260317205127765











关键词: 墨水屏     GxPED2    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]