#include <WiFi.h> // Libreria para conectar wifi
#include "DHTesp.h" // Libreria para conectar al DHT
#include "Adafruit_MQTT.h" // Libreria para conectar a Adafruit
#include "Adafruit_MQTT_Client.h" // Libreria para conectar a Adafruit
// Credenciales para conectar a Adafruit
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "eruanol"
#define AIO_KEY "aio_iCVt63UpMbLxSDTcM4IcVzsNcuqp"
WiFiClient client;
Adafruit_MQTT_Client mqtt (&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Subscribe tempe = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME"/feeds/welcome-feed"); // Feed
Adafruit_MQTT_Subscribe humed = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME"/feeds/wokwifeed"); // Feed
// Credenciales para conectar el wifi
#define wifi "Wokwi-GUEST" // Red
#define pass "" // Contraseña
#define canal 6 // Canal
const int DHT_PIN = 25;
DHTesp dhtSensor;
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Serial.print("Obteniendo conexión ");
WiFi.begin("Wokwi-GUEST", "", 6);
while(WiFi.status()!= WL_CONNECTED){
Serial.print(".");
delay(100);
}
Serial.println(" Conectado exitosamente!");
mqtt.subscribe(&tempe);
mqtt.subscribe(&humed);
}
void loop() {
MQTT_connect();
// Lectura de la temperatura y humedad del sensor DHT22
float temperature = dhtSensor.getTemperature();
float humidity = dhtSensor.getHumidity();
// Verificación de lecturas válidas del sensor
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Error al leer el sensor DHT22!");
delay(2000);
return;
}
// Publicar datos en los feeds correspondientes en Adafruit.io
if (mqtt.connected()) {
// Publicar temperatura en el feed correspondiente
char temperatureStr[10];
dtostrf(temperature, 4, 2, temperatureStr);
mqtt.publish(AIO_USERNAME "/feeds/temp-feed", temperatureStr);
// Publicar humedad en el feed correspondiente
char humidityStr[10];
dtostrf(humidity, 4, 2, humidityStr);
mqtt.publish(AIO_USERNAME "/feeds/humi-feed", humidityStr);
delay(5000); // Espera 5 segundos antes de publicar los siguientes datos
}
}
void MQTT_connect(){
int8_t ret;
if(mqtt.connected()){
return;
}
Serial.print("Conectando a MQTT");
uint8_t retries = 3; // ciclos que se demora en volverlo a intentar
while(ret = mqtt.connect()!=0){
Serial.println(mqtt.connectErrorString(ret));
Serial.println(" Reintentando conectar a MQTT en 5 segundos...");
mqtt.disconnect(); //metodo interno que tiene la libreria
delay (5000);
if(retries == 0){
while(1);
}
}
Serial.println(" Conectado!!!");
}