#define BLYNK_TEMPLATE_ID "TMPL2KeSclYet"
#define BLYNK_TEMPLATE_NAME "Iluminacion2"
#define BLYNK_AUTH_TOKEN "7EMgehPz8ZvZJl6AYOa9qM-o7WVoL6GJ"

#include <WiFi.h>
#include <BlynkSimpleEsp32.h>

// Configuración de la red WiFi
char ssid[] = "Fam Prieto Torres";  // Nombre de tu red WiFi
char pass[] = "12345678PT";         // Contraseña de tu red WiFi

// Pines del ESP32
const int LDR_PIN = 34;  // Pin donde está conectado el LDR
const int LED_PIN = 2;   // Pin donde está conectado el LED (en caso de que quieras controlarlo directamente)
const int RELAY_PIN = 27; // Pin donde está conectado el Relay

int modoManual = 0;      // Variable para alternar entre automático y manual
BlynkTimer timer;        // Temporizador de Blynk

// Función para leer el sensor LDR y controlar el relay
void leerSensor() {
  int nivelLuz = analogRead(LDR_PIN); // Leer el valor del LDR
  Blynk.virtualWrite(V0, nivelLuz);   // Enviar el nivel de luz a Blynk en el widget V0
  
  // Si está en modo automático, controlar el relay en función del nivel de luz
  if (modoManual == 0) {
    if (nivelLuz < 2000) {
      digitalWrite(RELAY_PIN, HIGH);  // Encender el relay (iluminación)
    } else {
      digitalWrite(RELAY_PIN, LOW);   // Apagar el relay (iluminación)
    }
  }
}

// Función para cambiar entre modo automático y manual
BLYNK_WRITE(V1) {
  modoManual = param.asInt();  // Cambiar el modo
}

// Función para controlar el relay manualmente desde Blynk
BLYNK_WRITE(V2) {
  int estado = param.asInt(); // Leer el estado del widget V2
  digitalWrite(RELAY_PIN, estado); // Encender o apagar el relay según el valor
}

void setup() {
  // Configuración de pines
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(LDR_PIN, INPUT);

  // Inicializar el puerto serie
  Serial.begin(115200);
  
  // Conectar a la red WiFi y Blynk
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  // Configurar el temporizador para leer el sensor cada segundo
  timer.setInterval(1000L, leerSensor);
}

void loop() {
  Blynk.run();   // Mantener la conexión con Blynk
  timer.run();   // Ejecutar tareas periódicas
}
NOCOMNCVCCGNDINLED1PWRRelay Module