#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define WIFI_CHANNEL 6
#define led1 19
#define led2 18
#define led3 17
#define led4 4
const char *MQTT_BROKER_ADRESS = "test.mosquitto.org";
const uint16_t MQTT_PORT = 1883;
const char *MQTT_CLIENT_NAME = "mario_sub";
WiFiClient espClient;
PubSubClient mqttClient(espClient);
bool led1State = false;
bool led2State = false;
bool led3State = false;
bool led4State = false;
void ConnectWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
Serial.print("Connecting to WiFi ");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
}
void InitMqtt() {
mqttClient.setServer(MQTT_BROKER_ADRESS, MQTT_PORT);
mqttClient.setCallback(OnMqttReceived);
}
void ConnectMqtt() {
while (!mqttClient.connected()) {
Serial.print("Starting MQTT connection...");
if (mqttClient.connect(MQTT_CLIENT_NAME)) {
mqttClient.subscribe("encender/led1");
Serial.println("Subscribed to topic");
} else {
Serial.print("Failed, rc=");
Serial.println(mqttClient.state());
delay(5000);
}
}
}
void HandleMqtt() {
if (!mqttClient.connected()) {
ConnectMqtt();
}
mqttClient.loop();
}
void OnMqttReceived(char *topic, byte *payload, unsigned int length) {
if (topic == "encender/led1") {
led1State = !led1State;
digitalWrite(led1, led1State ? HIGH : LOW);
Serial.println(led1State ? "LED1 ON" : "LED1 OFF");
}
if (atoi((char *)payload) == 2) {
led2State = !led2State;
digitalWrite(led2, led2State ? HIGH : LOW);
Serial.println(led2State ? "LED2 ON" : "LED2 OFF");
}
if (atoi((char *)payload) == 3) {
led3State = !led3State;
digitalWrite(led3, led3State ? HIGH : LOW);
Serial.println(led3State ? "LED3 ON" : "LED3 OFF");
}
if (atoi((char *)payload) == 4) {
led4State = !led4State;
digitalWrite(led4, led4State ? HIGH : LOW);
Serial.println(led4State ? "LED4 ON" : "LED4 OFF");
}
if (atoi((char *)payload) == 0) {
Serial.println("Todos los leds apagados");
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
led1State = false;
led2State = false;
led3State = false;
led4State = false;
}
}
void setup() {
Serial.begin(115200);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
ConnectWiFi();
InitMqtt();
}
void loop() {
HandleMqtt();
delay(10);
}