반응형
허접한 WS 코드를 쓰는 것보다는 Adafruit GFX 방식을 사용하는 것이 여러가지로 효율적이다.
GxEPD2 라이브러리를 설치하고 코드 몇줄만 수정하면 동작시킬 수 있다.
GitHub - ZinggJM/GxEPD2: Arduino Display Library for SPI E-Paper Displays
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 한 가지만 사용할 때는 첫번째 방법이 편하다.
테스트 하면서 아래와 같은 증상이 있었는데
- 줄 무늬나 이상 색상이 나타난다.
- 갱신이 되지 않는다.
이건 모두 커넥터 접촉 불량이었음. 🤣
반응형