#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
String URL = "http://api.openweathermap.org/data/2.5/weather?";
String ApiKey = "5b91cf9a6a3c9126c4261353b39b23c4";
String lat = "30.425069452260608";
String lon = "-9.59388155788398";
void setup() {
Serial.begin(115200);
LCD.init();
LCD.backlight();
LCD.clear();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(URL + "lat=" + lat + "&lon=" + lon + "&units=metric&appid=" + ApiKey);
int httpCode = http.GET();
if (httpCode > 0) {
String JSON_Data = http.getString();
Serial.println(JSON_Data);
DynamicJsonDocument doc(2048);
deserializeJson(doc, JSON_Data);
JsonObject obj = doc.as<JsonObject>();
const char* description = obj["weather"][0]["description"].as<const char*>();
const float temp = obj["main"]["temp"].as<float>();
const float humidity = obj["main"]["humidity"].as<float>();
LCD.clear();
LCD.print(description);
LCD.setCursor(0, 1);
LCD.print(temp);
LCD.print(" C, ");
LCD.print(humidity);
LCD.print(" %");
} else {
Serial.println("Error!");
LCD.clear();
LCD.print("Can't Get DATA!");
}
http.end();
}
delay(30000);
}