#include <WiFi.h>
#include <PubSubClient.h>
// Reemplaza con tus datos de red
const char* ssid = "TU_SSID";
const char* password = "TU_CONTRASEÑA";
// Reemplaza con los datos de tu servidor MQTT
const char* mqttServer = "146.190.126.222";
const int mqttPort = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(9600);
setup_wifi();
client.setServer(mqttServer, mqttPort);
pinMode(2, INPUT_PULLUP); // Configura el pin del switch como entrada con pull-up
pinMode(5, OUTPUT); // Configura el pin del LED como salida
// Configura tu sensor aquí
}
void setup_wifi() {
delay(10);
// Conexión a la red WiFi
Serial.println("Conectando a WiFi...");
//WiFi.begin(ssid, password);
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi conectado");
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Lee tus sensores y envía los datos
int sensorValue = analogRead(34); // Ejemplo para un sensor analógico
char msg[50];
sprintf(msg, "Valor del sensor: %d", sensorValue);
client.publish("esp32/rain/vibration", msg);
int switchState = digitalRead(2); // Lee el estado del switch
if (switchState == HIGH) {
// Si el switch está abierto (dependiendo de cómo esté conectado)
client.publish("esp32/rain/switch", "off");
} else {
// Si el switch está cerrado
client.publish("esp32/rain/switch", "on");
}
delay(1000); // Ajusta este valor según tus necesidades
}
void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0'; // Asegura que el mensaje es una cadena de caracteres válida
String message = String((char*)payload);
if (String(topic) == "esp32/rain/led") {
if (message == "on") {
digitalWrite(5, HIGH); // Enciende el LED
} else if (message == "off") {
digitalWrite(5, LOW); // Apaga el LED
}
}
}
void reconnect() {
// Ciclo hasta que se conecte
while (!client.connected()) {
Serial.print("Intentando conexión MQTT...");
// Intenta conectar
if (client.connect("ArduinoClient")) {
Serial.println("conectado");
client.subscribe("esp32/rain/led"); // Suscríbete al tópico
} else {
Serial.print("falló, rc=");
Serial.print(client.state());
Serial.println(" intentando de nuevo en 5 segundos");
// Espera 5 segundos antes de reintentar
delay(5000);
}
}
}