#define BLYNK_TEMPLATE_ID "TMPL2vMr0E_Mt"
#define BLYNK_TEMPLATE_NAME "IoT"
#define BLYNK_AUTH_TOKEN "HUMd-9EBmZlNzJsXNtbWEpYB1NgR9gkf"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS 4 // Pin para el sensor de temperatura
#define LED_VERDE 13 // Pin para el LED Verde
#define LED_ANARANJADO 12 // Pin para el LED Anaranjado
#define LED_ROJO 14 // Pin para el LED Rojo
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD de 16x2
float setHeatLevel = 0.0; // Nivel de calefacción desde el slider
float currentTemperature = 0.0; // Temperatura actual
bool systemOn = false;
int setSwitch= 0; // Estado del sistema
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // Reemplaza con tu SSID
char pass[] = ""; // Reemplaza con tu contraseña WiFi
BlynkTimer timer;
// Control del nivel de calefacción desde el slider
BLYNK_WRITE(V0) { // Slider para controlar el nivel de calefacción
setHeatLevel = param.asFloat(); // Obtener valor del slider
}
// Control del nivel de calefacción desde el slider
BLYNK_WRITE(V1) { // Slider para controlar el nivel de calefacción
setSwitch = param.asInt(); // Obtener valor del slider
}
void setup() {
Serial.begin(115200);
pinMode(LED_VERDE, OUTPUT); // Configura el pin del LED Verde como salida
pinMode(LED_ANARANJADO, OUTPUT); // Configura el pin del LED Anaranjado como salida
pinMode(LED_ROJO, OUTPUT); // Configura el pin del LED Rojo como salida
lcd.init(); // Inicializa el LCD
lcd.backlight(); // Enciende la luz de fondo del LCD
sensors.begin(); // Inicializa el sensor de temperatura
Blynk.begin(auth, ssid, pass); // Inicializa Blynk
timer.setInterval(1000L, updateTemperature); // Configura el temporizador para actualizar la temperatura cada segundo
lcd.setCursor(0, 0);
lcd.print("Conectado a Blynk");
}
void updateTemperature() {
if(setSwitch==1){
sensors.requestTemperatures(); // Solicita la temperatura
currentTemperature = sensors.getTempCByIndex(0); // Obtiene la temperatura actual
// Mostrar temperatura y nivel de calefacción en el LCD
lcd.clear(); // Limpia la pantalla LCD
lcd.setCursor(0, 0); // Posición en la línea 0
lcd.print("Temp: ");
lcd.print(currentTemperature);
lcd.print(" C "); // Espacio para limpiar la línea
lcd.setCursor(0, 1); // Posición en la línea 1
lcd.print("Calor: ");
lcd.print(setHeatLevel);
lcd.print(" C "); // Espacio para limpiar la línea
// Control de LEDs según el nivel de calefacción
if (setHeatLevel <= 28) {
digitalWrite(LED_VERDE, HIGH); // Enciende el LED Verde
digitalWrite(LED_ROJO, LOW); // Apaga el LED Rojo
digitalWrite(LED_ANARANJADO, LOW);
lcd.setCursor(0, 2);
lcd.print("Frio"); // Espacio para limpiar la línea
lcd.backlight();
}
if (setHeatLevel >=29 && setHeatLevel <= 44) {
digitalWrite(LED_ANARANJADO, HIGH); // Enciende el LED Anaranjado
digitalWrite(LED_ROJO, LOW); // Apaga el LED Rojo
digitalWrite(LED_VERDE, LOW);
lcd.setCursor(0, 2);
lcd.print("Calor Moderado"); // Espacio para limpiar la línea
lcd.backlight();
}
if (setHeatLevel >=45 && setHeatLevel <= 50) {
digitalWrite(LED_ROJO, HIGH); // Enciende el LED Rojo
digitalWrite(LED_ANARANJADO, LOW); // Apaga el LED Anaranjado
digitalWrite(LED_VERDE, LOW); // Enciende el LED Verde
lcd.setCursor(0, 2);
lcd.print("Calor Intenso"); // Espacio para limpiar la línea
lcd.backlight();
}
// Enviar temperatura a Blynk
Blynk.virtualWrite(V2, currentTemperature); // Envía el estado del Switvch
}
else {
lcd.clear(); // Limpia la pantalla LCD
lcd.noBacklight(); // Apaga la luz de fondo
digitalWrite(LED_VERDE, LOW); // Apaga el LED verde
digitalWrite(LED_ANARANJADO, LOW); // Apaga el LED anaranjado
digitalWrite(LED_ROJO, LOW); // Apaga el LED rojo
}
}
void loop() {
Blynk.run(); // Maneja Blynk
timer.run(); // Maneja el temporizador
}
Loading
ds18b20
ds18b20