diff --git a/docs/epd_4in2_sample1.txt b/docs/epd_4in2_sample1.txt new file mode 100644 index 0000000..220e3c2 --- /dev/null +++ b/docs/epd_4in2_sample1.txt @@ -0,0 +1,17 @@ +Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); + Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); + Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); + Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); + Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); + Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE); + Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK); + Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE); + Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK); + Paint_DrawString_CN(130, 0, " 你好abc", &Font12CN, BLACK, WHITE); + Paint_DrawString_CN(130, 20, "微雪电子", &Font24CN, WHITE, BLACK); diff --git a/docs/epd_4in2_sample1_display.jpg b/docs/epd_4in2_sample1_display.jpg new file mode 100644 index 0000000..d068813 Binary files /dev/null and b/docs/epd_4in2_sample1_display.jpg differ diff --git a/docs/epd_4in2_sample2.txt b/docs/epd_4in2_sample2.txt new file mode 100644 index 0000000..17fad99 --- /dev/null +++ b/docs/epd_4in2_sample2.txt @@ -0,0 +1,25 @@ + + Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); + Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); + Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); + Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); + Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); + Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE); + Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK); + Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE); + Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK); + Paint_DrawString_CN(140, 0, "你好abc", &Font12CN, GRAY1, GRAY4); + Paint_DrawString_CN(140, 40, "你好abc", &Font12CN, GRAY2, GRAY3); + Paint_DrawString_CN(140, 80, "你好abc", &Font12CN, GRAY3, GRAY2); + Paint_DrawString_CN(140, 120, "你好abc", &Font12CN, GRAY4, GRAY1); + + Paint_DrawString_CN(220, 0, "微雪电子", &Font24CN, GRAY1, GRAY4); + Paint_DrawString_CN(220, 40, "微雪电子", &Font24CN, GRAY2, GRAY3); + Paint_DrawString_CN(220, 80, "微雪电子", &Font24CN, GRAY3, GRAY2); + Paint_DrawString_CN(220, 120, "微雪电子", &Font24CN, GRAY4, GRAY1); diff --git a/docs/epd_4in2_sample2_display.jpg b/docs/epd_4in2_sample2_display.jpg new file mode 100644 index 0000000..ab1f9c2 Binary files /dev/null and b/docs/epd_4in2_sample2_display.jpg differ diff --git a/platformio.ini b/platformio.ini index f640cb5..fce0f5d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -13,5 +13,7 @@ platform = espressif32 board = esp32doit-devkit-v1 framework = arduino +monitor_speed = 115200 + lib_deps= SPI diff --git a/src/main.cpp b/src/main.cpp index 74efa20..39b681d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,164 +1,93 @@ -// Library, connections and info from: https://www.waveshare.com/wiki/E-Paper_ESP32_Driver_Board#Resource - -/* Includes ------------------------------------------------------------------*/ -#include "DEV_Config.h" -#include "EPD.h" -#include "GUI_Paint.h" -#include "ImageData.h" -#include - -/* Entry point ----------------------------------------------------------------*/ -void setup() -{ - printf("EPD_4IN2_test Demo\r\n"); - DEV_Module_Init(); - - printf("e-Paper Init and Clear...\r\n"); - EPD_4IN2_Init_Fast(); - EPD_4IN2_Clear(); - DEV_Delay_ms(500); - - //Create a new image cache - UBYTE *BlackImage; - /* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */ - UWORD Imagesize = ((EPD_4IN2_WIDTH % 8 == 0) ? (EPD_4IN2_WIDTH / 8 ) : (EPD_4IN2_WIDTH / 8 + 1)) * EPD_4IN2_HEIGHT; - if ((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) { - printf("Failed to apply for black memory...\r\n"); - while (1); - } - printf("Paint_NewImage\r\n"); - Paint_NewImage(BlackImage, EPD_4IN2_WIDTH, EPD_4IN2_HEIGHT, 0, WHITE); - -#if 1 // show image for array - printf("show image for array\r\n"); - Paint_SelectImage(BlackImage); - Paint_Clear(WHITE); - Paint_DrawBitMap(gImage_4in2); - EPD_4IN2_Display(BlackImage); - DEV_Delay_ms(500); -#endif - -#if 1 // Drawing on the image - //1.Select Image - printf("SelectImage:BlackImage\r\n"); - Paint_SelectImage(BlackImage); - Paint_Clear(WHITE); - - // 2.Drawing on the image - printf("Drawing:BlackImage\r\n"); - Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); - Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); - Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); - Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); - Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); - Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); - Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); - Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); - Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL); - Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); - Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); - Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE); - Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK); - Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE); - Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK); - Paint_DrawString_CN(130, 0, " 你好abc", &Font12CN, BLACK, WHITE); - Paint_DrawString_CN(130, 20, "微雪电子", &Font24CN, WHITE, BLACK); - - printf("EPD_Display\r\n"); - EPD_4IN2_Display(BlackImage); - DEV_Delay_ms(2000); -#endif - - -#if 0 - printf("Support for partial refresh, but the refresh effect is not good, but it is not recommended\r\n"); - printf("Partial refresh\r\n"); - EPD_4IN2_Init_Partial(); - PAINT_TIME sPaint_time; - sPaint_time.Hour = 12; - sPaint_time.Min = 34; - sPaint_time.Sec = 56; - UBYTE num = 10; - for (;;) { - sPaint_time.Sec = sPaint_time.Sec + 1; - if (sPaint_time.Sec == 60) { - sPaint_time.Min = sPaint_time.Min + 1; - sPaint_time.Sec = 0; - if (sPaint_time.Min == 60) { - sPaint_time.Hour = sPaint_time.Hour + 1; - sPaint_time.Min = 0; - if (sPaint_time.Hour == 24) { - sPaint_time.Hour = 0; - sPaint_time.Min = 0; - sPaint_time.Sec = 0; - } - } - } - Paint_ClearWindows(150, 80, 150 + Font20.Width * 7, 80 + Font20.Height, WHITE); - Paint_DrawTime(150, 80, &sPaint_time, &Font20, WHITE, BLACK); - EPD_4IN2_PartialDisplay(150, 80, 150 + Font20.Width * 7, 80 + Font20.Height, BlackImage); - DEV_Delay_ms(500);//Analog clock 1s - num = num - 1; - if (num == 0) { - break; - } - } -#endif - -#if 1 - EPD_4IN2_Init_4Gray(); - printf("show Gray------------------------\r\n"); - free(BlackImage); - BlackImage = NULL; - Imagesize = ((EPD_4IN2_WIDTH % 8 == 0) ? (EPD_4IN2_WIDTH / 4 ) : (EPD_4IN2_WIDTH / 4 + 1)) * EPD_4IN2_HEIGHT; - if ((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) { - printf("Failed to apply for black memory...\r\n"); - while (1); - } - Paint_NewImage(BlackImage, EPD_4IN2_WIDTH, EPD_4IN2_HEIGHT, 0, WHITE); - Paint_SetScale(4); - Paint_Clear(WHITE); - - Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); - Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); - Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); - Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); - Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); - Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); - Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); - Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); - Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL); - Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); - Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); - Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE); - Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK); - Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE); - Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK); - Paint_DrawString_CN(140, 0, "你好abc", &Font12CN, GRAY1, GRAY4); - Paint_DrawString_CN(140, 40, "你好abc", &Font12CN, GRAY2, GRAY3); - Paint_DrawString_CN(140, 80, "你好abc", &Font12CN, GRAY3, GRAY2); - Paint_DrawString_CN(140, 120, "你好abc", &Font12CN, GRAY4, GRAY1); - - Paint_DrawString_CN(220, 0, "微雪电子", &Font24CN, GRAY1, GRAY4); - Paint_DrawString_CN(220, 40, "微雪电子", &Font24CN, GRAY2, GRAY3); - Paint_DrawString_CN(220, 80, "微雪电子", &Font24CN, GRAY3, GRAY2); - Paint_DrawString_CN(220, 120, "微雪电子", &Font24CN, GRAY4, GRAY1); - - EPD_4IN2_4GrayDisplay(BlackImage); - DEV_Delay_ms(2000); -#endif - - EPD_4IN2_Init_Fast(); - EPD_4IN2_Clear(); - - printf("Goto Sleep...\r\n"); - EPD_4IN2_Sleep(); - free(BlackImage); - BlackImage = NULL; -} - -/* The main loop -------------------------------------------------------------*/ -void loop() -{ - // -} +// Library, connections and info from: https://www.waveshare.com/wiki/E-Paper_ESP32_Driver_Board#Resource +// Display: https://www.waveshare.com/product/4.2inch-e-paper.htm + +/* Includes ------------------------------------------------------------------*/ +#include "DEV_Config.h" +#include "EPD.h" +#include "GUI_Paint.h" +#include + +void setup() +{ + Serial.begin(115200); + Serial.println("Booting"); + DEV_Module_Init(); //4.2" 400x300px + + Serial.println("e-Paper Init"); + EPD_4IN2_Init_Fast(); + + Serial.println("e-Paper clear"); + EPD_4IN2_Clear(); //flashed black 2 times. long, short + + + Serial.println("e-Paper init 4gray"); + DEV_Delay_ms(1000); + EPD_4IN2_Init_4Gray(); + UBYTE *BlackImage; + UWORD Imagesize = ((EPD_4IN2_WIDTH % 8 == 0) ? (EPD_4IN2_WIDTH / 4 ) : (EPD_4IN2_WIDTH / 4 + 1)) * EPD_4IN2_HEIGHT; + if ((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) { + printf("Failed to apply for black memory...\r\n"); + while (1); + } + Paint_NewImage(BlackImage, EPD_4IN2_WIDTH, EPD_4IN2_HEIGHT, 0, WHITE); + Paint_SelectImage(BlackImage); + Paint_SetScale(4); + + + /* + Paint_Clear(WHITE); + Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); + Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); + Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); + Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); + Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); + Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE); + Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK); + Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE); + Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK); + Paint_DrawString_CN(140, 0, "你好abc", &Font12CN, GRAY1, GRAY4); + Paint_DrawString_CN(140, 40, "你好abc", &Font12CN, GRAY2, GRAY3); + Paint_DrawString_CN(140, 80, "你好abc", &Font12CN, GRAY3, GRAY2); + Paint_DrawString_CN(140, 120, "你好abc", &Font12CN, GRAY4, GRAY1); + + Paint_DrawString_CN(220, 0, "微雪电子", &Font24CN, GRAY1, GRAY4); + Paint_DrawString_CN(220, 40, "微雪电子", &Font24CN, GRAY2, GRAY3); + Paint_DrawString_CN(220, 80, "微雪电子", &Font24CN, GRAY3, GRAY2); + Paint_DrawString_CN(220, 120, "微雪电子", &Font24CN, GRAY4, GRAY1); + */ + + Serial.println("e-Paper Start Lines Test"); + DEV_Delay_ms(1000); + for (uint16_t i=0;i<100;i++) { + Serial.print("Lines ystart="); + Serial.print(i%2); + Serial.print(" i="); + Serial.println(i); + Paint_Clear(WHITE); + for (uint16_t y=i%2;y