#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
WiFiClient wifiClient;
const char* mqttBroker = "broker.hivemq.com";
const char* mqttClientName = "ClienteMarcel1";
const char* mqttUser = "";
const char* mqttPass = "";
const char* name_topic = "marcel/topico2";
const char* send_topic = "marcel/topico1";
PubSubClient mqttClient(wifiClient);
const int LDR_PIN = 32;
const int LED_PIN = 13; // Asegúrate de que este pin esté correcto
const int THRESHOLD = 500;
bool isDark = false;
bool ledState = false;
unsigned long lastPublishTime = 0;
const unsigned long publishInterval = 1000;
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConectado a " + String(ssid));
Serial.println("Dirección IP: " + WiFi.localIP().toString());
mqttClient.setServer(mqttBroker, 1883);
mqttClient.setCallback(callback);
}
void loop() {
if (!mqttClient.connected()) {
mqttConnect();
}
mqttClient.loop();
int ldrValue = analogRead(LDR_PIN);
bool currentState = (ldrValue > THRESHOLD);
if (currentState != isDark || millis() - lastPublishTime > publishInterval) {
isDark = currentState;
String message = isDark ? "on" : "off";
publishMessage(send_topic, message, true);
Serial.println("Nivel de luz: " + String(ldrValue) + " - Enviando '" + message + "'");
lastPublishTime = millis();
}
digitalWrite(LED_PIN, ledState);
}
void mqttConnect() {
while (!mqttClient.connected()) {
Serial.print("Intentando conexión MQTT...");
if (mqttClient.connect(mqttClientName, mqttUser, mqttPass)) {
Serial.println("conectado");
mqttClient.publish("hello", mqttClientName);
mqttClient.subscribe(name_topic);
} else {
Serial.print("falló, rc=");
Serial.print(mqttClient.state());
Serial.println(" intentando de nuevo en 5 segundos");
delay(5000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
String incomingMessage = "";
for (int i = 0; i < length; i++) {
incomingMessage += (char)payload[i];
}
Serial.println("Mensaje recibido [" + String(topic) + "] " + incomingMessage);
if (incomingMessage == "button_pressed") {
ledState = true;
digitalWrite(LED_PIN, HIGH);
Serial.println("Botón presionado en Placa 2 - LED ON en Placa 1");
} else if (incomingMessage == "button_released") {
ledState = false;
digitalWrite(LED_PIN, LOW);
Serial.println("Botón liberado en Placa 2 - LED VERDE OFF en Placa 1");
}
}
void publishMessage(const char* topic, String payload, boolean retained) {
if (mqttClient.publish(topic, payload.c_str(), true))
Serial.println("Mensaje publicado [" + String(topic) + "]: " + payload);
}