#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <DHT_U.h>
// Faltaría implementar la pantalla también
// Configuración de WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Configuración de MQTT para Node-RED
const char* mqtt_broker = "test.mosquitto.org"; // Cambiar si usas otro broker
const char* mqtt_topic_humidity = "city/point/humidity";
const char* mqtt_topic_temperature = "city/point/temperature";
const char* mqtt_client_id = "node_red_client";
const int mqtt_port = 1883;
// Cliente MQTT
WiFiClient espClient;
PubSubClient client(espClient);
// Configuración de DHT22
#define DHTPIN 27
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Función para conectar a WiFi
void connectWiFi() {
Serial.println("Conectando a WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nConectado a WiFi");
}
// Función para conectar al broker MQTT
void connectMQTT() {
while (!client.connected()) {
Serial.print("Conectando al broker MQTT...");
if (client.connect(mqtt_client_id)) {
Serial.println("¡Conectado!");
} else {
Serial.print("Fallo, rc=");
Serial.print(client.state());
Serial.println(". Reintentando en 5 segundos...");
delay(5000);
}
}
}
// Configuración inicial
void setup() {
Serial.begin(115200);
dht.begin();
connectWiFi();
client.setServer(mqtt_broker, mqtt_port);
connectMQTT();
}
// Función para publicar datos en MQTT
void publishData(const char* topic, float value) {
if (!client.connected()) {
connectMQTT();
}
String message = String(value, 1);
client.publish(topic, message.c_str());
Serial.print("Publicado en ");
Serial.print(topic);
Serial.print(": ");
Serial.println(message);
}
// Bucle principal
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Error al leer los datos del sensor DHT22");
delay(2000);
return;
}
publishData(mqtt_topic_humidity, humidity);
publishData(mqtt_topic_temperature, temperature);
delay(5000); // Publicar cada 5 segundos
}
// #include <WiFi.h>
// #include <PubSubClient.h>
// #include <DHT.h>
// #include <DHT_U.h>
// // Configuración de WiFi
// const char* ssid = "Wokwi-GUEST";
// const char* password = "";
// // Configuración de MQTT
// const char* mqtt_broker = "test.mosquitto.org";
// const char* mqtt_topic_humidity = "city/point/humidity";
// const char* mqtt_topic_temperature = "city/point/temperature";
// const char* mqtt_client_id = "node_red_client";
// const int mqtt_port = 1883;
// // Cliente MQTT
// WiFiClient espClient;
// PubSubClient client(espClient);
// // Configuración de DHT22
// #define DHTPIN 27
// #define DHTTYPE DHT22
// DHT dht(DHTPIN, DHTTYPE);
// // Función para conectar a WiFi
// void connectWiFi() {
// Serial.println("Conectando a WiFi...");
// WiFi.begin(ssid, password);
// while (WiFi.status() != WL_CONNECTED) {
// delay(1000);
// Serial.print(".");
// }
// Serial.println("\nConectado a WiFi");
// }
// // Función para conectar al broker MQTT
// void connectMQTT() {
// while (!client.connected()) {
// Serial.print("Conectando al broker MQTT...");
// if (client.connect(mqtt_client_id)) {
// Serial.println("¡Conectado!");
// } else {
// Serial.print("Fallo, rc=");
// // Serial.print(client.state());
// Serial.println(". Reintentando en 5 segundos...");
// delay(5000);
// }
// }
// }
// // Función para publicar datos en MQTT
// void publishData(const char* topic, float value) {
// if (!client.connected()) {
// connectMQTT();
// }
// String message = String(value, 1);
// client.publish(topic, message.c_str());
// Serial.print("Publicado en ");
// Serial.print(topic);
// Serial.print(": ");
// Serial.println(message);
// }
// // Configuración inicial
// void setup() {
// Serial.begin(115200);
// dht.begin();
// connectWiFi();
// client.setServer(mqtt_broker, mqtt_port);
// connectMQTT();
// }
// // Bucle principal
// void loop() {
// // Leer los datos del sensor
// float humidity = dht.readHumidity();
// float temperature = dht.readTemperature();
// if (isnan(humidity) || isnan(temperature)) {
// Serial.println("Error al leer los datos del sensor DHT22");
// delay(2000);
// return;
// }
// // Publicar los datos en MQTT
// publishData(mqtt_topic_humidity, humidity);
// publishData(mqtt_topic_temperature, temperature);
// // Entrar en modo Deep Sleep por 10 segundos (10,000,000 microsegundos)
// Serial.println("Entrando en modo de sueño profundo...");
// ESP.deepSleep(10 * 1000000); // 10 segundos
// }