#include <Arduino.h>
#include <WiFi.h>
//#include <Firebase_ESP_Client.h>
//#include <HTTPClient.h>
#include <ArduinoJson.h>
#include "token.h"
// Define Firebase objects
//FirebaseData fbdo;
//FirebaseAuth auth;
//FirebaseConfig config;
String sector2;
// String URL = "http://api.openweathermap.org/data/2.5/weather?&units=metric&";
// String ApiKey = "be39e66936f97a3c638ebd63508f47ca";
// String lon = "-86.034024";
// String lat = "11.392695";
void initWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
IPAddress staticIP(192, 168, 0, 20);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(8, 8, 8, 8);
WiFi.config(staticIP, gateway, subnet, dns);
Serial.println("IP Address configured: " + WiFi.localIP().toString());
Serial.println();
}
void setup(){
Serial.begin(115200);
initWiFi();
sector2 = "/API-WEATHER";
}
void loop(){
// Weather();
delay(1000);
}
/*
void firebaseconfig(){
config.api_key = API_KEY;
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
config.database_url = DATABASE_URL;
Firebase.reconnectWiFi(true);
fbdo.setResponseSize(4096);
config.token_status_callback = tokenStatusCallback;
config.max_token_generation_retry = 5;
Firebase.begin(&config, &auth);
Serial.println("Getting User UID");
while ((auth.token.uid) == "") {
Serial.print('.');
delay(1000);
}
uid = auth.token.uid.c_str();
Serial.print("User UID: ");
Serial.println(uid);
}
void sendFloat(String path, float value){
if (Firebase.RTDB.setFloat(&fbdo, path.c_str(), value)){
Serial.print("Writing value: ");
Serial.println("PASSED");
}
else {
Serial.println("FAILED");
}
}
void Weather (){
HTTPClient http;
http.begin(URL + "lat=" + lat + "&lon=" + lon + "&appid=" + ApiKey);
int httpCode = http.GET();
if (httpCode > 0) {
String JSON_Data = http.getString();
DynamicJsonDocument doc(2048);
deserializeJson(doc, JSON_Data);
JsonObject obj = doc.as<JsonObject>();
const float temp = obj["main"]["temp"].as<float>();
const float press = obj["main"]["pressure"].as<float>();
const float speed = obj["wind"]["speed"].as<float>();
const float humidity = obj["main"]["humidity"].as<float>();
const float p_rocio = (temp-((100-humidity)/5));
const char* dato = obj["name"].as<const char*>();
FirebaseJsonArray arr2;
arr2.add( temp,press,speed,humidity,p_rocio,dato, true);
sendArrayToFirebase(sector2, &arr2);
Serial.println("DTS");
Serial.print("Lugar: ");
Serial.println(dato);
Serial.print("Humedad: " );
Serial.println(humidity);
Serial.print("Temperatura:");
Serial.println(temp);
Serial.print("Presion:");
Serial.println(press);
Serial.print("Velocidad Viento: ");
Serial.print(speed );
Serial.println(" m/s");
Serial.print("Punto de Rocio: ");
Serial.println(p_rocio);
Serial.println("");
} else {
Serial.println("Error!");
}
http.end();
}
void sendArrayToFirebase(String path, FirebaseJsonArray* arr) {
// Configurar los dígitos para números de punto flotante en el array
arr->setFloatDigits(2);
arr->setDoubleDigits(4);
// Enviar el array a Firebase y verificar si la operación fue exitosa
bool success = Firebase.RTDB.setArray(&fbdo, path.c_str(), arr);
Serial.printf("Set array... %s\n", success ? "ok" : fbdo.errorReason().c_str());
// Si la operación fue exitosa, obtener el array de Firebase
/*
if (success) {
success = Firebase.RTDB.getArray(&fbdo, path.c_str());
// Imprimir el resultado de obtener el array de Firebase
Serial.printf("Get array... %s\n", success ? fbdo.to<FirebaseJsonArray>().raw() : fbdo.errorReason().c_str());
}
}
*/