/************************************************************************************************* PROGRAMMINFO ************************************************************************************************** Funktion: ESP32 Wetterdaten OLED-Display 1.3" ************************************************************************************************** JSON-Meldung: {"coord":{"lon":11.7527,"lat":47.7097}, "weather": [{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}], "base":"stations", "main": {"temp":288.35, "feels_like":288.54, "temp_min":285.19, "temp_max":291.7, "pressure":1016, "humidity":100, "sea_level":1016, "grnd_level":932}, "visibility":273, "wind":{"speed":1.75,"deg":30,"gust":3.01}, "clouds":{"all":100}, "dt":1625628595, "sys":{"type":2,"id":2001431,"country":"DE","sunrise":1625628176,"sunset":1625685150}, "timezone":7200,"id":2823679,"name":"Tegernsee","cod":200 } ************************************************************************************************** Version: 07.07.2021 ************************************************************************************************** Board: ESP32vn IoT UNO V1.0.4 ************************************************************************************************** C++ Arduino IDE V1.8.13 ************************************************************************************************** Einstellungen: https://dl.espressif.com/dl/package_esp32_index.json http://dan.drown.org/stm32duino/package_STM32duino_index.json https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json **************************************************************************************************/ #include #include #include const char* ssid = "xxx"; const char* password = "xxx"; String openWeatherMapApiKey = "Hier deine API eintragen"; String city = "Tegernsee"; String countryCode = "DE"; unsigned long lastTime = 0; // Timer set to 10 Minuten (600000) //unsigned long timerDelay = 600000; // Set timer to 10 Sekunden (10000) unsigned long timerDelay = 10000; String jsonBuffer; //----------------------------------------------- #include #include #ifdef U8X8_HAVE_HW_SPI #include #endif #ifdef U8X8_HAVE_HW_I2C #include #endif U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); unsigned long delayTime; //----------------------------------------------- int ktemp; int mintemp; int maxtemp; int sicht; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); Serial.println("Verbinde"); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Verbunden mit IP Addresse: "); Serial.println(WiFi.localIP()); Serial.println("Aktualisierung ist auf 10 Sekunden eingestellt."); //----------------------------------------------- u8g2.begin(); //----------------------------------------------- } void loop() { if ((millis() - lastTime) > timerDelay) { // Check WiFi Status if(WiFi.status()== WL_CONNECTED){ String serverPath = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "," + countryCode + "&APPID=" + openWeatherMapApiKey; jsonBuffer = httpGETRequest(serverPath.c_str()); Serial.println(jsonBuffer); JSONVar myObject = JSON.parse(jsonBuffer); if (JSON.typeof(myObject) == "undefined") { Serial.println("Eingabe fehlgeschlagen!"); return; } ktemp=(myObject["main"]["temp"]); mintemp=(myObject["main"]["temp_min"]); maxtemp=(myObject["main"]["temp_max"]); // Serial.print("JSON object = "); Serial.println("Meine Wetterdaten:"); Serial.print("Ort: "); Serial.println(myObject["name"]); Serial.print("Aktuelle Temperatur: "); Serial.print(myObject["main"]["temp"]); Serial.println("K "); Serial.print("Aktuelle Temperatur: "); Serial.print(ktemp-273.15); Serial.println("°C "); Serial.print("Tages-Min. Temperatur: "); Serial.print(mintemp); Serial.println("K "); Serial.print("Tages-Min. Temperatur: "); Serial.print(mintemp-273.15); Serial.println("°C "); Serial.print("Tages-Max. Temperatur: "); Serial.print(maxtemp); Serial.println("K "); Serial.print("Tages-Max. Temperatur: "); Serial.print(maxtemp-273.15); Serial.println("°C "); Serial.print("Wolken: "); Serial.print(myObject["clouds"]["all"]); Serial.println("% "); Serial.print("Luftdruck: "); Serial.print(myObject["main"]["pressure"]); Serial.println("hPa"); Serial.print("Luftfeuchte: "); Serial.print(myObject["main"]["humidity"]); Serial.println("% "); Serial.print("Wind Geschwindigkeit: "); Serial.print(myObject["wind"]["speed"]); Serial.println("m/s "); sicht=(myObject["visibility"]); sicht=sicht/100; Serial.print("Sicht: "); Serial.print(sicht); Serial.println("km "); //--------------------------------------------------------- Serial.println("================================="); u8g2.setFont(u8g2_font_courR10_tf); u8g2.firstPage(); do { u8g2.setCursor(12, 10); u8g2.print("Wetterdaten"); u8g2.setCursor(18, 22); u8g2.print("Tegernsee"); u8g2.setCursor(2, 35); u8g2.print("Temp: "); u8g2.setCursor(51, 35); u8g2.print(maxtemp-273.15); u8g2.print("\xB0""C"); u8g2.setCursor(2, 48); u8g2.print("Wind:"); u8g2.setCursor(51, 48); u8g2.print(myObject["wind"]["speed"]); u8g2.print("m/s"); /* u8g2.setCursor(2, 48); u8g2.print("LuFe:"); u8g2.setCursor(51, 48); u8g2.print(myObject["main"]["humidity"]); u8g2.print("%"); */ u8g2.setCursor(2, 63); u8g2.print("LuDr:"); u8g2.setCursor(51, 63); u8g2.print(myObject["main"]["pressure"]); u8g2.print("hPa"); } while ( u8g2.nextPage() ); delay(delayTime); //--------------------------------------------------------- } else { Serial.println("WiFi Disconnected"); } lastTime = millis(); } } String httpGETRequest(const char* serverName) { WiFiClient client; HTTPClient http; // Domain-Name http.begin(client, serverName); // HTTP POST request 200=OK int httpResponseCode = http.GET(); String payload = "{}"; if (httpResponseCode>0) { Serial.print("HTTP-Antwort Code (200=OK): "); Serial.println(httpResponseCode); Serial.println("Server-Meldung: "); payload = http.getString(); } else { Serial.print("Error code: "); Serial.println(httpResponseCode); } http.end(); return payload; }