#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
// Replace with your network credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Replace with your API key and city name
const char* apiKey = "f35a205df5b5b99f9ca991ab6b890e3b";
const char* city = "Karachi";
// Set timezone offset in seconds (5 hours)
const long timezoneOffset = 5 * 60 * 60;
void setup() {
Serial.begin(12500);
// Connect to Wi-Fi network
WiFi.begin(ssid, password);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println();
Serial.print("Connected to Wi-Fi, IP address: ");
Serial.println(WiFi.localIP());
// Make HTTP request to OpenWeatherMap API
HTTPClient http;
String url = "http://api.openweathermap.org/data/2.5/weather?q=" + String(city) + "&appid=" + String(apiKey);
Serial.print("Making API request to: ");
Serial.println(url);
http.begin(url);
int httpResponseCode = http.GET();
// Parse JSON response from OpenWeatherMap API
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, http.getString());
if (error) {
Serial.print("JSON parsing failed: ");
Serial.println(error.f_str());
return;
}
// Extract sunrise time from JSON response
time_t sunriseUnix = doc["sys"]["sunrise"];
Serial.print("Sunrise time (Unix timestamp): ");
Serial.println(sunriseUnix);
time_t sunsetUnix = doc["sys"]["sunset"];
Serial.print("Sunset time (Unix timestamp): ");
Serial.println(sunsetUnix);
// Convert Unix timestamp to local time with an additional 5 hours
struct tm *localTimeR = localtime(&sunriseUnix);
localTimeR->tm_hour += 5;
mktime(localTimeR);
// Format local time as AM/PM string
char timeString[12];
strftime(timeString, sizeof(timeString), "%I:%M %p", localTimeR);
// Display sunrise time in local city time with an additional 5 hours
Serial.print("Sunrise time (local city time + 5 hours): ");
Serial.println(timeString);
// Convert Unix timestamp to local time with an additional 5 hours
struct tm *localTimeT = localtime(&sunsetUnix);
localTimeT->tm_hour += 5;
mktime(localTimeT);
// Format local time as AM/PM string
char timeTString[12];
strftime(timeTString, sizeof(timeTString), "%I:%M %p", localTimeT);
// Display sunrise time in local city time with an additional 5 hours
Serial.print("Sunset time (local city time + 5 hours): ");
Serial.println(timeTString);
}
void loop() {
// do nothing
}