Created
January 12, 2025 00:56
-
-
Save pnappa/d601c903681fefdd571f89eecd68c63c to your computer and use it in GitHub Desktop.
Waveshare dev module demo doesn't work when wifi is enabled.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Includes ------------------------------------------------------------------*/ | |
#include "DEV_Config.h" | |
#include "EPD.h" | |
#include "GUI_Paint.h" | |
#include "ImageData.h" | |
#include <stdlib.h> | |
// If this is enabled (set to 1), partial refresh doesn't work as expected, and | |
// the demo is a bit glitchy otherwise too./* Includes ------------------------------------------------------------------*/ | |
#include "DEV_Config.h" | |
#include "EPD.h" | |
#include "GUI_Paint.h" | |
#include "ImageData.h" | |
#include <stdlib.h> | |
// This is identical to the demo provided by waveshare, except for the addition | |
// of connecting to wifi, and is intended to demo unexpected behaviour for | |
// partial refreshes when wifi is enabled. | |
// If this is enabled (set to 1), partial refresh doesn't work as expected, and | |
// the demo is a bit glitchy otherwise too. | |
#define USEWIFI 1 | |
#if USEWIFI | |
#include <WiFi.h> | |
// Replace with your wifi SSID & password. | |
const char *ssid = "<insert>"; | |
const char *password = "<insert>"; | |
#endif | |
/* Entry point ----------------------------------------------------------------*/ | |
void setup() | |
{ | |
printf("EPD_4IN26_test Demo\r\n"); | |
DEV_Module_Init(); | |
#if USEWIFI | |
Serial.println(); | |
Serial.println(); | |
Serial.print("Connecting to "); | |
Serial.println(ssid); | |
WiFi.begin(ssid, password); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
Serial.print("."); | |
} | |
Serial.println(""); | |
Serial.println("WiFi connected."); | |
Serial.println("IP address: "); | |
Serial.println(WiFi.localIP()); | |
#endif | |
printf("e-Paper Init and Clear...\r\n"); | |
EPD_4in26_Init(); | |
EPD_4in26_Clear(); | |
//Create a new image cache | |
UBYTE *BlackImage; | |
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */ | |
UDOUBLE Imagesize = ((EPD_4in26_WIDTH % 8 == 0)? (EPD_4in26_WIDTH / 8 ): (EPD_4in26_WIDTH / 8 + 1)) * EPD_4in26_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_4in26_WIDTH, EPD_4in26_HEIGHT, 0, WHITE); | |
#if 1 // show image for array | |
EPD_4in26_Init_Fast(); | |
printf("show image for array\r\n"); | |
Paint_SelectImage(BlackImage); | |
Paint_Clear(WHITE); | |
Paint_DrawBitMap(gImage_4in26); | |
EPD_4in26_Display_Fast(BlackImage); | |
DEV_Delay_ms(2000); | |
#endif | |
#if 1 // Drawing on the image | |
EPD_4in26_Init(); | |
//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, 1, "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, 1, "你好abc", &Font12CN, BLACK, WHITE); | |
Paint_DrawString_CN(130, 20, "微雪电子", &Font24CN, WHITE, BLACK); | |
printf("EPD_Display\r\n"); | |
// EPD_4in26_Display(BlackImage); | |
EPD_4in26_Display_Base(BlackImage); | |
DEV_Delay_ms(2000); | |
#endif | |
#if 1 | |
printf("Partial refresh\r\n"); | |
Paint_NewImage(BlackImage, 200, 50, 0, WHITE); | |
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_Clear(WHITE); | |
Paint_DrawTime(20, 10, &sPaint_time, &Font20, WHITE, BLACK); | |
EPD_4in26_Display_Part(BlackImage, 80, 200, 200, 50); | |
DEV_Delay_ms(500);//Analog clock 1s | |
num = num - 1; | |
if(num == 0) { | |
break; | |
} | |
} | |
#endif | |
#if 1 // show image for array | |
free(BlackImage); | |
printf("show Gray------------------------\r\n"); | |
Imagesize = ((EPD_4in26_WIDTH % 4 == 0)? (EPD_4in26_WIDTH / 4 ): (EPD_4in26_WIDTH / 4 + 1)) * EPD_4in26_HEIGHT; | |
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) { | |
printf("Failed to apply for black memory...\r\n"); | |
while(1); | |
} | |
EPD_4in26_Init_4GRAY(); | |
printf("4 grayscale display\r\n"); | |
Paint_NewImage(BlackImage, EPD_4in26_WIDTH, EPD_4in26_HEIGHT, 90, WHITE); | |
Paint_SetScale(4); | |
Paint_Clear(0xff); | |
Paint_DrawPoint(10, 80, GRAY4, DOT_PIXEL_1X1, DOT_STYLE_DFT); | |
Paint_DrawPoint(10, 90, GRAY4, DOT_PIXEL_2X2, DOT_STYLE_DFT); | |
Paint_DrawPoint(10, 100, GRAY4, DOT_PIXEL_3X3, DOT_STYLE_DFT); | |
Paint_DrawLine(20, 70, 70, 120, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_SOLID); | |
Paint_DrawLine(70, 70, 20, 120, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_SOLID); | |
Paint_DrawRectangle(20, 70, 70, 120, GRAY4, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); | |
Paint_DrawRectangle(80, 70, 130, 120, GRAY4, DOT_PIXEL_1X1, DRAW_FILL_FULL); | |
Paint_DrawCircle(45, 95, 20, GRAY4, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); | |
Paint_DrawCircle(105, 95, 20, GRAY2, DOT_PIXEL_1X1, DRAW_FILL_FULL); | |
Paint_DrawLine(85, 95, 125, 95, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); | |
Paint_DrawLine(105, 75, 105, 115, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); | |
Paint_DrawString_EN(10, 0, "waveshare", &Font16, GRAY4, GRAY1); | |
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); | |
EPD_4in26_4GrayDisplay(BlackImage); | |
DEV_Delay_ms(3000); | |
#endif | |
EPD_4in26_Init(); | |
EPD_4in26_Clear(); | |
printf("Goto Sleep...\r\n"); | |
EPD_4in26_Sleep(); | |
free(BlackImage); | |
BlackImage = NULL; | |
DEV_Delay_ms(2000);//important, at least 2s | |
// close 5V | |
printf("close 5V, Module enters 0 power consumption ...\r\n"); | |
} | |
/* The main loop -------------------------------------------------------------*/ | |
void loop() | |
{ | |
// | |
} | |
#define USEWIFI 1 | |
#if USEWIFI | |
#include <WiFi.h> | |
// Replace with your wifi SSID & password. | |
const char *ssid = "<insert>"; | |
const char *password = "<insert>"; | |
#endif | |
/* Entry point ----------------------------------------------------------------*/ | |
void setup() | |
{ | |
printf("EPD_4IN26_test Demo\r\n"); | |
DEV_Module_Init(); | |
#if USEWIFI | |
Serial.println(); | |
Serial.println(); | |
Serial.print("Connecting to "); | |
Serial.println(ssid); | |
WiFi.begin(ssid, password); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
Serial.print("."); | |
} | |
Serial.println(""); | |
Serial.println("WiFi connected."); | |
Serial.println("IP address: "); | |
Serial.println(WiFi.localIP()); | |
#endif | |
printf("e-Paper Init and Clear...\r\n"); | |
EPD_4in26_Init(); | |
EPD_4in26_Clear(); | |
//Create a new image cache | |
UBYTE *BlackImage; | |
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */ | |
UDOUBLE Imagesize = ((EPD_4in26_WIDTH % 8 == 0)? (EPD_4in26_WIDTH / 8 ): (EPD_4in26_WIDTH / 8 + 1)) * EPD_4in26_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_4in26_WIDTH, EPD_4in26_HEIGHT, 0, WHITE); | |
#if 1 // show image for array | |
EPD_4in26_Init_Fast(); | |
printf("show image for array\r\n"); | |
Paint_SelectImage(BlackImage); | |
Paint_Clear(WHITE); | |
Paint_DrawBitMap(gImage_4in26); | |
EPD_4in26_Display_Fast(BlackImage); | |
DEV_Delay_ms(2000); | |
#endif | |
#if 1 // Drawing on the image | |
EPD_4in26_Init(); | |
//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, 1, "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, 1, "你好abc", &Font12CN, BLACK, WHITE); | |
Paint_DrawString_CN(130, 20, "微雪电子", &Font24CN, WHITE, BLACK); | |
printf("EPD_Display\r\n"); | |
// EPD_4in26_Display(BlackImage); | |
EPD_4in26_Display_Base(BlackImage); | |
DEV_Delay_ms(2000); | |
#endif | |
#if 1 | |
printf("Partial refresh\r\n"); | |
Paint_NewImage(BlackImage, 200, 50, 0, WHITE); | |
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_Clear(WHITE); | |
Paint_DrawTime(20, 10, &sPaint_time, &Font20, WHITE, BLACK); | |
EPD_4in26_Display_Part(BlackImage, 80, 200, 200, 50); | |
DEV_Delay_ms(500);//Analog clock 1s | |
num = num - 1; | |
if(num == 0) { | |
break; | |
} | |
} | |
#endif | |
#if 1 // show image for array | |
free(BlackImage); | |
printf("show Gray------------------------\r\n"); | |
Imagesize = ((EPD_4in26_WIDTH % 4 == 0)? (EPD_4in26_WIDTH / 4 ): (EPD_4in26_WIDTH / 4 + 1)) * EPD_4in26_HEIGHT; | |
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) { | |
printf("Failed to apply for black memory...\r\n"); | |
while(1); | |
} | |
EPD_4in26_Init_4GRAY(); | |
printf("4 grayscale display\r\n"); | |
Paint_NewImage(BlackImage, EPD_4in26_WIDTH, EPD_4in26_HEIGHT, 90, WHITE); | |
Paint_SetScale(4); | |
Paint_Clear(0xff); | |
Paint_DrawPoint(10, 80, GRAY4, DOT_PIXEL_1X1, DOT_STYLE_DFT); | |
Paint_DrawPoint(10, 90, GRAY4, DOT_PIXEL_2X2, DOT_STYLE_DFT); | |
Paint_DrawPoint(10, 100, GRAY4, DOT_PIXEL_3X3, DOT_STYLE_DFT); | |
Paint_DrawLine(20, 70, 70, 120, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_SOLID); | |
Paint_DrawLine(70, 70, 20, 120, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_SOLID); | |
Paint_DrawRectangle(20, 70, 70, 120, GRAY4, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); | |
Paint_DrawRectangle(80, 70, 130, 120, GRAY4, DOT_PIXEL_1X1, DRAW_FILL_FULL); | |
Paint_DrawCircle(45, 95, 20, GRAY4, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); | |
Paint_DrawCircle(105, 95, 20, GRAY2, DOT_PIXEL_1X1, DRAW_FILL_FULL); | |
Paint_DrawLine(85, 95, 125, 95, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); | |
Paint_DrawLine(105, 75, 105, 115, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); | |
Paint_DrawString_EN(10, 0, "waveshare", &Font16, GRAY4, GRAY1); | |
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); | |
EPD_4in26_4GrayDisplay(BlackImage); | |
DEV_Delay_ms(3000); | |
#endif | |
EPD_4in26_Init(); | |
EPD_4in26_Clear(); | |
printf("Goto Sleep...\r\n"); | |
EPD_4in26_Sleep(); | |
free(BlackImage); | |
BlackImage = NULL; | |
DEV_Delay_ms(2000);//important, at least 2s | |
// close 5V | |
printf("close 5V, Module enters 0 power consumption ...\r\n"); | |
} | |
/* The main loop -------------------------------------------------------------*/ | |
void loop() | |
{ | |
// | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment