I replaced the display and associated Waveshare e-Paper ESP8266 Driver Board about 2 months ago because the original display failed after about a year. The new display worked fine, for a month, but now after a refresh, the contrast will be OK for about 2 seconds, and then fade about half. Any suggestions?
Code follows:
// GxEPD2_Example : with Wifi, HTTP request, and JSON filtering
// USE WITH GDEW075T7 800x480, GD7965 and BitmapLEK.h
/*******************************************************************
A sample project for making a HTTP GET request on an ESP8266
and parsing and filtering it from JSON and display using a
Waveshare ESP8266 e-paper driver and 7.5 (800x480) 2-color display
2022 LEKtronics.com
*******************************************************************/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
//ESP Web Server Library to host a web page
//#include <ESP8266WebServer.h>
#include <ArduinoJson.h>
#include <GxEPD2_BW.h> // including both doesn't use more code or ram
#include "BitmapLEK2.h"
// FreeFonts from Adafruit_GFX
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include "bitmaps/Bitmaps800x480.h" // 7.5" b/w
#define GxEPD2_DISPLAY_CLASS GxEPD2_BW
#define GxEPD2_DRIVER_CLASS GxEPD2_750_T7 // GDEW075T7 800x480, GD7965
#define EPD_CS SS
#define GxEPD2_BW_IS_GxEPD2_BW true
#define IS_GxEPD2_BW(x) IS_GxEPD(GxEPD2_BW_IS_, x)
#define MAX_DISPLAY_BUFFER_SIZE (81920ul-34000ul-20000ul) // ~34000 base use, change 5000 to your application use
#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8))
#define GxEPD2_DRIVER_CLASS GxEPD2_750_T7 // GDEW075T7 800x480, GD7965
GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, MAX_HEIGHT(GxEPD2_DRIVER_CLASS)> display(GxEPD2_DRIVER_CLASS(/*CS=15*/ EPD_CS, /*DC=4*/ 4, /*RST=5*/ 5, /*BUSY=16*/ 16));
//------- Replace the following! ------
char ssid[] = "*******"; // your network SSID (name)
char password[] = "********"; // your network key
// For HTTP requests
WiFiClient client;
// Just the base of the URL you want to connect to
#define TEST_HOST "api.weatherlink.com"
String dewpoint_f;
String observation_time;
String pressure_in;
String relative_humidity;
String temp_f;
String wind_dir;
String wind_mph;
String windchill_f;
String rain_day_in;
String rain_month_in;
String rain_year_in;
String pressure_tendency_string;
String sunrise;
String sunset;
//char Title[] = "---FREEDOM---";
//Static IP address configuration
IPAddress staticIP(192, 168, 1, 91); //ESP static ip
IPAddress gateway(192, 168, 1, 1); //IP Address of your WiFi Router (Gateway)
IPAddress subnet(255, 255, 255, 0); //Subnet mask
IPAddress dns(209,18,47,61); //DNS
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println("setup");
display.init(115200); // enable diagnostic output on Serial
WiFi.disconnect(); //Prevent connecting to wifi based on previous configuration
WiFi.config(staticIP, gateway, subnet, dns);
WiFi.begin(ssid, password);
// Connect to the WiFI
WiFi.mode(WIFI_STA);
//WiFi.disconnect();
delay(100);
// Attempt to connect to Wifi network:
Serial.print("Connecting Wifi: ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
IPAddress ipCon = WiFi.localIP();
Serial.println(ipCon);
Serial.println("setup done");
}
void loop()
{
makeHTTPRequest();
delay(960000);// 960000 is 15 minutes
//delay(15000);
}
void makeHTTPRequest() {
Serial.println("Requesting");
// Opening connection to server (Use 80 as port if HTTP)
if (!client.connect(TEST_HOST, 80))
{
Serial.println(F("Connection failed"));
return;
}
// give the esp a breather
yield();
// Send HTTP request
client.print(F("GET "));
// This is the second half of a request (everything that comes after the base URL)
client.print("/v1/NoaaExt.json?user=**********************&apiToken=*****************************************");
client.println(F(" HTTP/1.1"));
//Headers
client.print(F("Host: "));
client.println(TEST_HOST);
client.println(F("Cache-Control: no-cache"));
if (client.println() == 0)
{
Serial.println(F("Failed to send request"));
return;
}
//delay(100);
// Check HTTP status
char status[32] = {0};
client.readBytesUntil('\r', status, sizeof(status));
if (strcmp(status, "HTTP/1.1 200 OK") != 0)
{
Serial.print(F("Unexpected response: "));
Serial.println(status);
return;
}
// Skip HTTP headers
char endOfHeaders[] = "\r\n\r\n";
if (!client.find(endOfHeaders))
{
Serial.println(F("Invalid response"));
return;
}
// This is probably not needed for most, but I had issues
// with the Tindie api where sometimes there were random
// characters coming back before the body of the response.
// This will cause no harm to leave it in
// peek() will look at the character, but not take it off the queue
while (client.available() && client.peek() != '{')
{
char c = 0;
client.readBytes(&c, 1);
Serial.print(c);
Serial.println("BAD");
}
DynamicJsonDocument doc(6144);
DeserializationError error = deserializeJson(doc, client);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
// The huge input: an extract from Davis Weather response
const char* credit = doc["credit"]; // "Davis Instruments Corp."
const char* credit_URL = doc["credit_URL"]; // "http://www.davisnet.com"
const char* disclaimer_url = doc["disclaimer_url"]; // "http://www.davisnet.com/about/terms.asp"
const char* copyright_url = doc["copyright_url"]; // "http://www.davisnet.com/about/terms.asp"
const char* privacy_policy_url = doc["privacy_policy_url"];
JsonObject image = doc["image"];
const char* image_url = image["url"]; // "http://www.weatherlink.com/images/Logo_Davis_reflxblu.jpg"
const char* image_title = image["title"]; // "Davis WeatherLink"
const char* image_link = image["link"]; // "http://www.weatherlink.com"
const char* suggested_pickup = doc["suggested_pickup"]; // "15 minutes after the hour"
const char* suggested_pickup_period = doc["suggested_pickup_period"]; // "60"
const char* dewpoint_c = doc["dewpoint_c"]; // "-13.3"
const char* dewpoint_f = doc["dewpoint_f"]; // "8.0"
const char* dewpoint_string = doc["dewpoint_string"]; // "8.0 F (-13.3 C)"
const char* heat_index_c = doc["heat_index_c"]; // "-9.4"
const char* heat_index_f = doc["heat_index_f"]; // "15.0"
const char* heat_index_string = doc["heat_index_string"]; // "15.0 F (-9.4 C)"
const char* location = doc["location"]; // "Pemberville, OH, United States of America"
const char* latitude = doc["latitude"]; // "41.40177"
const char* longitude = doc["longitude"]; // "-83.44719"
const char* observation_time = doc["observation_time"]; // "Last Updated on Jan 25 2022, 9:52 pm EST"
const char* observation_time_rfc822 = doc["observation_time_rfc822"]; // "Tue, 25 Jan 2022 21:52:10 ...
const char* pressure_in = doc["pressure_in"]; // "30.328"
const char* pressure_mb = doc["pressure_mb"]; // "1027.0"
const char* pressure_string = doc["pressure_string"]; // "1027.0 mb"
const char* relative_humidity = doc["relative_humidity"]; // "73"
const char* station_id = doc["station_id"]; // "larryk240"
const char* temp_c = doc["temp_c"]; // "-9.2"
const char* temp_f = doc["temp_f"]; // "15.4"
const char* temperature_string = doc["temperature_string"]; // "15.4 F (-9.2 C)"
const char* wind_degrees = doc["wind_degrees"]; // "271"
const char* wind_dir = doc["wind_dir"]; // "West"
const char* wind_kt = doc["wind_kt"]; // "5.2"
const char* wind_mph = doc["wind_mph"]; // "6.0"
const char* windchill_c = doc["windchill_c"]; // "-10.6"
const char* windchill_f = doc["windchill_f"]; // "13.0"
const char* windchill_string = doc["windchill_string"]; // "13.0 F (-10.6 C)"
JsonObject davis_current_observation = doc["davis_current_observation"];
const char* davis_current_observation_DID = davis_current_observation["DID"]; // "001D0AE07E21"
const char* davis_current_observation_station_name = davis_current_observation["station_name"];
int davis_current_observation_observation_age = davis_current_observation["observation_age"]; // 3
const char* davis_current_observation_dewpoint_day_high_f = davis_current_observation["dewpoint_day_high_f"];
const char* davis_current_observation_dewpoint_day_high_time = davis_current_observation["dewpoint_day_high_time"];
const char* davis_current_observation_dewpoint_day_low_f = davis_current_observation["dewpoint_day_low_f"];
const char* davis_current_observation_dewpoint_day_low_time = davis_current_observation["dewpoint_day_low_time"];
const char* davis_current_observation_dewpoint_month_high_f = davis_current_observation["dewpoint_month_high_f"];
const char* davis_current_observation_dewpoint_month_low_f = davis_current_observation["dewpoint_month_low_f"];
const char* davis_current_observation_dewpoint_year_high_f = davis_current_observation["dewpoint_year_high_f"];
const char* davis_current_observation_dewpoint_year_low_f = davis_current_observation["dewpoint_year_low_f"];
const char* davis_current_observation_heat_index_day_high_f = davis_current_observation["heat_index_day_high_f"];
const char* davis_current_observation_heat_index_day_high_time = davis_current_observation["heat_index_day_high_time"];
const char* davis_current_observation_heat_index_month_high_f = davis_current_observation["heat_index_month_high_f"];
const char* davis_current_observation_heat_index_year_high_f = davis_current_observation["heat_index_year_high_f"];
const char* davis_current_observation_pressure_day_high_in = davis_current_observation["pressure_day_high_in"];
const char* davis_current_observation_pressure_day_high_time = davis_current_observation["pressure_day_high_time"];
const char* davis_current_observation_pressure_day_low_in = davis_current_observation["pressure_day_low_in"];
const char* davis_current_observation_pressure_day_low_time = davis_current_observation["pressure_day_low_time"];
const char* davis_current_observation_pressure_month_high_in = davis_current_observation["pressure_month_high_in"];
const char* davis_current_observation_pressure_month_low_in = davis_current_observation["pressure_month_low_in"];
const char* davis_current_observation_pressure_tendency_string = davis_current_observation["pressure_tendency_string"];
const char* davis_current_observation_pressure_year_high_in = davis_current_observation["pressure_year_high_in"];
const char* davis_current_observation_pressure_year_low_in = davis_current_observation["pressure_year_low_in"];
const char* davis_current_observation_rain_day_in = davis_current_observation["rain_day_in"];
const char* davis_current_observation_rain_month_in = davis_current_observation["rain_month_in"];
const char* davis_current_observation_rain_rate_day_high_in_per_hr = davis_current_observation["rain_rate_day_high_in_per_hr"];
const char* davis_current_observation_rain_rate_hour_high_in_per_hr = davis_current_observation["rain_rate_hour_high_in_per_hr"];
const char* davis_current_observation_rain_rate_in_per_hr = davis_current_observation["rain_rate_in_per_hr"];
const char* davis_current_observation_rain_rate_month_high_in_per_hr = davis_current_observation["rain_rate_month_high_in_per_hr"];
const char* davis_current_observation_rain_rate_year_high_in_per_hr = davis_current_observation["rain_rate_year_high_in_per_hr"];
const char* davis_current_observation_rain_storm_in = davis_current_observation["rain_storm_in"];
const char* davis_current_observation_rain_year_in = davis_current_observation["rain_year_in"];
const char* davis_current_observation_relative_humidity_day_high = davis_current_observation["relative_humidity_day_high"];
const char* davis_current_observation_relative_humidity_day_high_time = davis_current_observation["relative_humidity_day_high_time"];
const char* davis_current_observation_relative_humidity_day_low = davis_current_observation["relative_humidity_day_low"];
const char* davis_current_observation_relative_humidity_day_low_time = davis_current_observation["relative_humidity_day_low_time"];
const char* davis_current_observation_relative_humidity_month_high = davis_current_observation["relative_humidity_month_high"];
const char* davis_current_observation_relative_humidity_month_low = davis_current_observation["relative_humidity_month_low"];
const char* davis_current_observation_relative_humidity_year_high = davis_current_observation["relative_humidity_year_high"];
const char* davis_current_observation_relative_humidity_year_low = davis_current_observation["relative_humidity_year_low"];
const char* davis_current_observation_relative_humidity_in = davis_current_observation["relative_humidity_in"];
const char* davis_current_observation_relative_humidity_in_day_high = davis_current_observation["relative_humidity_in_day_high"];
const char* davis_current_observation_relative_humidity_in_day_high_time = davis_current_observation["relative_humidity_in_day_high_time"];
const char* davis_current_observation_relative_humidity_in_day_low = davis_current_observation["relative_humidity_in_day_low"];
const char* davis_current_observation_relative_humidity_in_day_low_time = davis_current_observation["relative_humidity_in_day_low_time"];
const char* davis_current_observation_relative_humidity_in_month_high = davis_current_observation["relative_humidity_in_month_high"];
const char* davis_current_observation_relative_humidity_in_month_low = davis_current_observation["relative_humidity_in_month_low"];
const char* davis_current_observation_relative_humidity_in_year_high = davis_current_observation["relative_humidity_in_year_high"];
const char* davis_current_observation_relative_humidity_in_year_low = davis_current_observation["relative_humidity_in_year_low"];
const char* davis_current_observation_sunrise = davis_current_observation["sunrise"]; // "7:50am"
const char* davis_current_observation_sunset = davis_current_observation["sunset"]; // "5:41pm"
const char* davis_current_observation_temp_day_high_f = davis_current_observation["temp_day_high_f"];
const char* davis_current_observation_temp_day_high_time = davis_current_observation["temp_day_high_time"];
const char* davis_current_observation_temp_day_low_f = davis_current_observation["temp_day_low_f"];
const char* davis_current_observation_temp_day_low_time = davis_current_observation["temp_day_low_time"];
const char* davis_current_observation_temp_month_high_f = davis_current_observation["temp_month_high_f"];
const char* davis_current_observation_temp_month_low_f = davis_current_observation["temp_month_low_f"];
const char* davis_current_observation_temp_year_high_f = davis_current_observation["temp_year_high_f"];
const char* davis_current_observation_temp_year_low_f = davis_current_observation["temp_year_low_f"];
const char* davis_current_observation_temp_in_day_high_f = davis_current_observation["temp_in_day_high_f"];
const char* davis_current_observation_temp_in_day_high_time = davis_current_observation["temp_in_day_high_time"];
const char* davis_current_observation_temp_in_day_low_f = davis_current_observation["temp_in_day_low_f"];
const char* davis_current_observation_temp_in_day_low_time = davis_current_observation["temp_in_day_low_time"];
const char* davis_current_observation_temp_in_f = davis_current_observation["temp_in_f"]; // "49.6"
const char* davis_current_observation_temp_in_month_high_f = davis_current_observation["temp_in_month_high_f"];
const char* davis_current_observation_temp_in_month_low_f = davis_current_observation["temp_in_month_low_f"];
const char* davis_current_observation_temp_in_year_high_f = davis_current_observation["temp_in_year_high_f"];
const char* davis_current_observation_temp_in_year_low_f = davis_current_observation["temp_in_year_low_f"];
const char* davis_current_observation_wind_day_high_mph = davis_current_observation["wind_day_high_mph"];
const char* davis_current_observation_wind_day_high_time = davis_current_observation["wind_day_high_time"];
const char* davis_current_observation_wind_month_high_mph = davis_current_observation["wind_month_high_mph"];
const char* davis_current_observation_wind_ten_min_avg_mph = davis_current_observation["wind_ten_min_avg_mph"];
const char* davis_current_observation_wind_ten_min_gust_mph = davis_current_observation["wind_ten_min_gust_mph"];
const char* davis_current_observation_wind_year_high_mph = davis_current_observation["wind_year_high_mph"];
const char* davis_current_observation_windchill_day_low_f = davis_current_observation["windchill_day_low_f"];
const char* davis_current_observation_windchill_day_low_time = davis_current_observation["windchill_day_low_time"];
const char* davis_current_observation_windchill_month_low_f = davis_current_observation["windchill_month_low_f"];
const char* davis_current_observation_windchill_year_low_f = davis_current_observation["windchill_year_low_f"];
const char* time_to_generate = doc["time_to_generate"]; // "0.008630 seconds"
if (!error) {
// Print the result
//serializeJsonPretty(doc, Serial);
String freedom_dewpoint_f = doc["dewpoint_f"];
int str_len = freedom_dewpoint_f.length() + 1;
char dew_F[str_len];
freedom_dewpoint_f.toCharArray(dew_F, str_len);
String freedom_observation_time = doc["observation_time"];
int str_len_0 = freedom_observation_time.length() + 1;
char ob_Time[str_len_0];
freedom_observation_time.toCharArray(ob_Time, str_len_0);
String freedom_temp_f = doc["temp_f"];
int str_len_1 = freedom_temp_f.length() + 1;
char temp_F[str_len_1];
freedom_temp_f.toCharArray(temp_F, str_len_1);
String freedom_wind_mph = doc["wind_mph"];
int str_len_2 = freedom_wind_mph.length() + 1;
char wind_Mph[str_len_2];
freedom_wind_mph.toCharArray(wind_Mph, str_len_2);
String freedom_wind_dir = doc["wind_dir"];
int str_len_3 = freedom_wind_dir.length() + 1;
char wind_Dir[str_len_3];
freedom_wind_dir.toCharArray(wind_Dir, str_len_3);
String freedom_windchill_f = doc["windchill_f"];
int str_len_4 = freedom_windchill_f.length() + 1;
char wind_Chill[str_len_4];
freedom_windchill_f.toCharArray(wind_Chill, str_len_4);
String freedom_pressure_in = doc["pressure_in"];
int str_len_5 = freedom_pressure_in.length() + 1;
char press_In[str_len_5];
freedom_pressure_in.toCharArray(press_In, str_len_5);
String freedom_relative_humidity = doc["relative_humidity"];
int str_len_6 = freedom_relative_humidity.length() + 1;
char rel_Hum[str_len_6];
freedom_relative_humidity.toCharArray(rel_Hum, str_len_5);
String freedom_rain_day_in = davis_current_observation["rain_day_in"];
int str_len_7 = freedom_rain_day_in.length() + 1;
char rain_Day[str_len_7];
freedom_rain_day_in.toCharArray(rain_Day, str_len_7);
String freedom_rain_month_in = davis_current_observation["rain_month_in"];
int str_len_8 = freedom_rain_month_in.length() + 1;
char rain_Mo[str_len_8];
freedom_rain_month_in.toCharArray(rain_Mo, str_len_8);
String freedom_rain_year_in = davis_current_observation["rain_year_in"];
int str_len_9 = freedom_rain_year_in.length() + 1;
char rain_Yr[str_len_9];
freedom_rain_year_in.toCharArray(rain_Yr, str_len_9);
String freedom_pressure_tendency_string = davis_current_observation["pressure_tendency_string"];
int str_len_10 = freedom_pressure_tendency_string.length() + 1;
char press_Str[str_len_10];
freedom_pressure_tendency_string.toCharArray(press_Str, str_len_10);
String freedom_sunrise = davis_current_observation["sunrise"];
int str_len_11 = freedom_sunrise.length() + 1;
char sun_Rise[str_len_11];
freedom_sunrise.toCharArray(sun_Rise, str_len_11);
String freedom_sunset = davis_current_observation["sunset"];
int str_len_12 = freedom_sunset.length() + 1;
char sun_Set[str_len_12];
freedom_sunset.toCharArray(sun_Set, str_len_12);
Serial.print("rain_day_in = ");
Serial.println(freedom_rain_day_in);
Serial.print("rain_month_in = ");
Serial.println(freedom_rain_month_in);
Serial.print("rain_year_in = ");
Serial.println(freedom_rain_year_in);
display.setRotation(0);
display.setFont(&FreeMonoBold24pt7b);
display.setTextColor(GxEPD_BLACK);
uint16_t x = ((display.width() - 400) / 2);
uint16_t y = (display.height() - 400);
display.setFullWindow();
display.firstPage();
do
{
display.fillScreen(GxEPD_WHITE);
display.setCursor(x, y - 11);
display.setFont(&FreeMonoBold24pt7b);
display.println("FREEDOM WEATHER");
display.drawInvertedBitmap(x - 130, 20, lek_bmp_sunrise, 61, 50, GxEPD_BLACK);
display.drawInvertedBitmap(x + 475, 20, lek_bmp_sunset, 61, 50, GxEPD_BLACK);
display.setFont(&FreeMonoBold12pt7b);
display.setCursor(x - 140, y + 10);
display.print(sun_Rise);
display.setCursor(x + 465, y + 10);
display.print(sun_Set);
display.setFont(&FreeMonoBold12pt7b);
display.setCursor(x - 105, y + 55);
display.print("Temperature Wind Chill Dewpoint ");
//display.drawRect(x - 115, y + 30, 175, 80, 0);
display.setCursor(x - 90, y + 95);
display.setFont(&FreeMonoBold18pt7b);
display.print(temp_F);
display.print(" F");
//display.drawRect(x + 120, y + 30, 175, 80, 0);
display.setCursor(x + 140, y + 95);
display.print(wind_Chill);
display.print(" F");
//display.drawRect(x + 350, y + 30, 175, 80, 0);
display.setCursor(x + 370, y + 95);
display.print(dew_F);
display.print(" F");
display.setFont(&FreeMonoBold12pt7b);
display.setCursor(x +180, y + 145);
display.print("WIND");
//display.drawRect(x - 150, y + 120, 700, 75, 0);
display.setFont(&FreeMonoBold18pt7b);
uint16_t drawCenter = (str_len_2 * 12) + (str_len_3 * 12) + 60;
Serial.print("drawCenter = ");
Serial.println(drawCenter);
display.setCursor(440 - drawCenter , y + 180);
//str_len_3
display.print(wind_Dir);
display.print(" @ ");
display.print(wind_Mph);
display.print(" MPH");
display.setCursor(x - 110, y + 235);
display.setFont(&FreeMonoBold12pt7b);
display.print("Barometer ");
display.setFont(&FreeMonoBold18pt7b);
display.print(press_In);
display.print(" IN");
display.setCursor(x + 225, y + 250);
display.setFont(&FreeMonoBold12pt7b);
display.print(" Humidity ");
display.setFont(&FreeMonoBold18pt7b);
display.print(rel_Hum);
display.print(" %");
//display.drawRect(x - 150, y + 205, 700, 70, 0);
display.setCursor(x - 80, y + 260);
display.setFont(&FreeMonoBold9pt7b);
display.print("Pressure ");
display.print(press_Str);
display.setFont(&FreeMonoBold12pt7b);
display.setCursor(x + 75, y + 310);
display.print("Inches Of Rainfall");
display.setCursor(x - 110, y + 345);
display.setFont(&FreeMonoBold12pt7b);
display.print("Day ");
display.setFont(&FreeMonoBold18pt7b);
display.print(rain_Day);
display.setFont(&FreeMonoBold12pt7b);
display.print(" Month ");
display.setFont(&FreeMonoBold18pt7b);
display.print(rain_Mo);
display.setFont(&FreeMonoBold12pt7b);
display.print(" Year ");
display.setFont(&FreeMonoBold18pt7b);
display.print(rain_Yr);
//display.drawRect(x - 150, y + 285, 700, 75, 0);
display.drawLine(x - 20, y + 370, x + 420, y + 370 , 0);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(x - 20 , y + 390);
display.print(ob_Time);
display.drawInvertedBitmap(x - 140, y + 363, lek_bmp_lektronics, 120, 40, GxEPD_BLACK);
display.drawInvertedBitmap(x + 445, y + 374, lek_bmp_copyright, 20, 20, GxEPD_BLACK);
display.setFont(&FreeMonoBold12pt7b);
display.setCursor(x +470 , y + 390);
display.print("2023");
//display.drawRect(x - 25, y - 50 , 460, 52, 0);
//display.drawRect(x - 30, y - 55 , 470, 62, 0);
//display.drawRect(x - 35, y - 60 , 480, 72, 0);
//display.drawRect(x - 40, y - 65 , 490, 82, 0);
}
while (display.nextPage());
display.powerOff();
}
else {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
}
type or paste code here

