/*************************************************************
* ESP32 + LDR (sensor de luz) + Blynk IoT Cloud
* Mede luminosidade (Lux float) e envia para Blynk
* Atualização sem delay usando millis()
* Limiar de claro/escuro definido pelo Blynk
*************************************************************/
#define BLYNK_TEMPLATE_ID "TMPL2MSaNzXRq"
#define BLYNK_TEMPLATE_NAME "Luminaria Noturna"
#define BLYNK_AUTH_TOKEN "PbZ5Hg7_ve_P1VV9FJ6JcZTQ3Wm0v3Le"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Configurações da rede Wi-Fi
char ssid[] = "Ceagre";
char pass[] = "Ceagre@10";
// Pino do LDR
const int pinoLDR = 34;
const int pinoLed = 13;
// Variáveis
int valorLuz = 0;
float lux = 0.0;
// Temporização
unsigned long previousMillis = 0;
const long interval = 1000; // 1 segundo
// Limiar ajustável via Blynk
float limiarClaro = 10000.0;
// Função de conversão de ADC para Lux
float mapLux(float adc) {
float result = (4095.0 - adc) * (100000.0 - 0.1) / 4095.0 + 0.1;
if (result < 0.1) result = 0.1;
if (result > 100000.0) result = 100000.0;
return result / 1000.0;
}
BLYNK_WRITE(V4) {
limiarClaro = param.asFloat();
}
void setup() {
Serial.begin(115200);
pinMode(pinoLed, OUTPUT);
Serial.println("ESP32 + LDR + Blynk Cloud (Lux) usando millis()");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
Blynk.run();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Leitura do LDR
valorLuz = analogRead(pinoLDR);
// Conversão para Lux
lux = mapLux(valorLuz);
// Envio para o Serial Monitor
Serial.print("ADC: ");
Serial.print(valorLuz);
Serial.print(" -> Lux: ");
Serial.println(lux, 2);
// Envio para o Blynk
Blynk.virtualWrite(V1, lux);
Blynk.virtualWrite(V2, valorLuz);
if (!(lux >= limiarClaro)) {
digitalWrite(pinoLed, HIGH);
Serial.println("ESTA ESCURO");
} else {
digitalWrite(pinoLed, LOW);
}
}
}