Something like this (untested)
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>
WiFiMulti WiFiMulti;
#include <ArduinoJson.h>
const int ledPin = 22; // the number of the LED pin
bool shouldBlink;
unsigned long previousMillis = 0; // will store last time LED was updated
const unsigned long WaitTime = 10000;
// set Wi-Fi SSID and password
const char *ssid = "xxxxxx";
const char *password = "xxxxxx";
// set location and API key
String Location = "Berlin";
String API_Key = "c66687d91d685f5ecdda000xxxxxx";
void setup()
{
Serial.begin(115200);
delay(200);
pinMode(ledPin, OUTPUT);
WiFiMulti.addAP(ssid, password);
Serial.print("Connecting.");
}
void loop()
{
unsigned long currentMillis = millis();
if ((currentMillis - previousMillis) >= WaitTime) { // wait for WiFi connection
fetchInfo();
previousMillis = currentMillis;
}
if ( shouldBlink ) {
blinkLED();
}
else {
digitalWrite(ledPin, HIGH); // off
}
}
void blinkLED() {
const unsigned long OnTime = 250; // milliseconds of on-time
const unsigned long OffTime = 750; // milliseconds of off-time
static int ledState = HIGH;
static unsigned long duration = OnTime;
static unsigned long lastTime;
if ( millis() - lastTime < duration ) {
return;
}
lastTime = millis();
if ( ledState == LOW ) {
ledState = HIGH; // Turn it off
duration = OffTime;
}
else {
ledState = LOW; // turn it on
duration = OnTime;
}
digitalWrite(ledPin, ledState); // Update the actual LED
}
void fetchInfo() {
if ((WiFiMulti.run() != WL_CONNECTED)) {
Serial.println(F("Not Connected"));
return;
}
WiFiClient client;
HTTPClient http;
String payload;
Serial.print("[HTTP] begin...\n");
if (!http.begin(client, "http://api.openweathermap.org/data/2.5/weather?q=" + Location + "&APPID=" + API_Key)) {
Serial.println("[HTTP] .begin() failed");
return;
}
Serial.print("[HTTP] GET...\n");
int httpCode = http.GET();
// httpCode will be negative on error
if (httpCode < 0) {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
return;
}
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
payload = http.getString();
Serial.println(payload);
}
/*
{"coord":{"lon":77.75,"lat":20.9333},
"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],
"base":"stations","main":{"temp":301.45,"feels_like":303.3,"temp_min":301.45,
"temp_max":301.45,"pressure":1004,"humidity":62,"sea_level":1004,"grnd_level":966},
"visibility":10000,"wind":{"speed":3.14,"deg":293,"gust":7.39},"clouds":{"all":94},
"dt":1628958953,"sys":{"country":"IN","sunrise":1628900858,"sunset":1628947200},
"timezone":19800,"id":1278718,"name":"Amrāvati","cod":200}
*/
StaticJsonDocument<1024> doc;
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
JsonObject main = doc["main"];
float main_temp = main["temp"]; // 301.45
float main_pressure = main["pressure"]; // 1004
int main_humidity = main["humidity"]; // 62
JsonObject wind = doc["wind"];
float wind_speed = wind["speed"]; // 3.14
int wind_deg = wind["deg"]; // 293
// print data
Serial.printf("Temperature = %.2f°C\r\n", main_temp);
Serial.printf("Humidity = %d %%\r\n", main_humidity);
Serial.printf("Pressure = %.3f bar\r\n", main_pressure);
Serial.printf("Wind speed = %.1f m/s\r\n", wind_speed);
Serial.printf("Wind degree = %d°\r\n\r\n", wind_deg);
if ( main_temp >= 200.0 ) {
shouldBlink = true;
}
else {
shouldBlink = false;
}
http.end(); //Close connection
}