#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <HTTPClient.h>
// WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingSpeak
const char* server = "http://api.thingspeak.com/update";
String apiKey = "ATD03EV1YCYX7KVN";
// Pines
#define DHTPIN 4
#define DHTTYPE DHT22
#define ONE_WIRE_BUS 15
#define LED_VERDE 2
#define LED_ROJO 18
#define BUZZER 5
// LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Sensores
DHT dht(DHTPIN, DHTTYPE);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature ds18b20(&oneWire);
// Variables
float tempDHT;
float humedad;
float tempDS;
bool fan1 = false;
bool fan2 = false;
bool alarma = false;
void setup() {
Serial.begin(115200);
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_ROJO, OUTPUT);
pinMode(BUZZER, OUTPUT);
lcd.init();
lcd.backlight();
dht.begin();
ds18b20.begin();
// WiFi
lcd.setCursor(0,0);
lcd.print("Conectando WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("WiFi Conectado");
delay(1500);
}
void loop() {
// Leer sensores
tempDHT = dht.readTemperature();
humedad = dht.readHumidity();
ds18b20.requestTemperatures();
tempDS = ds18b20.getTempCByIndex(0);
// FAN1
if (tempDHT >= 30 || humedad >= 70) {
fan1 = true;
digitalWrite(LED_VERDE, HIGH);
} else {
fan1 = false;
digitalWrite(LED_VERDE, LOW);
}
// FAN2
if (tempDS >= 45) {
fan2 = true;
digitalWrite(LED_ROJO, HIGH);
} else {
fan2 = false;
digitalWrite(LED_ROJO, LOW);
}
// ALARMA
if (tempDS >= 65) {
alarma = true;
digitalWrite(BUZZER, HIGH);
} else {
alarma = false;
digitalWrite(BUZZER, LOW);
}
// LCD
lcd.clear();
if (alarma) {
lcd.setCursor(0,0);
lcd.print("ALERTA TEMP!");
lcd.setCursor(0,1);
lcd.print("T2:");
lcd.print(tempDS);
} else {
lcd.setCursor(0,0);
lcd.print("T1:");
lcd.print(tempDHT);
lcd.setCursor(8,0);
lcd.print("H:");
lcd.print(humedad);
lcd.setCursor(0,1);
lcd.print("F1:");
lcd.print(fan1 ? "ON" : "OFF");
lcd.setCursor(8,1);
lcd.print("F2:");
lcd.print(fan2 ? "ON" : "OFF");
}
// Serial
Serial.println("------ ESTADO ------");
Serial.print("Temp DHT22: "); Serial.println(tempDHT);
Serial.print("Humedad: "); Serial.println(humedad);
Serial.print("Temp DS18B20: "); Serial.println(tempDS);
Serial.print("Fan1: "); Serial.println(fan1 ? "ON" : "OFF");
Serial.print("Fan2: "); Serial.println(fan2 ? "ON" : "OFF");
Serial.print("Alarma: "); Serial.println(alarma ? "ON" : "OFF");
Serial.println("-------------------");
// Enviar a ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String(server) + "?api_key=" + apiKey +
"&field1=" + String(tempDHT) +
"&field2=" + String(humedad) +
"&field3=" + String(tempDS) +
"&field4=" + String(fan1) +
"&field5=" + String(fan2) +
"&field6=" + String(alarma);
http.begin(url);
int httpResponseCode = http.GET();
Serial.print("HTTP Response: ");
Serial.println(httpResponseCode);
http.end();
}
// IMPORTANTE: mínimo 15 segundos
delay(15000);
}