#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
HTTPClient http;
WiFiClient wifiClient;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.print("connecting to WIFI");
WiFi.begin("Wokwi-GUEST", "", 6);
while(WiFi.status() != WL_CONNECTED){
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("¡Bienvenido!");
display.display();
}
void loop() {
if ((WiFi.status() == WL_CONNECTED)) {
HTTPClient http;
displayReset();
display.println("Obteniendo datos...");
display.display();
Serial.print("Obteniendo datos...");
http.begin("https://api.openweathermap.org/data/2.5/weather?id=4005539&appid=fa0440d454271f49d241eff19f0f2515");
int httpCode = http.GET();
if (httpCode > 0) {
display.println("");
display.println("Datos obtenidos...");
Serial.println("Datos obtenidos...\n");
String payload = http.getString();
// Parse JSON
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
// Extracting data
const char* city = doc["name"];
double temperature = doc["main"]["temp"];
double lon = doc["coord"]["lon"];
double lat = doc["coord"]["lat"];
long timestamp = doc["dt"];
char dateString[20];
char timeString[20];
time_t rawtime = timestamp;
struct tm* timeinfo = localtime(&rawtime);
strftime(dateString, sizeof(dateString), "%Y-%m-%d", timeinfo);
strftime(timeString, sizeof(timeString), "%H:%M:%S", timeinfo);
double temperatureC = temperature - 273.15;
displayReset();
display.println("Ciudad: " + String(city));
display.println("Fecha: " + String(dateString));
display.println("Hora: " + String(timeString));
display.println("Temp: " + String(temperatureC, 2) + " C");
display.println("Lat: " + String(lat, 4));
display.println("Long: " + String(lon, 4));
display.display();
Serial.println("Ciudad: " + String(city));
Serial.println("Fecha: " + String(dateString));
Serial.println("Hora: " + String(timeString));
Serial.println("Temp: " + String(temperatureC, 2) + " C");
Serial.println("Lat: " + String(lat, 4));
Serial.println("Long: " + String(lon, 4));
} else {
Serial.println("Error al obtener los datos.");
}
http.end();
}
delay(200000);
}
void displayReset()
{
display.clearDisplay();
display.setCursor(0, 0);
}