MeshTalos-Client/ESP32epdx/examples/WiFi-EPD/example1-WiFi/example1-WiFi.ino
2025-10-28 00:34:09 +08:00

300 lines
12 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include<ESP32epdx.h> //E-paper SPI etc
//EPD
#include"EPD.h" //E-paper driver
#include"IMAGE.h" //E-paper image data
//WiFi
#include <WiFi.h>
unsigned char ImageBW[EPD_ARRAY];//Define canvas space
//WiFi username and password setting
/*
const char* ssid = "GOODISPLAY";
const char* password = "84619565@";
*/
const char* ssid = "CU_BBc6"; //WiFi username
const char* password = "za9g8jvb"; //WiFi password
//String WifiData;
int num;
WiFiServer server(8080); //Default unchanged
//IPAddress The local IP address can be set by first querying the local network segment through ImageToWiFi upper computer software.
IPAddress staticIP(192, 168, 2, 208); //Change network segment and IP number
IPAddress gateway(192, 168, 2, 1); //Change network segment
IPAddress subnet(255, 255, 255, 0); //Default unchanged
IPAddress dns1(192, 168, 2,1); //Change network segment
IPAddress dns2(192, 168, 2,1); //Change network segment
void setup() {
/* ESP32-WROOM-32D (Using hardware SPI)
BUSY——GPIO13 RES——GPIO12 DC——GPIO14 CS——GPIO27 SCK—GPIO18 SDIN—GPIO23 */
pinMode(13, INPUT); //BUSY
pinMode(12, OUTPUT); //RES
pinMode(14, OUTPUT); //DC
pinMode(27, OUTPUT); //CS
//SPI
SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));
SPI.begin ();
//WiFi
Serial.begin(115200);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
//WIFI Parameter settings
WiFi.persistent(true);
WiFi.mode(WIFI_STA); // switch off AP
WiFi.setAutoConnect(true);
WiFi.setAutoReconnect(true);
WiFi.disconnect();
//Pass in static IP address and gateway parameters DNS1, And 2
if (WiFi.config(staticIP, gateway, subnet, dns1, dns2) == false) {
Serial.println("Configuration failed.");
}
WiFi.begin(ssid, password); //DNS1 DNS2
Connect1:
int ConnectTimeout = 60; // 30 seconds
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
Serial.print(WiFi.status());
if (--ConnectTimeout <= 0)
{
Serial.println();
Serial.println("WiFi connect timeout");
//goto Connect1;
delay(10);
ESP.restart(); //Reset ESP32 to ensure WiFi connection is OK
}
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //local IP
server.begin();
}
//Tips//
/*
1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image.
2.There will be no flicker when EPD performs a partial update.
3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD.
4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.)
5.Re-initialization is required for every full screen update.
6.When porting the program, set the BUSY pin to input mode and other pins to output mode.
*/
/*
Operation steps:
1. Use the ImageToWiFi upper computer software to locate the local network segment.
2. Set the device IP address.
3. Set the network segment and IP number of the target device on the upper computer.
4. Transfer image data to the device through ImageToWiFi software. Different electronic paper initialization and data sending commands may vary, and the actual electronic paper driver program shall prevail.
*/
void loop() {
long i;
long num;
long dataLong=EPD_ARRAY;
//If WiFi is connected, e-paper screen clearing
EPD_Init(); //Full screen update initialization.
EPD_WhiteScreen_White(); //Clear screen function.
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
while(1)
{
while (WiFi.status() != WL_CONNECTED) {
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect(); //Disconnect WiFi
WiFi.reconnect(); //Reconnect WiFi
}
WiFiClient client = server.available(); // listen for incoming clients
if (client)
{
EPD_Init(); //Full screen update initialization.
while (client.connected()) // loop while the client's connected
{
if (client.available()) // if there's bytes to read from the client,
{
//black and white datas////////////////////
if(num==0)
EPD_W21_WriteCMD(0x10); //Old Data
if(num<dataLong) //black and white
EPD_W21_WriteDATA(client.read()); //Write Old DataThis is necessary
if(num==dataLong)
EPD_W21_WriteCMD(0x13);//New Data
if(num>=dataLong&&num<dataLong*2) //Red and White
EPD_W21_WriteDATA(~client.read()); //Write New Data
if(num>=dataLong*2) //Read excess data
client.read(); //Read only without processing
num++; //count add
}
}
EPD_Update();//EPD refresh
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
num=0; //RESET 0
// close the connection:
client.println("OK");//Send data and receive OK signal
client.stop();
}
}
#if 1 //Full screen update, fast update, and partial update demostration.
EPD_Init(); //Full screen update initialization.
EPD_WhiteScreen_White(); //Clear screen function.
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
delay(2000); //Delay for 2s.
/************Full display(2s)*******************/
EPD_Init(); //Full screen update initialization.
EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
delay(2000); //Delay for 2s.
/************Fast update mode(1.5s)*******************/
EPD_Init_Fast(); //Fast update initialization.
EPD_WhiteScreen_ALL_Fast(gImage_2); //To display one image using fast update.
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
delay(2000); //Delay for 2s.
/************4 Gray update mode(2s)*******************/
EPD_Init_4G(); //Fast update initialization.
EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using 4 gray update.
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
delay(2000); //Delay for 2s.
#if 1 //Partial update demostration.
//Partial update demo support displaying a clock at 5 locations with 00:00. If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
//After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
//////////////////////Partial update time demo/////////////////////////////////////
EPD_Init(); //Electronic paper initialization.
EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
EPD_Init_Part(); //Pa update initialization.
for(i=0;i<6;i++)
{
EPD_Dis_Part_Time(200,180,Num[1],Num[0],gImage_numdot,Num[0],Num[i],5,104,48); //x,y,DATA-A~E,Resolution 48*104
}
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
delay(2000); //Delay for 2s.
EPD_Init(); //Full screen update initialization.
EPD_WhiteScreen_White(); //Clear screen function.
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
delay(2000); //Delay for 2s.
#endif
#if 0 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
//After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
//////////////////////Partial update time demo/////////////////////////////////////
EPD_Init(); //Full screen update initialization.
EPD_WhiteScreen_White(); //Clear screen function.
EPD_Init_Part();
EPD_Dis_PartAll(gImage_p1);
EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
delay(2000); //Delay for 2s.
EPD_Init(); //Full screen update initialization.
EPD_WhiteScreen_White(); //Clear screen function.
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
delay(2000); //Delay for 2s.
#endif
#if 0 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
/************Full display(2s)*******************/
EPD_Init_180(); //Full screen update initialization.
EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
delay(2000); //Delay for 2s.
#endif
#endif
#if 1 //GUI Demo(GUI examples can display points, lines, rectangles, circles, letters, numbers, etc).
//Data initialization settings.
Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 0, WHITE); //Set canvas parameters, GUI image rotation, please change 0 to 0/90/180/270.
Paint_SelectImage(ImageBW); //Select current settings.
/**************Drawing demonstration**********************/
Paint_Clear(WHITE); //Clear canvas.
//Point.
Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
//Line.
Paint_DrawLine(20, 10, 70, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
Paint_DrawLine(70, 10, 20, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
//Rectangle.
Paint_DrawRectangle(20, 10, 70, 60, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
Paint_DrawRectangle(85, 10, 130, 60, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
//Circle.
Paint_DrawCircle(150, 90, 30, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
Paint_DrawCircle(200, 90, 30, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
EPD_Init(); //Full screen update initialization.
EPD_Display(ImageBW); //Display GUI image.
EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
delay(2000); //Delay for 2s.
/***********Letter demo***************************/
Paint_Clear(WHITE); //Clear canvas.
Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE); //5*8.
Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //7*12.
Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //11*16.
Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //14*20.
Paint_DrawString_EN(0, 80, "Good Display", &Font24, BLACK, WHITE); //17*24.`
Paint_DrawNum(0, 120, 123456789, &Font8, BLACK, WHITE); //5*8.
Paint_DrawNum(0, 130, 123456789, &Font12, BLACK, WHITE); //7*12.
Paint_DrawNum(0, 155, 123456789, &Font16, BLACK, WHITE); //11*16.
Paint_DrawNum(0, 175, 123456789, &Font20, BLACK, WHITE); //14*20.
Paint_DrawNum(0, 210, 123456789, &Font24, BLACK, WHITE); //17*24.
EPD_Init(); //Full screen update initialization.
EPD_Display(ImageBW);//Display GUI image.
EPD_DeepSleep(); //EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
delay(2000); //Delay for 2s.
#endif
//Clear
EPD_Init(); //Full screen update initialization.
EPD_WhiteScreen_White(); //Clear screen function.
EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
delay(2000); //Delay for 2s.
while(1); // The program stops here
}