I have built a weather station and it can work for days without any problems, but from one moment to the next the display starts to shine (i have a video).Whatever I do, this will continue to be the case. After turning it off for a while (sometimes an hour, sometimes several hours) everything works again for a while.
error code:
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x400556c0 PS : 0x00060d30 A0 : 0x8200c445 A1 : 0x3fcebd40
A2 : 0x00000016 A3 : 0x00000014 A4 : 0x000000ff A5 : 0x0000ff00
A6 : 0x00ff0000 A7 : 0xff000000 A8 : 0x82006c41 A9 : 0x3fcebd00
A10 : 0x00000000 A11 : 0x0000e100 A12 : 0x00000000 A13 : 0x3fc9ae58
A14 : 0x3d87d780 A15 : 0x0000001f SAR : 0x0000001d EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000014 LBEG : 0x40054bf0 LEND : 0x40054c0f LCOUNT : 0x00000000
Backtrace: 0x400556bd:0x3fcebd40 0x4200c442:0x3fcebd50 0x4200c461:0x3fcebd70 0x420043c5:0x3fcebd90 0x42005065:0x3fcebdb0 0x42005490:0x3fcebe60 0x4200efae:0x3fcebeb0
// Sketch for ESP32, ESP8266, RP2040 Pico W, RP2040 Nano Connect
// it will run on a "bare" board ans reports via Serial messages.
// It fetches the Weather Forecast from OpenWeather and is
// an example from the library here:
// https://github.com/Bodmer/OpenWeather
// Sign up for a key and read API configuration info here:
// https://openweathermap.org/
// You can change the "User_Setup.h" file inside the OpenWeather
// to shows the data stream from the server
//ESP32_Wroom_32 (30 pins)
//Setup_User (ILI9488)
// Choose library to load
#ifdef ESP8266
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#else // ESP32, Pico W, RP2040 Nano Connect
#include <WiFi.h>
#endif
#include <JSON_Decoder.h>
#include <OpenWeather.h>
// Just using this library for unix time conversion
#include <Time.h>
/******************************************************************************/
#include "gfx_conf.h" //Please modify the setting of display driver according to the board you are using in gfx_conf.h.
/******************************************************************************/
#include "FS.h"
#include "SPIFFS.h"
LGFX lcd; //tbv display
//---------------------
// =====================================================
// ========= User configured stuff starts here =========
// Further configuration settings can be found in the
// OpenWeather library "User_Setup.h" file
#define TIME_OFFSET 1UL * 3600UL // UTC + 0 hour
// Change to suit your WiFi router
#define WIFI_SSID "xxxx"
#define WIFI_PASSWORD "xxxxx"
// OpenWeather API Details, replace x's with your API key
String api_key = "xxxxxxxxx"; // Obtain this from your OpenWeather account
// Set both your longitude and latitude to at least 4 decimal places
String latitude = "51.4416"; // 90.0000 to -90.0000 negative for Southern hemisphere
String longitude = "5.4697"; // 180.000 to -180.000 negative for West
String units = "metric"; // or "imperial"
String language = "nl"; // See notes tab
// ========= User configured stuff ends here =========
// =====================================================
OW_Weather ow; // Weather forecast library instance
//------------------------------------------------------------
//FONTS
//https://oleddisplay.squix.ch/
#include "fonts/Luckiest_Guy_Regular_24.h"
#include "fonts/Dialog_plain_7.h"
#include "fonts/Dialog_plain_9.h"
#include "fonts/Dialog_plain_12.h"
#include "fonts/Dialog_plain_14.h"
#include "fonts/Dialog_plain_18.h"
#include "fonts/Dialog_plain_24.h"
#include "fonts/Dialog_bold_12.h"
#include "fonts/Dialog_bold_14.h"
#include "fonts/Dialog_bold_24.h"
#include "fonts/DialogInput_plain_32.h"
#include "fonts/Dialog_bold_32.h"
#include "fonts/Dialog_bold_40.h"
#include "fonts/Orbitron_Bold_32.h"
//-------------------------
#define TFT_ORANGE 0xFDA0
void setup() {
Serial.begin(115200);
//tbv display 7 inch
//IO Pin
pinMode(38, OUTPUT);
digitalWrite(38, LOW);
pinMode(17, OUTPUT);
digitalWrite(17, LOW);
pinMode(18, OUTPUT);
digitalWrite(18, LOW);
pinMode(42, OUTPUT);
digitalWrite(42, LOW);
// Init Display
lcd.begin();
lcd.fillScreen(TFT_BLACK);
// lcd.setTextSize(2);
delay(5000);
#ifdef TFT_BL
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH);
#endif
draw_all_panel_frames ();
//---------------------------------------------------------------
Serial.printf("\n\nConnecting to %s\n", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected\n");
//---------------------------------------------------------------
SPIFFS.begin();
listFiles();
#ifdef FORMAT_SPIFFS
tft.drawString("Formatting SPIFFS, so wait!", 120, 195); SPIFFS.format();
#endif
} //einde setup
void loop() {
lcd.fillScreen(TFT_BLACK);
draw_all_panel_frames ();
//Koptekst
lcd.setFont(&Luckiest_Guy_Regular_24);
lcd.setCursor(70, 12);
lcd.setTextColor(TFT_CYAN);
lcd.printf("MEERDAAGSE ONLINE WEERSVERWACHTING EINDHOVEN");
lcd.setTextColor(TFT_YELLOW);
//lcd.printf(subT0);
lcd.setFont(0);
//---------------------------------------------------------
//drawBmp("/cloud_sky.bmp",25, 170);
//drawBmp("/cloudy.bmp",235, 60);
//drawBmp("/cloud.bmp",435, 60);
//-------------------------------------------------------------
printForecast();
// We can make 1000 requests a day
delay(5 * 60 * 1000); // Every 5 minutes = 288 requests per day
}//einde loop
void draw_all_panel_frames ()
{//kaders
lcd.drawRect(5,5,790,40,TFT_GREEN); //rechthoek / x,y begin, x,y eind , kleur
lcd.drawLine(265,105,265,475,TFT_GREEN);
lcd.drawLine(530,105,530,475,TFT_GREEN);
//lcd.drawLine(600,105,600,475,TFT_GREEN);
lcd.drawLine(5,105,795,105,TFT_GREEN);
}
//--------------------------------------
/***************************************************************************************
** Send weather info to serial port
***************************************************************************************/
void printForecast()
{
// Create the structures that hold the retrieved weather
OW_forecast *forecast = new OW_forecast;
Serial.print("\nRequesting weather information from OpenWeather... ");
ow.getForecast(forecast, api_key, latitude, longitude, units, language);
Serial.println("Weather from OpenWeather\n");
Serial.print("city_name : "); Serial.println(forecast->city_name);
Serial.print("sunrise : "); Serial.println(strTime(forecast->sunrise));
Serial.print("sunset : "); Serial.println(strTime(forecast->sunset));
Serial.print("Latitude : "); Serial.println(ow.lat);
Serial.print("Longitude : "); Serial.println(ow.lon);
Serial.print("Timezone : "); Serial.println(forecast->timezone);
Serial.println();
if (forecast)
{
Serial.println("############### Forecast weather ###############\n");
for (int i = 0; i < (MAX_DAYS * 8); i++)
{
Serial.print("3 hourly forecast "); if (i < 10) Serial.print(" "); Serial.print(i);
Serial.println();
Serial.print("dt (time) : "); Serial.print(strTime(forecast->dt[i]));
Serial.print("temp : "); Serial.println(forecast->temp[i]);
Serial.print("temp.min : "); Serial.println(forecast->temp_min[i]);
Serial.print("temp.max : "); Serial.println(forecast->temp_max[i]);
Serial.print("pressure : "); Serial.println(forecast->pressure[i]);
Serial.print("sea_level : "); Serial.println(forecast->sea_level[i]);
Serial.print("grnd_level : "); Serial.println(forecast->grnd_level[i]);
Serial.print("humidity : "); Serial.println(forecast->humidity[i]);
Serial.print("clouds : "); Serial.println(forecast->clouds_all[i]);
Serial.print("wind_speed : "); Serial.println(forecast->wind_speed[i]);
Serial.print("wind_deg : "); Serial.println(forecast->wind_deg[i]);
Serial.print("wind_gust : "); Serial.println(forecast->wind_gust[i]);
Serial.print("visibility : "); Serial.println(forecast->visibility[i]);
Serial.print("pop : "); Serial.println(forecast->pop[i]);
Serial.println();
Serial.print("dt_txt : "); Serial.println(forecast->dt_txt[i]);
Serial.print("id : "); Serial.println(forecast->id[i]);
Serial.print("main : "); Serial.println(forecast->main[i]);
Serial.print("description : "); Serial.println(forecast->description[i]);
Serial.print("icon : "); Serial.println(forecast->icon[i]);
Serial.println();
//i=0
if (forecast->id[0])
{//begin i=0
lcd.setTextColor(TFT_YELLOW);
lcd.setCursor(25,50); //1e zijkant naar rechts, 2e bovenkant naar beneden
String myString1 = strTime(forecast->dt[1]);
String sub1 = myString1.substring(0, 3);
if (sub1== "Sun"){sub1="Zondag";}
if (sub1== "Mon"){sub1="Maandag";}
if (sub1== "Tue"){sub1="Dinsdag";}
if (sub1== "Wed"){sub1="Woensdag";}
if (sub1== "Thu"){sub1="Donderdag";}
if (sub1== "Fri"){sub1="Vrijdag";}
if (sub1== "Sat"){sub1="Zaterdag";}
lcd.setCursor(30,115);
lcd.setFreeFont(&Dialog_bold_32);
lcd.print(sub1);
//---------------------------------------------------------------
//tbv forecast tijd
String myStringT1 = strTime(forecast->dt[1]);
String subT1 = myStringT1.substring(11, 16); //tbv tijd forcast
lcd.setFreeFont(&Dialog_bold_12);
lcd.setCursor(75,155);
lcd.print(subT1);
lcd.setFreeFont(&Orbitron_Bold_32);
lcd.setTextColor(TFT_WHITE);
lcd.setCursor(50,55);
lcd.print("Het is vandaag : ");
String myString0 = strTime(forecast->dt[0]);
String sub0 = myString0.substring(0, 3);
if (sub0== "Sun"){sub0="Zondag";}
if (sub0== "Mon"){sub0="Maandag";}
if (sub0== "Tue"){sub0="Dinsdag";}
if (sub0== "Wed"){sub0="Woensdag";}
if (sub0== "Thu"){sub0="Donderdag";}
if (sub0== "Fri"){sub0="Vrijdag";}
if (sub0== "Sat"){sub0="Zaterdag";}
//tbv
String myStringM0 = strTime(forecast->dt[0]);
String subM0 = myStringM0.substring(4, 7); //tbv tijd forcast
String myStringD0 = strTime(forecast->dt[0]);
String subD0 = myStringD0.substring(9, 11); //tbv tijd forcast
if (subM0== "Jan"){subM0="Januari";}
if (subM0== "Feb"){subM0="Februari";}
if (subM0== "Mar"){subM0="Maart";}
if (subM0== "Apr"){subM0="April";}
if (subM0== "May"){subM0="Mei";}
if (subM0== "Jun"){subM0="Juni";}
if (subM0== "Jul"){subM0="Juli";}
if (subM0== "Aug"){subM0="Augustus";}
if (subM0== "Sep"){subM0="September";}
if (subM0== "Oct"){subM0="Oktober";}
if (subM0== "Nov"){subM0="November";}
if (subM0== "Dec"){subM0="December";}
lcd.print(sub0);
lcd.printf(" ");
lcd.print(subD0);
lcd.printf(" ");
lcd.print(subM0);
//--------------------------------------------
lcd.setFreeFont(0);
//temp
lcd.setFreeFont(&Dialog_bold_24);
lcd.setCursor(30,340);
lcd.setTextColor(TFT_WHITE);
lcd.print("Temp");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(130,340);
lcd.print(forecast->temp[1]);
lcd.setCursor(30,370);
lcd.setTextColor(TFT_WHITE);
lcd.print("Tmin");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(130,370);
lcd.println(forecast->temp_min[1]);
lcd.setCursor(30,400);
lcd.setTextColor(TFT_WHITE);
lcd.print("Tmax");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(130,400);
lcd.println(forecast->temp_max[1]);
//-------------------------------------------------
//Vocht
lcd.setCursor(30,430);
lcd.setTextColor(TFT_WHITE);
lcd.print("Vocht");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(140,430);
lcd.print(forecast->humidity[1]);
lcd.print(" %");
//case tbv weer iconen
lcd.setTextColor(TFT_CYAN);
lcd.setFont(&Dialog_bold_14);
switch(forecast->id[1]) {//begin case i=0
case 800: drawBmp("/summer.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Zonnig");
break;
case 801: drawBmp("/cloud.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Licht bewolkt 11-25%");
break;
case 802: drawBmp("/cloud.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Licht bewolkt 25-50%");
break;
case 803: drawBmp("/cloudy.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Bewolkt 51-84% ");
break;
case 804: drawBmp("/cloudy.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Zwaar bewolkt 85-100%");
break;
case 200: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Onweer met lichte regen");
break;
case 201: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Onweer met regen");
break;
case 202: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Onweer met zware regen");
break;
case 210: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte onweer");
break;
case 211: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Onweer");
break;
case 212: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Zware onweer");
break;
case 221: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Ruwe onweer");
break;
case 230: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Onweer met lichte motregen");
break;
case 231: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Onweer met motregen");
break;
case 232: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Onweer met zware motregen");
break;
case 300: drawBmp("/rain2.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte motregen");
break;
case 301: drawBmp("/rain2.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Motregen");
break;
case 302: drawBmp("/rain2.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Hevige motregen");
break;
case 310: drawBmp("/rain2.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte motregen/regen");
break;
case 311: drawBmp("/rain2.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Motregen/regen");
break;
case 312: drawBmp("/rain2.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Hevige motregen/regen");
break;
case 313: drawBmp("/rain2.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Regenbui en motregen");
break;
case 314: drawBmp("/rain2.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Zware regenbui en motregen");
break;
case 321: drawBmp("/rain2.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Zware regenbui");
break;
case 500: drawBmp("/rain.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte regen");
break;
case 501: drawBmp("/rain.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte regen");
break;
case 502: drawBmp("/rain.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Hevige regen");
break;
case 503: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Zeer hevige regen");
break;
case 504: drawBmp("/storm.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Extreme regen");
break;
case 511: drawBmp("/rain.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Ijskoude regen");
break;
case 520: drawBmp("/rain.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte douche regen");
break;
case 521: drawBmp("/rain.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Douche regen");
break;
case 522: drawBmp("/rain.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Hevige douche regen");
break;
case 531: drawBmp("/rain.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Zware douche regen");
break;
case 600: drawBmp("/snow.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte sneeuw");
break;
case 601: drawBmp("/snow.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Sneeuw");
break;
case 602: drawBmp("/snow.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Hevige sneeuw");
break;
case 611: drawBmp("/sleet.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Natte sneeuw");
break;
case 612: drawBmp("/sleet.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte natte sneeuw");
break;
case 615: drawBmp("/sleet.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte regen en sneeuw");
break;
case 616: drawBmp("/snow.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Regen en sneeuw");
break;
case 620: drawBmp("/snow.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte sneeuw");
break;
case 621: drawBmp("/snow.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Lichte sneeuw");
break;
case 622: drawBmp("/snow.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Hevige sneeuw");
break;
case 701: drawBmp("/fog.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Mist");
break;
case 711: drawBmp("/fog.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Mist/nevel");
break;
case 721: drawBmp("/fog.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Nevel");
break;
case 731: drawBmp("/fog.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Zand/stofwervelingen");
break;
case 741: drawBmp("/fog.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Sluier mist");
break;
case 751: drawBmp("/fog.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Zand");
break;
case 761: drawBmp("/fog.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Stofwervelingen");
break;
case 762: drawBmp("/fog.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Vulkanisch as");
break;
case 771: drawBmp("/fog.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Rukwinden");
break;
case 781: drawBmp("/fog.bmp",25, 170);
lcd.setCursor(35,310);
lcd.print("Tornado");
break;
default:break;
lcd.setFont(0);
} //eind case i=1
}//einde if i=1
//++++++++++++++++++++++++++++++++++++++++++++++++++
if (forecast->id[9])
{//begin i=9
//----------------
lcd.setTextColor(TFT_YELLOW);
String myString9 = strTime(forecast->dt[9]);
String sub9 = myString9.substring(0, 3);
if (sub9== "Sun"){sub9="Zondag";}
if (sub9== "Mon"){sub9="Maandag";}
if (sub9== "Tue"){sub9="Dinsdag";}
if (sub9== "Wed"){sub9="Woensdag";}
if (sub9== "Thu"){sub9="Donderdag";}
if (sub9== "Fri"){sub9="Vrijdag";}
if (sub9== "Sat"){sub9="Zaterdag";}
lcd.setCursor(295,115);
lcd.setFreeFont(&Dialog_bold_32);
lcd.print(sub9);
//tbv forecast tijd
String myStringT9 = strTime(forecast->dt[9]);
String subT9 = myStringT9.substring(11, 16); //tbv tijd forcast
lcd.setFreeFont(&Dialog_bold_12);
lcd.setCursor(375,155);
lcd.print(subT9);
//------------
//temp
lcd.setFreeFont(&Dialog_bold_24);
lcd.setCursor(300,340);
lcd.setTextColor(TFT_WHITE);
lcd.print("Temp");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(400,340);
lcd.print(forecast->temp[9]);
lcd.setCursor(300,370);
lcd.setTextColor(TFT_WHITE);
lcd.print("Tmin");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(400,370);
lcd.println(forecast->temp_min[9]);
lcd.setCursor(300,400);
lcd.setTextColor(TFT_WHITE);
lcd.print("Tmax");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(400,400);
lcd.println(forecast->temp_max[9]);
//-------------------------------------------------
//Vocht
lcd.setCursor(300,430);
lcd.setTextColor(TFT_WHITE);
lcd.print("Vocht");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(410,430);
lcd.print(forecast->humidity[9]);
lcd.print(" %");
lcd.setTextColor(TFT_CYAN);
lcd.setFont(&Dialog_bold_12);
switch(forecast->id[9]) {//begin case i=9
case 800: drawBmp("/summer.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Zonnig");
break;
case 801: drawBmp("/cloud.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Licht bewolkt 11-25%");
break;
case 802: drawBmp("/cloud.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Licht bewolkt 25-50%");
break;
case 803: drawBmp("/cloudy.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Bewolkt 51-84% ");
break;
case 804: drawBmp("/cloudy.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Zwaar bewolkt 85-100%");
break;
case 200: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Onweer met lichte regen");
break;
case 201: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Onweer met regen");
break;
case 202: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Onweer met zware regen");
break;
case 210: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte onweer");
break;
case 211: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Onweer");
break;
case 212: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Zware onweer");
break;
case 221: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Ruwe onweer");
break;
case 230: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Onweer met lichte motregen");
break;
case 231: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Onweer met motregen");
break;
case 232: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Onweer met zware motregen");
break;
case 300: drawBmp("/rain2.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte motregen");
break;
case 301: drawBmp("/rain2.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Motregen");
break;
case 302: drawBmp("/rain2.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Hevige motregen");
break;
case 310: drawBmp("/rain2.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte motregen/regen");
break;
case 311: drawBmp("/rain2.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Motregen/regen");
break;
case 312: drawBmp("/rain2.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Hevige motregen/regen");
break;
case 313: drawBmp("/rain2.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Regenbui en motregen");
break;
case 314: drawBmp("/rain2.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Zware regenbui en motregen");
break;
case 321: drawBmp("/rain2.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Zware regenbui");
break;
case 500: drawBmp("/rain.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte regen");
break;
case 501: drawBmp("/rain.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte regen");
break;
case 502: drawBmp("/rain.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Hevige regen");
break;
case 503: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Zeer hevige regen");
break;
case 504: drawBmp("/storm.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Extreme regen");
break;
case 511: drawBmp("/rain.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Ijskoude regen");
break;
case 520: drawBmp("/rain.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte douche regen");
break;
case 521: drawBmp("/rain.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Douche regen");
break;
case 522: drawBmp("/rain.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Hevige douche regen");
break;
case 531: drawBmp("/rain.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Zware douche regen");
break;
case 600: drawBmp("/snow.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte sneeuw");
break;
case 601: drawBmp("/snow.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Sneeuw");
break;
case 602: drawBmp("/snow.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Hevige sneeuw");
break;
case 611: drawBmp("/sleet.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Natte sneeuw");
break;
case 612: drawBmp("/sleet.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte natte sneeuw");
break;
case 615: drawBmp("/sleet.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte regen en sneeuw");
break;
case 616: drawBmp("/snow.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Regen en sneeuw");
break;
case 620: drawBmp("/snow.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte sneeuw");
break;
case 621: drawBmp("/snow.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Lichte sneeuw");
break;
case 622: drawBmp("/snow.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Hevige sneeuw");
break;
case 701: drawBmp("/fog.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Mist");
break;
case 711: drawBmp("/fog.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Mist/nevel");
break;
case 721: drawBmp("/fog.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Nevel");
break;
case 731: drawBmp("/fog.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Zand/stofwervelingen");
break;
case 741: drawBmp("/fog.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Sluier mist");
break;
case 751: drawBmp("/fog.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Zand");
break;
case 761: drawBmp("/fog.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Stofwervelingen");
break;
case 762: drawBmp("/fog.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Vulkanisch as");
break;
case 771: drawBmp("/fog.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Rukwinden");
break;
case 781: drawBmp("/fog.bmp",320, 170);
lcd.setCursor(305,310);
lcd.print("Tornado");
break;
default:break;
lcd.setFont(0);
} //eind case i=9
}//einde if i=9
//+++++++++++++++++++++++++++++++++++
if (forecast->id[17])
{//begin i=17
//----------------
lcd.setTextColor(TFT_YELLOW);
String myString17 = strTime(forecast->dt[17]);
String sub17 = myString17.substring(0, 3);
if (sub17== "Sun"){sub17="Zondag";}
if (sub17== "Mon"){sub17="Maandag";}
if (sub17== "Tue"){sub17="Dinsdag";}
if (sub17== "Wed"){sub17="Woensdag";}
if (sub17== "Thu"){sub17="Donderdag";}
if (sub17== "Fri"){sub17="Vrijdag";}
if (sub17== "Sat"){sub17="Zaterdag";}
lcd.setCursor(560,115);
lcd.setFreeFont(&Dialog_bold_32);
lcd.print(sub17);
//tbv forecast tijd
String myStringT17 = strTime(forecast->dt[17]);
String subT17 = myStringT17.substring(11, 16); //tbv tijd forcast
lcd.setFreeFont(&Dialog_bold_12);
lcd.setCursor(650,155);
lcd.print(subT17);
//------------
//temp
lcd.setFreeFont(&Dialog_bold_24);
lcd.setCursor(575,340);
lcd.setTextColor(TFT_WHITE);
lcd.print("Temp");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(675,340);
lcd.print(forecast->temp[17]);
lcd.setCursor(575,370);
lcd.setTextColor(TFT_WHITE);
lcd.print("Tmin");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(675,370);
lcd.println(forecast->temp_min[17]);
lcd.setCursor(575,400);
lcd.setTextColor(TFT_WHITE);
lcd.print("Tmax");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(675,400);
lcd.println(forecast->temp_max[17]);
//-------------------------------------------------
//Vocht
lcd.setCursor(575,430);
lcd.setTextColor(TFT_WHITE);
lcd.print("Vocht");
lcd.setTextColor(TFT_MAGENTA);
lcd.setCursor(685,430);
lcd.print(forecast->humidity[17]);
lcd.print(" %");
lcd.setTextColor(TFT_CYAN);
lcd.setFont(&Dialog_bold_12);
switch(forecast->id[17]) {//begin case i=17
case 800: drawBmp("/summer.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Zonnig");
break;
case 801: drawBmp("/cloud.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Licht bewolkt 11-25%");
break;
case 802: drawBmp("/cloud.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Licht bewolkt 25-50%");
break;
case 803: drawBmp("/cloudy.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Bewolkt 51-84% ");
break;
case 804: drawBmp("/cloudy.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Zwaar bewolkt 85-100%");
break;
case 200: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Onweer met lichte regen");
break;
case 201: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Onweer met regen");
break;
case 202: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Onweer met zware regen");
break;
case 210: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte onweer");
break;
case 211: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Onweer");
break;
case 212: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Zware onweer");
break;
case 221: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Ruwe onweer");
break;
case 230: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Onweer met lichte motregen");
break;
case 231: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Onweer met motregen");
break;
case 232: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Onweer met zware motregen");
break;
case 300: drawBmp("/rain2.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte motregen");
break;
case 301: drawBmp("/rain2.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Motregen");
break;
case 302: drawBmp("/rain2.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Hevige motregen");
break;
case 310: drawBmp("/rain2.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte motregen/regen");
break;
case 311: drawBmp("/rain2.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Motregen/regen");
break;
case 312: drawBmp("/rain2.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Hevige motregen/regen");
break;
case 313: drawBmp("/rain2.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Regenbui en motregen");
break;
case 314: drawBmp("/rain2.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Zware regenbui en motregen");
break;
case 321: drawBmp("/rain2.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Zware regenbui");
break;
case 500: drawBmp("/rain.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte regen");
break;
case 501: drawBmp("/rain.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte regen");
break;
case 502: drawBmp("/rain.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Hevige regen");
break;
case 503: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Zeer hevige regen");
break;
case 504: drawBmp("/storm.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Extreme regen");
break;
case 511: drawBmp("/rain.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Ijskoude regen");
break;
case 520: drawBmp("/rain.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte douche regen");
break;
case 521: drawBmp("/rain.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Douche regen");
break;
case 522: drawBmp("/rain.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Hevige douche regen");
break;
case 531: drawBmp("/rain.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Zware douche regen");
break;
case 600: drawBmp("/snow.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte sneeuw");
break;
case 601: drawBmp("/snow.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Sneeuw");
break;
case 602: drawBmp("/snow.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Hevige sneeuw");
break;
case 611: drawBmp("/sleet.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Natte sneeuw");
break;
case 612: drawBmp("/sleet.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte natte sneeuw");
break;
case 615: drawBmp("/sleet.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte regen en sneeuw");
break;
case 616: drawBmp("/snow.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Regen en sneeuw");
break;
case 620: drawBmp("/snow.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte sneeuw");
break;
case 621: drawBmp("/snow.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Lichte sneeuw");
break;
case 622: drawBmp("/snow.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Hevige sneeuw");
break;
case 701: drawBmp("/fog.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Mist");
break;
case 711: drawBmp("/fog.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Mist/nevel");
break;
case 721: drawBmp("/fog.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Nevel");
break;
case 731: drawBmp("/fog.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Zand/stofwervelingen");
break;
case 741: drawBmp("/fog.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Sluier mist");
break;
case 751: drawBmp("/fog.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Zand");
break;
case 761: drawBmp("/fog.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Stofwervelingen");
break;
case 762: drawBmp("/fog.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Vulkanisch as");
break;
case 771: drawBmp("/fog.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Rukwinden");
break;
case 781: drawBmp("/fog.bmp",595, 170);
lcd.setCursor(575,310);
lcd.print("Tornado");
break;
default:break;
lcd.setFont(0);
} //eind case i=17
}//einde if i=17
//-----------------------------------------------------------------
}
}
// Delete to free up space and prevent fragmentation as strings change in length
delete forecast;
}//einde forecast
/***************************************************************************************
** Convert unix time to a time string
***************************************************************************************/
String strTime(time_t unixTime)
{
unixTime += TIME_OFFSET;
return ctime(&unixTime);
}
//--------------------------------------------------------------------------
//##################################################################################
//-----------------------------------------------
//declare draBmp
//------------------------------------------------------------------------
void drawBmp(const char *filename, int16_t x, int16_t y) {
if ((x >= lcd.width()) || (y >= lcd.height())) return;
fs::File bmpFS;
// Open requested file on SD card
bmpFS = SPIFFS.open(filename, "r");
if (!bmpFS)
{
Serial.print("File not found");
return;
}
uint32_t seekOffset;
uint16_t w, h, row, col;
uint8_t r, g, b;
uint32_t startTime = millis();
if (read16(bmpFS) == 0x4D42)
{
read32(bmpFS);
read32(bmpFS);
seekOffset = read32(bmpFS);
read32(bmpFS);
w = read32(bmpFS);
h = read32(bmpFS);
if ((read16(bmpFS) == 1) && (read16(bmpFS) == 24) && (read32(bmpFS) == 0))
{
y += h - 1;
bool oldSwapBytes = lcd.getSwapBytes();
lcd.setSwapBytes(true);
bmpFS.seek(seekOffset);
uint16_t padding = (4 - ((w * 3) & 3)) & 3;
uint8_t lineBuffer[w * 3 + padding];
for (row = 0; row < h; row++) {
bmpFS.read(lineBuffer, sizeof(lineBuffer));
uint8_t* bptr = lineBuffer;
uint16_t* tptr = (uint16_t*)lineBuffer;
// Convert 24 to 16 bit colours
for (uint16_t col = 0; col < w; col++)
{
b = *bptr++;
g = *bptr++;
r = *bptr++;
*tptr++ = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
}
// Push the pixel row to screen, pushImage will crop the line if needed
// y is decremented as the BMP image is drawn bottom up
lcd.pushImage(x, y--, w, 1, (uint16_t*)lineBuffer);
}
lcd.setSwapBytes(oldSwapBytes);
// Serial.print("Loaded in "); Serial.print(millis() - startTime);
// Serial.println(" ms");
}
else Serial.println("BMP format not recognized.");
}
bmpFS.close();
}
// These read 16- and 32-bit types from the SD card file.
// BMP data is stored little-endian, Arduino is little-endian too.
// May need to reverse subscript order if porting elsewhere.
uint16_t read16(fs::File &f) {
uint16_t result;
((uint8_t *)&result)[0] = f.read(); // LSB
((uint8_t *)&result)[1] = f.read(); // MSB
return result;
}
uint32_t read32(fs::File &f) {
uint32_t result;
((uint8_t *)&result)[0] = f.read(); // LSB
((uint8_t *)&result)[1] = f.read();
((uint8_t *)&result)[2] = f.read();
((uint8_t *)&result)[3] = f.read(); // MSB
return result;
}
//-------------------------------------------------------
//==============tbv iconen
// -------------------------------------------------------------------------
// List SPIFFS files in a neat format for ESP8266 or ESP32
// -------------------------------------------------------------------------
void listFiles(void) {
Serial.println();
Serial.println("SPIFFS files found:");
#ifdef ESP32
listDir(SPIFFS, "/", true);
#else
fs::Dir dir = SPIFFS.openDir("/"); // Root directory
String line = "=====================================";
Serial.println(line);
Serial.println(" File name Size");
Serial.println(line);
while (dir.next()) {
String fileName = dir.fileName();
Serial.print(fileName);
// File path can be 31 characters maximum in SPIFFS
int spaces = 33 - fileName.length(); // Tabulate nicely
if (spaces < 1) spaces = 1;
while (spaces--) Serial.print(" ");
fs::File f = dir.openFile("r");
Serial.print(f.size()); Serial.println(" bytes");
yield();
}
Serial.println(line);
#endif
Serial.println();
delay(10000);
}
#ifdef ESP32
void listDir(fs::FS &fs, const char * dirname, uint8_t levels) {
Serial.printf("Listing directory: %s\n", dirname);
fs::File root = fs.open(dirname);
if (!root) {
Serial.println("Failed to open directory");
return;
}
if (!root.isDirectory()) {
Serial.println("Not a directory");
return;
}
fs::File file = root.openNextFile();
while (file) {
if (file.isDirectory()) {
Serial.print("DIR : ");
String fileName = file.name();
Serial.print(fileName);
if (levels) {
listDir(fs, file.name(), levels - 1);
}
} else {
String fileName = file.name();
Serial.print(" " + fileName);
// File path can be 31 characters maximum in SPIFFS
int spaces = 33 - fileName.length(); // Tabulate nicely
if (spaces < 1) spaces = 1;
while (spaces--) Serial.print(" ");
String fileSize = (String) file.size();
spaces = 8 - fileSize.length(); // Tabulate nicely
if (spaces < 1) spaces = 1;
while (spaces--) Serial.print(" ");
Serial.println(fileSize + " bytes");
}
file = root.openNextFile();
}
}
#endif
// Einde List SPIFFS
What is the problem and how can I counteract it?
