#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const int ledPin = 2; // Pin para controlar el LED
const int potPin = 34; // Pin para leer el potenciómetro
String firebaseHost = "led-base-9e2e1-default-rtdb.firebaseio.com";
String apiKey = "5G7zvZQPJPgecK2pXjasFvSyzOXiWmX4xXA59YQD"; // Reemplaza con tu clave de API de Firebase
String serverNameLed = "https://" + firebaseHost + "/iot/1/dispositivo/LED/valor.json?auth=" + apiKey;
String serverNamePot = "https://" + firebaseHost + "/iot/2/dispositivo/potenciometro/valor.json?auth=" + apiKey;
unsigned long lastTime = 0;
unsigned long timerDelay = 100; // Intervalo de tiempo para consultar el estado en milisegundos (100 milisegundos)
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
connectToWiFi();
Serial.println("Actualización en tiempo real del LED y el potenciómetro.");
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
// Consulta el valor del LED desde la base de datos
int ledValue = getFirebaseValue(serverNameLed);
// Si el valor es -1, hay un error
if (ledValue == -1) {
Serial.println("Error al obtener el valor del LED desde la base de datos.");
} else {
// Actualiza el estado del LED
digitalWrite(ledPin, (ledValue == 1) ? HIGH : LOW);
Serial.println("LED: " + String(ledValue == 1 ? "encendido" : "apagado"));
}
// Consulta el valor del potenciómetro desde la base de datos
int potValue = getFirebaseValue(serverNamePot);
// Si el valor es -1, hay un error
if (potValue == -1) {
Serial.println("Error al obtener el valor del potenciómetro desde la base de datos.");
} else {
// Establece el valor del potenciómetro
analogWrite(potPin, potValue);
Serial.println("Potenciómetro: " + String(potValue));
}
} else {
Serial.println("WiFi Desconectado");
// Intentar reconexión si se pierde la conexión
connectToWiFi();
}
delay(100); // Pequeño retardo para evitar la saturación del servidor
}
void connectToWiFi() {
Serial.print("Conectando a WiFi");
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
WiFi.begin(ssid, password);
delay(1000);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConectado a la red WiFi con dirección IP: " + WiFi.localIP().toString());
} else {
Serial.println("\nNo se pudo conectar a la red WiFi después de varios intentos.");
}
}
int getFirebaseValue(String serverName) {
HTTPClient http;
http.begin(serverName.c_str());
int value = -1; // Valor predeterminado en caso de error
// Realiza la solicitud GET para obtener el valor desde la base de datos
int httpResponseCode = http.GET();
if (httpResponseCode == 200) {
String payload = http.getString();
value = payload.toInt();
} else {
Serial.print("Error al obtener el valor desde la base de datos. Código de respuesta HTTP: ");
Serial.println(httpResponseCode);
}
// Cierra la conexión HTTP
http.end();
return value;
}