Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 5

JONATHAN WOOLFSON A.

ENSAM4-A 26/07/2024

REPORTE: ENVÍO DE DATOS DE TEMPERATURA Y HUMEDAD A UN


SERVIDOR MQTT UTILIZANDO ESP32
Introducción

En este proyecto se ha desarrollado una solución para monitorear la temperatura y humedad


de un ambiente utilizando un microcontrolador ESP32. El sistema adquiere los datos de un
sensor DHT22 y los envía a un servidor MQTT, un protocolo de mensajería ligero ampliamente
utilizado en el Internet de las Cosas (IoT). El objetivo principal es demostrar la capacidad del
ESP32 para recolectar datos ambientales y transmitirlos de manera eficiente a una plataforma
en la nube.

Marco Teórico

ESP32: El ESP32 es un microcontrolador de bajo consumo y bajo costo, ampliamente


utilizado en proyectos IoT debido a su integrado módulo Wi-Fi. Su arquitectura dual-
core y su amplio conjunto de periféricos lo hacen ideal para aplicaciones que requieren
conectividad y procesamiento de datos.

Sensor DHT22: El sensor DHT22 es un sensor digital de humedad y temperatura de


bajo costo. Utiliza un protocolo de comunicación simple para enviar los datos al
microcontrolador.

Protocolo MQTT: MQTT es un protocolo de publicación-suscripción ligero diseñado


para conectar dispositivos de IoT a una variedad de servicios. Es especialmente
adecuado para entornos con recursos limitados y conexiones de baja banda.

Diagrama Esquemático
JONATHAN WOOLFSON A. ENSAM4-A 26/07/2024

Código

// Agregamos las librerías a usar


#include <WiFi.h>
#include <PubSubClient.h>
#include "DHTesp.h"

// Establecemos la comunicación WiFi


const char* ssid ="Wokwi-GUEST";
const char* password = "";

// Inicializamos el broker MQTT disponible para uso


const char* mqtt_server = "io.adafruit.com";
const char* mqtt_username = "xavibarzo89";
const char* mqtt_password = "aio_yute58a5SEqqxbukI9FWYhMZM0aq";

// Generamos los tópicos a usar


const char* SUBTOPIC_TEMP = "xavibarzo89/feeds/prac-lab.temperatura";
const char* SUBTOPIC_HUMIDITY = "xavibarzo89/feeds/prac-lab.humedad";

WiFiClient espClient;
PubSubClient client(espClient);

// Configuramos los pines del esp32

const int DHT_PIN= 15;


DHTesp dhtSensor;

//Inicializamos la conexión a internet


void setup_wifi() {
delay(10);
Serial.print("Conectando a ");
Serial.println(ssid);

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {


delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi conectado");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
JONATHAN WOOLFSON A. ENSAM4-A 26/07/2024

//Inicializamos la conexión al broker MQTT


void reconnect() {
while (!client.connected()) {
Serial.println("Intentado conexión MQTT ...");
String clientId = "esp32-dht22-clientId-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str(),mqtt_username,mqtt_password)) {
Serial.println("Conectado");
//client.subscribe(SUBTOPIC_LED);
//client.subscribe(SUBTOPIC_DOOR);
Serial.println("Topicos Suscritos");
} else {
Serial.print("Conexión fallida");
Serial.print(client.state());
Serial.println(" Intente en 5 segundos");
delay(5000);
}
}
}

//Inicializamos la publicación de nuestros tópicos


void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Topicos recibidos: ");
Serial.println(topic);

Serial.print("Payload: ");
String data = "";
for (int i = 0; i < length; i++) {
data += (char)payload[i];
}
Serial.println(data);
Serial.print("Tamaño de mensaje: ");
Serial.println(length);

//Inicializamos las configuraciones básicas del programa


void setup() {
Serial.begin(115200);
randomSeed(micros());
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);

}
JONATHAN WOOLFSON A. ENSAM4-A 26/07/2024

float old_temperature=0;
float old_humidity=0;

//Generamos bucle que publique la temperatura y humedad cuando su valor


es actualizado
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temperature = data.temperature;
float humidity = data.humidity;
//Publicamos la temperatura
if (temperature!=old_temperature);
client.publish(SUBTOPIC_TEMP, String(temperature, 2).c_str());
old_temperature=temperature;
//Publicamos la humedad
if (humidity!=old_humidity)
client.publish(SUBTOPIC_HUMIDITY, String(humidity, 1).c_str());
old_humidity=humidity;
delay(2000); // Wait for a new reading from the sensor (DHT22 has
~0.5Hz sample rate)

Explicación de la Simulación

Para simular el funcionamiento del sistema, se utilizó la plataforma Wokwi. Se creó un proyecto
en Wokwi que incluía los componentes virtuales del ESP32, el sensor DHT22 y el broker MQTT.
El código del ESP32 se cargó en la simulación y se observó el comportamiento del sistema.

Los resultados de la simulación mostraron que el ESP32 se conectaba correctamente a la red


Wi-Fi y al broker MQTT. Los datos de temperatura y humedad se publicaban en los tópicos
correspondientes con la frecuencia establecida.

Conclusiones y Recomendaciones

El proyecto ha demostrado la viabilidad de utilizar un ESP32 para recolectar datos


ambientales y enviarlos a un servidor MQTT. El sistema funciona de manera estable y
confiable, cumpliendo con los objetivos planteados.

Fortalezas:

 Bajo costo: Los componentes utilizados son de bajo costo.


JONATHAN WOOLFSON A. ENSAM4-A 26/07/2024

 Facilidad de implementación: El código es relativamente sencillo y puede ser


adaptado a diferentes aplicaciones.
 Flexibilidad: El protocolo MQTT permite una fácil integración con otras
plataformas y servicios.

Debilidades:

 Dependencia de la conexión Wi-Fi: El sistema requiere una conexión Wi-Fi


estable para funcionar correctamente.
 Limitaciones del sensor: El sensor DHT22 puede tener cierta imprecisión en las
mediciones.

Recomendaciones:

 Agregar más sensores: Se pueden agregar otros sensores para medir variables
adicionales como la presión atmosférica o la luminosidad.
 Implementar una interfaz web: Se puede desarrollar una interfaz web para
visualizar los datos en tiempo real y configurar el sistema de forma remota.
 Mejorar la frecuencia de muestreo: Se puede aumentar la frecuencia de
muestreo del sensor para obtener datos más precisos.
 Explorar otras plataformas MQTT: Se pueden evaluar otras plataformas MQTT

como HiveMQ o Mosquitto.

También podría gustarte