/*
Implementación de un sistema IoT para un sistema De monitoreo de Temp y Hum
*/
#include <ArduinoJson.h> // Biblioteca para el formato JSON
#include <WiFi.h> //Biblioteca para el manejo de WIFI del esp8266
#include <PubSubClient.h> //Biblioteca para el manejo del protocolo MQTT
#include "DHTesp.h" //Biblioteca para el manejo del Sensor de temperatura y Humedad
StaticJsonDocument<200> doc;
const char* ssid = "Wokwi-GUEST"; //Escribe la identificación de tu red
const char* password = ""; //Escribe el password de tu red
const char* mqtt_server = "broker.mqttdashboard.com"; // Escribe la dirección de tu PC asignada por tu red
WiFiClient espClient; // Crea una instancia tipo WifiCliente llamado espClient
PubSubClient client(espClient); //Gestiona la Biblioteca de publicación-subscripción para el cliente creado
const int DHT_PIN = 15;
DHTesp dhtSensor;
void setup() {
pinMode(2,OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Serial.begin(115200); //Inicializa la comunicación serial a una velocidad de 115200
setup_wifi(); //Inicializa la Biblioteca WIFI
client.setServer(mqtt_server, 1883); //Inicializa el servidor con las dirección descrita en el encabezado y el puerto que usa
}
void setup_wifi() {
delay(10); // espera 10 milisegundos
Serial.println(); // Imprime un espacio de linea
Serial.print("Conectando a "); // Imprime la leyenda "Conectando a"
Serial.println(ssid); // Imprime la identificación de la red a al que se conecta
WiFi.begin(ssid, password); // Realiza la conexión a la red configurada usando el password configurado en el encabezado
while (WiFi.status() != WL_CONNECTED) { // Espera mientras se establece la conexión
delay(500); // Espera 500 milisegundos
Serial.print("."); // Imprime en la terminal "." hasta que se logre la conexión
}
Serial.println(""); //Imprime en la terminal un espacio
Serial.println("WiFi connecteda"); //Imprime en la terminal un espacio
Serial.println("dirección IP: "); //Imprime en la terminal "dirección IP: "
Serial.println(WiFi.localIP()); //Imprime en la terminal "dirección IP asignada al microcontrolador
}
void reconnect() { //función para la reconexión
while (!client.connected()) { //Espera hasta que se establezca la reconexión
Serial.print("Esperando Conexión MQTT...");
if (client.connect("ESPCliente2555444")) { //Se conecta como cliente con el nombre ESP8266Cliente
Serial.println("connectada"); //Imprime en la terminal conectado con el cliente
} else { // si no logra conectarse
Serial.print("falla, rc="); //Imprime en la terminal "falla, rc="
Serial.print(client.state()); //Imprime en la terminal el tipo de falla de conexión (un múmero)
Serial.println("Intento de nuevo en 5 segundos"); //Imprime en la terminal "Intento de nuevo en 5 segundos"
delay(5000); //Espera 5 segundos
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
TempAndHumidity data = dhtSensor.getTempAndHumidity();
doc["Temp"] = data.temperature;
doc["Hum"] = data.humidity;
char buffer[300];
serializeJson(doc, buffer);
client.publish("Sensor/THPMajo",buffer);
delay(2000);
}