반응형

스케치는 프로그램 저장 공간 310933 바이트(23%)를 사용. 최대 1310720 바이트. 전역 변수는 동적 메모리 83276바이트(25%)를 사용, 244404바이트의 지역변수가 남음. 최대는 327680 바이트.

 

허접한 WS 코드를 쓰는 것보다는 Adafruit GFX 방식을 사용하는 것이 여러가지로 효율적이다.

GxEPD2 라이브러리를 설치하고 코드 몇줄만 수정하면 동작시킬 수 있다.

GitHub - ZinggJM/GxEPD2: Arduino Display Library for SPI E-Paper Displays

 

GitHub - ZinggJM/GxEPD2: Arduino Display Library for SPI E-Paper Displays

Arduino Display Library for SPI E-Paper Displays. Contribute to ZinggJM/GxEPD2 development by creating an account on GitHub.

github.com

 

HSPI에 연결

Name WS
Connector

Color
GxEPD
Sample
VSPI HSPI
BUSY Purple 25    
RST White 26    
DC Green 27    
CS(SS) Orange 15 5 15
CLK(SCK) Yellow 13 18 14
DIN(MOSI) Blue 14 23 13
(MISO) X 12 19 12
GND Brown      
VCC Gray      

 

SPI 핀 번호는 사용하는 ESP32 모델에 맞게 수정하면 된다.

ESP32-WROOM의 HSPI 핀 번호는 CLK(SCK) = 14, DIN(MOSI) = 13 이다.

SPI 핀 번호는 다음과 같이 변경할 수 있다.

GxEPD2_7C < GxEPD2_565c, GxEPD2_565c::HEIGHT / 2 > display(GxEPD2_565c(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25)); // Waveshare 5.65" 7-color

void setup()
{
  // ...
  display.init(115200);
  SPI.end();
  SPI.begin(14, -1, 13, 15); // SCK(14), MISO(12), MOSI(13), SS(15)
  // ...
}

MISO는 사용하지 않으므로 -1로 설정

참 쉽쥬?

 

GxEPD2 새로운 정의 방법

#define GxEPD2_DISPLAY_CLASS GxEPD2_7C
#define GxEPD2_DRIVER_CLASS GxEPD2_565c // Waveshare 5.65" 7-color (3C graphics)

// somehow there should be an easier way to do this
#define GxEPD2_BW_IS_GxEPD2_BW true
#define GxEPD2_3C_IS_GxEPD2_3C true
#define GxEPD2_7C_IS_GxEPD2_7C true
#define GxEPD2_1248_IS_GxEPD2_1248 true
#define IS_GxEPD(c, x) (c##x)
#define IS_GxEPD2_BW(x) IS_GxEPD(GxEPD2_BW_IS_, x)
#define IS_GxEPD2_3C(x) IS_GxEPD(GxEPD2_3C_IS_, x)
#define IS_GxEPD2_7C(x) IS_GxEPD(GxEPD2_7C_IS_, x)
#define IS_GxEPD2_1248(x) IS_GxEPD(GxEPD2_1248_IS_, x)

#if defined(ESP32)
#define MAX_DISPLAY_BUFFER_SIZE 65536ul // e.g.
#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS)
#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8))
#elif IS_GxEPD2_3C(GxEPD2_DISPLAY_CLASS)
#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8))
#elif IS_GxEPD2_7C(GxEPD2_DISPLAY_CLASS)
#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2) ? EPD::HEIGHT : (MAX_DISPLAY_BUFFER_SIZE) / (EPD::WIDTH / 2))
#endif
GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, MAX_HEIGHT(GxEPD2_DRIVER_CLASS)> display(GxEPD2_DRIVER_CLASS(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25));
#endif

 

e-Paper 한 가지만 사용할 때는 첫번째 방법이 편하다.

 

테스트 하면서 아래와 같은 증상이 있었는데

  • 줄 무늬나 이상 색상이 나타난다.
  • 갱신이 되지 않는다.

이건 모두 커넥터 접촉 불량이었음. 🤣

반응형

관련글