#include <Arduino.h>
#include <WiFi.h>
//#include <Firebase_ESP_Client.h>
//#include <HTTPClient.h>
#include <ArduinoJson.h>
#include "token.h"
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_DC 2
#define TFT_CS 15
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
TaskHandle_t Task2; //, Task3;
void loop2(void *parameter){
for(;;){
byte d = 5;
digitalWrite(16, HIGH);
delay(d*100);
digitalWrite(16, LOW);
delay(d*100);
}
vTaskDelay(10);
}
const char* simbolo = "\x10";
// 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 conect (){
if (!(WiFi.status() == WL_CONNECTED)){
digitalWrite(14, LOW);
digitalWrite(27, LOW);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("\nIntentando conectar al WiFi ..");
byte contador = 0;
while (WiFi.status() != WL_CONNECTED && contador <=10) {
Serial.print('.');
contador++;
digitalWrite(12, HIGH);
delay(200);
digitalWrite(12, LOW);
delay(200);
}
(WiFi.status() == WL_CONNECTED) ? digitalWrite(14, HIGH): digitalWrite(27, HIGH);
}
else {
for(byte i =0; i<2; i++){
digitalWrite(14, LOW);
delay(200);
digitalWrite(14, HIGH);
delay(200);
}
delay(5000);
}
}
void initWiFi() {
digitalWrite(14, LOW);
digitalWrite(27, LOW);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi ..");
byte contador = 0;
while (WiFi.status() != WL_CONNECTED && contador <=10) {
Serial.print('.');
contador++;
digitalWrite(12, HIGH);
delay(200);
digitalWrite(12, LOW);
delay(200);
}
(WiFi.status() == WL_CONNECTED) ? digitalWrite(14, HIGH): digitalWrite(27, HIGH);
Serial.println("\n" + WiFi.localIP().toString());
/*
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);
tft.begin();
tft.setRotation(1);
tft.fillScreen(ILI9341_BLACK);
print_tft(40, 120, ILI9341_RED, 2, "FORRO");
print_tft(40, 150, ILI9341_BLUE, 4, "PRUEBA");
//print_tft(0,0, ILI9341_GREEN, 2, ">");
print_tft(0, 0, ILI9341_RED, 1, simbolo );
delay(2000);
clear_linea(40, 150, 4, "BORRADO");
pinMode(12, OUTPUT);
pinMode(14, OUTPUT);
pinMode(27, OUTPUT);
pinMode(16, OUTPUT);
xTaskCreatePinnedToCore(loop2,"Task_2",1000,NULL,1,&Task2,0);
initWiFi();
sector2 = "/API-WEATHER";
}
void loop(){
// Weather();
conect ();
//Serial.println("En núcleo ->" + String(xPortGetCoreID()));
delay(2000);
}
void print_tft(int16_t x, int16_t y, uint16_t color, uint8_t textSize, const char* text) {
tft.setCursor(x, y);
tft.setTextColor(color);
tft.setTextSize(textSize);
tft.println(text);
}
void clear_linea(int16_t x, int16_t y, uint8_t textSize, const char* newText) {
int16_t textWidth = textSize * 6 * strlen(newText);
int16_t textHeight = textSize * 8;
tft.fillRect(x, y, textWidth, textHeight, ILI9341_BLACK);
delay(50);
print_tft(x, y, ILI9341_BLUE, textSize, newText);
}
/*
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());
}
}
*/