#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Variables para Clima
String jsonBuffer; // guarda el resultado del servidor.
String descripcion_weather="";
String temp="";
String sen_ter="";
String pres="";
String hum="";
String vel_vien="";
String nub="";
String vel_rafa="";
String mensaje_error=""; //Almacena mensaje de error a mostrar
double var_dec =0; // varialble comodin tipo doble
int var_int=0;// variable comodin entera.
void setup() {
Serial.begin(115200);
// inicia wifi
WiFi.begin(ssid, password);
Serial.println("Conectando al Wifi");
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Conectado, IP: ");
Serial.println(WiFi.localIP());
Serial.println();
Serial.println();
}
/////// Obtención y Gestión del clima.
void Consulta_clima(){ // consulta y proces el clima
if(WiFi.status()!= WL_CONNECTED){ // ESta conectada via wifi?
mensaje_error="Wifi Desconectada"; // mostrar mensaje de error de wifi desconectada
Serial.println(mensaje_error);
}
else { // en caso de estar conectada via wifi
WiFiClient client;
HTTPClient http;
http.begin(client, "http://api.openweathermap.org/data/2.5/weather?q=Maracaibo,ve&units=metric&lang=es&APPID=e2029e14dfbb872bf7a67b3b8b03a3c5"); // extrae información del servidor
int Codigo_respuesta_http = http.GET(); // registra numero de respuesta del servidor
jsonBuffer= "{}"; // elimina el contenido del bufer
if (Codigo_respuesta_http<=0) { // en caso de que hayan datos para el clima
Serial.print("Código de Error: ");// en caso de habr un error...
Serial.println(Codigo_respuesta_http);
mensaje_error="Error Consultando el Clima";
}
else { // en caso de no haber un error en la respuesta del servidor.
Serial.print("Código respuesta HTTP: ");
Serial.println(Codigo_respuesta_http);
jsonBuffer = http.getString();
// Prepar datos para ser presentados.
JSONVar myObject = JSON.parse(jsonBuffer);
if (JSON.typeof(myObject) == "undefined") {
mensaje_error="Error Consultando el Clima";
Serial.println(mensaje_error);
return;
}
else {
temp="Temp: ";
var_dec=myObject["main"]["temp"];
temp+=String(var_dec)+"$ "; // Almacena temperatura
sen_ter="Sen Term: ";
var_dec=myObject["main"]["feels_like"];
sen_ter+=String(var_dec)+"$ "; // Almacena Sensarión termica
pres="Pres At: ";
var_dec=myObject["main"]["pressure"];
pres+=String(var_dec)+"hPa "; // Almacena Presion
hum="Hum Rel: ";
var_dec=myObject["main"]["humidity"];
hum+=String(var_dec)+"% "; // Almacena humedad.
vel_vien="Vel Vien: ";
var_dec=myObject["wind"]["speed"];
vel_vien+=String(var_dec)+"m/s "; // Velocidad del viento
vel_rafa="Rafa Vien: ";
var_dec=myObject["wind"]["gust"];
vel_rafa+=String(var_dec)+"m/s "; // Rafagas de Viento
nub="Nubo: ";
var_dec=myObject["clouds"]["all"];
nub+=String(var_dec)+"% "; // Porcentaje de nubosidad.
// Muestra datos recolectados
descripcion_weather= "Clima: ";
int numero_Descripcion = myObject["weather"][0]["id"];
switch(numero_Descripcion) {
case 200: descripcion_weather+= "Tormenta con Lluvia Ligera"; break;
case 201: descripcion_weather+= "Tormenta con Lluvia"; break;
case 202: descripcion_weather+= "Tormenta con Fuertes Lluvias"; break;
case 210: descripcion_weather+= "Tormenta Ligera"; break;
case 211: descripcion_weather+= "Tormenta"; break;
case 212: descripcion_weather+= "Fuerte Tormenta"; break;
case 221: descripcion_weather+= "Tormenta Irregular"; break;
case 230: descripcion_weather+= "Tormenta con Llovizna Ligera"; break;
case 231: descripcion_weather+= "Tormenta con Llovizna"; break;
case 232: descripcion_weather+= "Tormenta con Llovizna Intensa"; break;
case 300: descripcion_weather+= "Llovizna de Intensidad Ligera"; break;
case 301: descripcion_weather+= "Llovizna"; break;
case 302: descripcion_weather+= "Llovizna Intensa"; break;
case 310: descripcion_weather+= "Llovizna de Intensidad Ligera"; break;
case 311: descripcion_weather+= "Llovizna"; break;
case 312: descripcion_weather+= "Llovizna de Gran Intensidad"; break;
case 313: descripcion_weather+= "Lluvia y Llovizna"; break;
case 314: descripcion_weather+= "Fuertes Lluvias y Lloviznas"; break;
case 321: descripcion_weather+= "Llovizna de Ducha"; break;
case 500: descripcion_weather+= "Lluvia Ligera"; break;
case 501: descripcion_weather+= "Lluvia Moderada"; break;
case 502: descripcion_weather+= "Lluvia de Gran Intensidad"; break;
case 503: descripcion_weather+= "Lluvia Muy Fuerte"; break;
case 504: descripcion_weather+= "Lluvia Extrema"; break;
case 511: descripcion_weather+= "Lluvia Helada"; break;
case 520: descripcion_weather+= "Lluvia de Intensidad de Luz"; break;
case 521: descripcion_weather+= "Ducha Lluvia"; break;
case 522: descripcion_weather+= "Lluvia Intensa y Intensa"; break;
case 531: descripcion_weather+= "Lluvia Irregular"; break;
case 600: descripcion_weather+= "Nieve Ligera"; break;
case 601: descripcion_weather+= "Nieve"; break;
case 602: descripcion_weather+= "Fuertes Nevadas"; break;
case 611: descripcion_weather+= "Aguanieve"; break;
case 612: descripcion_weather+= "Aguanieve Ligero"; break;
case 613: descripcion_weather+= "Aguanieve en la Ducha"; break;
case 615: descripcion_weather+= "Lluvia Ligera y Nieve"; break;
case 616: descripcion_weather+= "Lluvia y Nieve"; break;
case 620: descripcion_weather+= "Lluvia Ligera Nieve"; break;
case 621: descripcion_weather+= "Ducha de Nieve"; break;
case 622: descripcion_weather+= "Fuertes Lluvias de Nieve"; break;
case 701: descripcion_weather+= "Neblina"; break;
case 711: descripcion_weather+= "Fumar"; break;
case 721: descripcion_weather+= "Bruma"; break;
case 731: descripcion_weather+= "Remolinos de Arena/Polvo"; break;
case 741: descripcion_weather+= "Niebla"; break;
case 751: descripcion_weather+= "Arena"; break;
case 761: descripcion_weather+= "Polvo"; break;
case 762: descripcion_weather+= "Ceniza Volcanica"; break;
case 771: descripcion_weather+= "Chubascos"; break;
case 781: descripcion_weather+= "Tornado"; break;
case 800: descripcion_weather+= "Cielo Despejado"; break;
case 801: descripcion_weather+= "Pocas Nubes: 11-25%"; break;
case 802: descripcion_weather+= "Nubes Dispersas: 25-50%"; break;
case 803: descripcion_weather+= "Nubes Rotas: 51-84%"; break;
case 804: descripcion_weather+= "Nubes Cubiertas: 85-100%"; break;
}
}
}
http.end();
}
}
void loop() {
Consulta_clima();
Serial.println();
Serial.println(temp);
Serial.println(sen_ter);
Serial.println(pres);
Serial.println(hum);
Serial.println(vel_vien);
Serial.println(vel_rafa);
Serial.println(nub);
Serial.println(descripcion_weather);
Serial.println();
String lll=temp+sen_ter;
lll+=pres;
lll+=hum;
lll+=vel_vien;
lll+=vel_rafa;
lll+=nub;
lll+=descripcion_weather;
Serial.println(lll);
delay (2000);
}