#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
String apiKey = "c4d4645367096c18822e3145a3a6e5aa";
String city = "Bangalore";
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "http://api.openweathermap.org/data/2.5/weather?q="
+ city + "&appid=" + apiKey + "&units=metric";
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
Serial.println(payload);
StaticJsonDocument<2048> doc;
deserializeJson(doc, payload);
// Extract real values
float temp = doc["main"]["temp"];
int humidity = doc["main"]["humidity"];
String condition = doc["weather"][0]["description"];
// Serial Output
Serial.println("Temp: " + String(temp));
Serial.println("Humidity: " + String(humidity));
Serial.println("Condition: " + condition);
// LCD Output
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(temp);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Hum:");
lcd.print(humidity);
lcd.print("%");
} else {
Serial.println("HTTP Error");
}
http.end();
}
delay(10000); // refresh every 10 sec
}