From cb2805f9b7092cfc9cd4fb2fff4018e3fa8b185b Mon Sep 17 00:00:00 2001 From: SSYYL <1032789891@qq.com> Date: Thu, 16 Feb 2023 15:35:08 +0800 Subject: [PATCH] Added a 2.13V3 Arduino GUI library usage routine --- Arduino/epd2in13_V3/epd2in13_V3.cpp | 24 +++++++ Arduino/epd2in13_V3/epd2in13_V3.h | 4 ++ Arduino/epd2in13_V3/epd2in13_V3.ino | 63 +++++++++++++++---- .../User/Examples/EPD_2in7_V2_test.c | 20 +++--- .../User/Examples/EPD_2in9_V2_test.c | 4 +- .../STM32-F103ZET6/User/e-Paper/EPD_2in7_V2.c | 30 ++++----- Special Reminder.txt | 3 + 特别提醒.txt | 3 + 8 files changed, 113 insertions(+), 38 deletions(-) create mode 100644 Special Reminder.txt create mode 100644 特别提醒.txt diff --git a/Arduino/epd2in13_V3/epd2in13_V3.cpp b/Arduino/epd2in13_V3/epd2in13_V3.cpp index 2ad2c06..ff7cd09 100644 --- a/Arduino/epd2in13_V3/epd2in13_V3.cpp +++ b/Arduino/epd2in13_V3/epd2in13_V3.cpp @@ -90,6 +90,8 @@ Epd::Epd() busy_pin = BUSY_PIN; width = EPD_WIDTH; height = EPD_HEIGHT; + bufwidth = 128/8; //16 + bufheight = 63; }; /****************************************************************************** @@ -281,6 +283,7 @@ void Epd::Reset(void) DelayMs(2); DigitalWrite(reset_pin, HIGH); DelayMs(20); + this->count = 0; } /****************************************************************************** @@ -332,6 +335,27 @@ void Epd::Display(const unsigned char* frame_buffer) WaitUntilIdle(); } + + +void Epd::Display1(const unsigned char* frame_buffer) { + if(this->count == 0){ + SendCommand(0x24); + this->count++; + }else if(this->count > 0 && this->count < 4 ){ + this->count++; + } + for(int i = 0; i < this->bufwidth * this->bufheight; i++){ + SendData(frame_buffer[i]); + } + if(this->count == 4){ + SendCommand(0x22); + SendData(0xC7); + SendCommand(0x20); + WaitUntilIdle(); + this->count = 0; + } +} + /****************************************************************************** function : Refresh a base image parameter: diff --git a/Arduino/epd2in13_V3/epd2in13_V3.h b/Arduino/epd2in13_V3/epd2in13_V3.h index 855b45d..f2bd5d6 100644 --- a/Arduino/epd2in13_V3/epd2in13_V3.h +++ b/Arduino/epd2in13_V3/epd2in13_V3.h @@ -44,6 +44,9 @@ class Epd : EpdIf { public: unsigned long width; unsigned long height; + int bufwidth; + int bufheight; + int count; Epd(); ~Epd(); @@ -57,6 +60,7 @@ public: void Reset(void); void Clear(void); void Display(const unsigned char* frame_buffer); + void Display1(const unsigned char* frame_buffer); void DisplayPartBaseImage(const unsigned char* frame_buffer); void DisplayPart(const unsigned char* frame_buffer); void ClearPart(void); diff --git a/Arduino/epd2in13_V3/epd2in13_V3.ino b/Arduino/epd2in13_V3/epd2in13_V3.ino index 2340d1c..181a9ec 100644 --- a/Arduino/epd2in13_V3/epd2in13_V3.ino +++ b/Arduino/epd2in13_V3/epd2in13_V3.ino @@ -1,7 +1,19 @@ #include #include "epd2in13_V3.h" +#include "epdpaint.h" #include "imagedata.h" +#define COLORED 0 +#define UNCOLORED 1 + +/** + * Due to RAM not enough in Arduino UNO, a frame buffer is not allowed. + * In this case, a smaller image buffer is allocated and you have to + * update a partial display several times. + * 1 byte = 8 pixels, therefore you have to set 8*N pixels at a time. + */ +unsigned char image[1050]; +Paint paint(image, 0, 0); Epd epd; void setup() @@ -12,17 +24,46 @@ void setup() epd.Init(FULL); epd.Display(IMAGE_DATA); - Serial.println("epd PART"); - epd.DisplayPartBaseImage(IMAGE_DATA); - char i = 0; - for (i = 0; i < 10; i++) { - Serial.println("e-Paper PART IMAGE_DATA"); - epd.Init(PART); - epd.DisplayPart(IMAGE_DATA); - Serial.println("e-Paper PART Clear"); - epd.Init(PART); - epd.ClearPart(); - } + delay(2000); + + Paint paint(image, epd.bufwidth*8, epd.bufheight); //width should be the multiple of 8 + + paint.Clear(UNCOLORED); + paint.DrawStringAt(8, 2, "e-Paper Demo", &Font12, COLORED); + paint.DrawStringAt(8, 20, "Hello world", &Font12, COLORED); + epd.Display1(image);//1 + + paint.Clear(UNCOLORED); + paint.DrawRectangle(2,2,50,50,COLORED); + paint.DrawLine(2,2,50,50,COLORED); + paint.DrawLine(2,50,50,2,COLORED); + paint.DrawFilledRectangle(52,2,100,50,COLORED); + paint.DrawLine(52,2,100,50,UNCOLORED); + paint.DrawLine(100,2,52,50,UNCOLORED); + epd.Display1(image);//2 + + paint.Clear(UNCOLORED); + paint.DrawCircle(25,25,20,COLORED); + paint.DrawFilledCircle(75,25,20,COLORED); + epd.Display1(image);//3 + + paint.Clear(UNCOLORED); + epd.Display1(image);//4 + + delay(2000); + + // Serial.println("epd PART"); + // epd.DisplayPartBaseImage(IMAGE_DATA); + // char i = 0; + // for (i = 0; i < 10; i++) { + // Serial.println("e-Paper PART IMAGE_DATA"); + // epd.Init(PART); + // epd.DisplayPart(IMAGE_DATA); + // Serial.println("e-Paper PART Clear"); + // epd.Init(PART); + // epd.ClearPart(); + // delay(2000); + // } epd.Init(FULL); Serial.println("e-Paper clear and sleep"); diff --git a/STM32/STM32-F103ZET6/User/Examples/EPD_2in7_V2_test.c b/STM32/STM32-F103ZET6/User/Examples/EPD_2in7_V2_test.c index f799d07..96ec950 100644 --- a/STM32/STM32-F103ZET6/User/Examples/EPD_2in7_V2_test.c +++ b/STM32/STM32-F103ZET6/User/Examples/EPD_2in7_V2_test.c @@ -40,7 +40,7 @@ int EPD_test(void) } printf("e-Paper Init and Clear...\r\n"); - EPD_2IN7_V2_Init(); + EPD_2IN7_V2_Init(); EPD_2IN7_V2_Clear(); @@ -95,8 +95,8 @@ int EPD_test(void) 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); + Paint_DrawString_CN(130, 0,"���abc", &Font12CN, BLACK, WHITE); + Paint_DrawString_CN(130, 20, "΢ѩ����", &Font24CN, WHITE, BLACK); EPD_2IN7_V2_Display_Fast(BlackImage); DEV_Delay_ms(3000); @@ -147,8 +147,8 @@ int EPD_test(void) 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); + Paint_DrawString_CN(130, 0,"���abc", &Font12CN, BLACK, WHITE); + Paint_DrawString_CN(130, 20, "΢ѩ����", &Font24CN, WHITE, BLACK); EPD_2IN7_V2_Display_Base(BlackImage); DEV_Delay_ms(3000); @@ -233,11 +233,11 @@ int EPD_test(void) Paint_DrawString_EN(10, 20, "hello world", &Font12, GRAY3, GRAY1); Paint_DrawNum(10, 33, 123456789, &Font12, GRAY4, GRAY2); Paint_DrawNum(10, 50, 987654321, &Font16, GRAY1, GRAY4); - Paint_DrawString_CN(150, 0,"abc", &Font12CN, GRAY4, GRAY1); - Paint_DrawString_CN(150, 20,"abc", &Font12CN, GRAY3, GRAY2); - Paint_DrawString_CN(150, 40,"abc", &Font12CN, GRAY2, GRAY3); - Paint_DrawString_CN(150, 60,"abc", &Font12CN, GRAY1, GRAY4); - Paint_DrawString_CN(10, 130, "΢ѩ", &Font24CN, GRAY1, GRAY4); + Paint_DrawString_CN(150, 0,"���abc", &Font12CN, GRAY4, GRAY1); + Paint_DrawString_CN(150, 20,"���abc", &Font12CN, GRAY3, GRAY2); + Paint_DrawString_CN(150, 40,"���abc", &Font12CN, GRAY2, GRAY3); + Paint_DrawString_CN(150, 60,"���abc", &Font12CN, GRAY1, GRAY4); + Paint_DrawString_CN(10, 130, "΢ѩ����", &Font24CN, GRAY1, GRAY4); EPD_2IN7_V2_4GrayDisplay(BlackImage); DEV_Delay_ms(3000); diff --git a/STM32/STM32-F103ZET6/User/Examples/EPD_2in9_V2_test.c b/STM32/STM32-F103ZET6/User/Examples/EPD_2in9_V2_test.c index 1a2470d..62957c3 100644 --- a/STM32/STM32-F103ZET6/User/Examples/EPD_2in9_V2_test.c +++ b/STM32/STM32-F103ZET6/User/Examples/EPD_2in9_V2_test.c @@ -94,8 +94,8 @@ int EPD_test(void) 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); + Paint_DrawString_CN(130, 0, "abc", &Font12CN, BLACK, WHITE); + Paint_DrawString_CN(130, 20, "΢ѩ", &Font24CN, WHITE, BLACK); EPD_2IN9_V2_Display_Base(BlackImage); DEV_Delay_ms(3000); diff --git a/STM32/STM32-F103ZET6/User/e-Paper/EPD_2in7_V2.c b/STM32/STM32-F103ZET6/User/e-Paper/EPD_2in7_V2.c index 7cc3d77..594f07c 100644 --- a/STM32/STM32-F103ZET6/User/e-Paper/EPD_2in7_V2.c +++ b/STM32/STM32-F103ZET6/User/e-Paper/EPD_2in7_V2.c @@ -164,24 +164,24 @@ parameter: ******************************************************************************/ void EPD_2IN7_V2_Init(void) { - EPD_2IN7_V2_Reset(); - EPD_2IN7_V2_ReadBusy(); - - EPD_2IN7_V2_SendCommand(0x12); //SWRESET - EPD_2IN7_V2_ReadBusy(); + EPD_2IN7_V2_Reset(); + EPD_2IN7_V2_ReadBusy(); - EPD_2IN7_V2_SendCommand(0x45); //set Ram-Y address start/end position - EPD_2IN7_V2_SendData(0x00); - EPD_2IN7_V2_SendData(0x00); - EPD_2IN7_V2_SendData(0x07); //0x0107-->(263+1)=264 - EPD_2IN7_V2_SendData(0x01); + EPD_2IN7_V2_SendCommand(0x12); //SWRESET + EPD_2IN7_V2_ReadBusy(); - EPD_2IN7_V2_SendCommand(0x4F); // set RAM y address count to 0; - EPD_2IN7_V2_SendData(0x00); - EPD_2IN7_V2_SendData(0x00); + EPD_2IN7_V2_SendCommand(0x45); //set Ram-Y address start/end position + EPD_2IN7_V2_SendData(0x00); + EPD_2IN7_V2_SendData(0x00); + EPD_2IN7_V2_SendData(0x07); //0x0107-->(263+1)=264 + EPD_2IN7_V2_SendData(0x01); - EPD_2IN7_V2_SendCommand(0x11); // data entry mode - EPD_2IN7_V2_SendData(0x03); + EPD_2IN7_V2_SendCommand(0x4F); // set RAM y address count to 0; + EPD_2IN7_V2_SendData(0x00); + EPD_2IN7_V2_SendData(0x00); + + EPD_2IN7_V2_SendCommand(0x11); // data entry mode + EPD_2IN7_V2_SendData(0x03); } void EPD_2IN7_V2_Init_Fast(void) diff --git a/Special Reminder.txt b/Special Reminder.txt new file mode 100644 index 0000000..9f29e68 --- /dev/null +++ b/Special Reminder.txt @@ -0,0 +1,3 @@ +The Arduino program in this package only supports the Arduino series development boards, not the ESP32, ESP8266 and other development boards that use the Arduino IDE for development. +ESP32 development board use: https://www.waveshare.com/wiki/E-Paper_ESP32_Driver_Board +ESP8266 development board use: https://www.waveshare.com/wiki/E-Paper_ESP8266_Driver_Board \ No newline at end of file diff --git a/特别提醒.txt b/特别提醒.txt new file mode 100644 index 0000000..48d3365 --- /dev/null +++ b/特别提醒.txt @@ -0,0 +1,3 @@ +本程序包中的 Arduino 程序,仅支持 Arduino 系列的开发板,不支持 ESP32、ESP8266 等使用 Arduino IDE 进行开发的其他开发板 +ESP32开发板使用 :https://www.waveshare.net/wiki/E-Paper_ESP32_Driver_Board +ESP8266开发板使用 :https://www.waveshare.net/wiki/E-Paper_ESP8266_Driver_Board \ No newline at end of file