#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "Wokwi-GUEST"; // Nombre de la red WiFi
const char* password = ""; // Contraseña de la red WiFi
const char* mqtt_server = "test.mosquitto.org"; // Servidor MQTT
const char* mqtt_client_id = "emqx_cloud96fb43"; // ID de cliente MQTT
const char* mqtt_topic_temperatura = "testtopic/temperatura"; // Tema para la temperatura
const char* mqtt_topic_humedad = "testtopic/Humedad"; // Tema para la humedad
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
const int LED_TEMPERATURE_PIN = 18; // Pin del LED para temperatura
const int LED_HUMIDITY_PIN = 19; // Pin del LED para humedad
void setup_wifi() {
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado");
Serial.println("Dirección IP: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mensaje recibido [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
// Encender el LED correspondiente
if (strcmp(topic, mqtt_topic_temperatura) == 0) {
digitalWrite(LED_TEMPERATURE_PIN, HIGH); // Encender LED de temperatura
} else if (strcmp(topic, mqtt_topic_humedad) == 0) {
digitalWrite(LED_HUMIDITY_PIN, HIGH); // Encender LED de humedad
}
}
void reconnect() {
while (!client.connected()) {
Serial.print("Conectando al servidor MQTT...");
String clientId = mqtt_client_id;
if (client.connect(clientId.c_str())) {
Serial.println("Conectado");
client.subscribe(mqtt_topic_temperatura);
client.subscribe(mqtt_topic_humedad);
Serial.println(mqtt_topic_temperatura);
Serial.println(mqtt_topic_temperatura);
} else {
Serial.print("Error al conectarse al servidor MQTT, rc=");
Serial.print(client.state());
Serial.println(" Intentando de nuevo en 5 segundos");
delay(5000);
}
}
}
void setup() {
pinMode(LED_TEMPERATURE_PIN, OUTPUT);
pinMode(LED_HUMIDITY_PIN, OUTPUT);
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
}
// Apagar los LEDs después de un tiempo
if (millis() - lastMsg > 10000) {
digitalWrite(LED_TEMPERATURE_PIN, LOW);
digitalWrite(LED_HUMIDITY_PIN, LOW);
}
}