#include <DHT.h>
#include <WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
// WiFi autenticación
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define WIFI_CHANNEL 6
// Adafruit IO configuración
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "seb_barreto"
#define AIO_KEY "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
WiFiClient client;
// Configuración del cliente MQTT pasando los datos de MQTT y WIFI.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperatura_UNIR_Actividad3");
Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humedad_UNIR_Actividad3");
int DHTPIN = 14; // pin donde está conectado DHT11
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
byte hum = 0; //variable para guardar humedad
byte temp = 0; //variable para guardar temperatura
void setup()
{
Serial.begin(115200);
Serial.println(F("Adafruit IO Ejemplo"));
// Conexión WIFI.
Serial.println(); Serial.println();
delay(10);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
Serial.print("Connecting to WiFi ");
Serial.print(WIFI_SSID);
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
dht.begin();
Serial.println(" Connected!");
Serial.println(F("Dirección IP: "));
Serial.println(WiFi.localIP());
// Conexión con adafruit io
connect();
}
// Conexión con adafruit io via MQTT
void connect()
{
Serial.print(F("Conectando con Adafruit IO... "));
int8_t ret;
while ((ret = mqtt.connect()) != 0)
{
switch (ret)
{
case 1: Serial.println(F("Error de protocolo")); break;
case 2: Serial.println(F("ID rechazado")); break;
case 3: Serial.println(F("Servidor no accesible")); break;
case 4: Serial.println(F("Error usuario/contraseña")); break;
case 5: Serial.println(F("No autorizado")); break;
case 6: Serial.println(F("Fallo en la subscripción")); break;
default: Serial.println(F("Fallo en la conexión")); break;
}
if(ret >= 0)
mqtt.disconnect();
Serial.println(F("Reintentando conexión..."));
delay(10000);
}
Serial.println(F("Adafruit IO conectado!"));
}
void loop()
{
// ping adafruit io cada cierto tiempo para verificar conexión
if(! mqtt.ping(3))
{
// reconectar a adafruit io
if(! mqtt.connected())
connect();
}
float hum = dht.readHumidity();
float temp = dht.readTemperature();
Serial.print((int)temp); Serial.print(" *C, ");
Serial.print((int)hum); Serial.println(" H");
delay(5000);
if (! Temperature.publish(temp)) { //Publicamos temperatura en Adafruit
Serial.println(F("Fallo"));
}
if (! Humidity.publish(hum)) { //Publicamos humedad en Adafruit
Serial.println(F("Fallo"));
}
else {
Serial.println(F("Enviado!"));
}
}