#include <DHT.h>
#include <WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define DHTPIN 4
#define DHTTYPE DHT22
#define LED_TEMP_PIN 14
#define LED_HUMIDITY_PIN 15
DHT dht(DHTPIN, DHTTYPE);
bool ledTempState = false;
bool ledHumidityState = false;
// WiFi parameters
#define wifi "Wokwi-GUEST" // Red
#define pass "" // Contraseña
#define canal 6 // Canal
// Adafruit.io parameters
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "DJ4123"
#define AIO_KEY "aio_KjVf98ERZNFvR18Q6vqBk2u0hY1W"
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Publish temperatureFeed = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");
Adafruit_MQTT_Publish humidityFeed = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
Adafruit_MQTT_Publish sensorStateFeed = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/sensor-state");
void MQTT_connect();
void setup()
{
Serial.begin(115200);
Serial.println("Sensor DHT22 en ESP32");
dht.begin();
pinMode(LED_TEMP_PIN, OUTPUT);
pinMode(LED_HUMIDITY_PIN, OUTPUT);
// WiFi connection
WiFi.begin(wifi, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop()
{
MQTT_connect();
// Lectura de datos del sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Debugging: Mostrar valores en el puerto serie
Serial.println("Valores de temperatura y humedad");
Serial.print("temp=");
Serial.print(temperature);
Serial.println("°C");
Serial.print("hum=");
Serial.print(humidity);
Serial.println("%");
// Lógica para encender o apagar los LEDs según los valores del sensor
if (temperature > 45.0)
{
ledTempState = true;
}
else
{
ledTempState = false;
}
if (humidity < 25.0 || humidity > 60.0)
{
ledHumidityState = true;
}
else
{
ledHumidityState = false;
}
// Controlar los LEDs
digitalWrite(LED_TEMP_PIN, ledTempState);
digitalWrite(LED_HUMIDITY_PIN, ledHumidityState);
// Publicar datos en Adafruit.io
temperatureFeed.publish(temperature);
humidityFeed.publish(humidity);
// Retraso entre lecturas y publicaciones
delay(3000);
}
void MQTT_connect()
{
int8_t ret;
// Verificar si ya está conectado
if (mqtt.connected())
{
return;
}
Serial.print("Conectando a MQTT... ");
uint8_t retries = 2;
// Intentar la conexión MQTT
while ((ret = mqtt.connect()) != 0)
{
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Reintentando la conexión MQTT en 5 segundos...");
mqtt.disconnect();
delay(2500);
retries--;
// Si no puede conectarse después de varios intentos, detener el programa
if (retries == 0)
{
Serial.println("Error de conexión MQTT. Deteniendo el programa.");
while (1);
}
}
Serial.println("MQTT Conectado!");
}