#include <WiFi.h>
#include <PubSubClient.h>
// WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT
const char* mqtt_server = "broker.mqttdashboard.com";
const char* SUBTOPIC_LED1 = "esp32-6305/led1";
const char* SUBTOPIC_LED2 = "esp32-6305/led2";
const char* SUBTOPIC_LED3 = "esp32-6305/led3";
const char* SUBTOPIC_LED4 = "esp32-6305/led4";
WiFiClient espClient;
PubSubClient client(espClient);
// LED pins
const int LED_PIN1 = 13;
const int LED_PIN2 = 12;
const int LED_PIN3 = 14;
const int LED_PIN4 = 27;
void setup_wifi() {
delay(10);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(50);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.println("Attempting MQTT connection...");
String clientId = "esp32-clientId-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("Connected");
client.subscribe(SUBTOPIC_LED1);
client.subscribe(SUBTOPIC_LED2);
client.subscribe(SUBTOPIC_LED3);
client.subscribe(SUBTOPIC_LED4);
} else {
delay(50);
}
}
}
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Receive Topic: ");
Serial.println(topic);
Serial.print("Payload: ");
Serial.println((char *)payload);
if (!strcmp(topic, SUBTOPIC_LED1)) {
if (!strncmp((char *)payload, "1", length)) {
digitalWrite(LED_PIN1, HIGH);
} else if (!strncmp((char *)payload, "0", length)) {
digitalWrite(LED_PIN1, LOW);
}
} else if (!strcmp(topic, SUBTOPIC_LED2)) {
if (!strncmp((char *)payload, "1", length)) {
digitalWrite(LED_PIN2, HIGH);
} else if (!strncmp((char *)payload, "0", length)) {
digitalWrite(LED_PIN2, LOW);
}
} else if (!strcmp(topic, SUBTOPIC_LED3)) {
if (!strncmp((char *)payload, "1", length)) {
digitalWrite(LED_PIN3, HIGH);
} else if (!strncmp((char *)payload, "0", length)) {
digitalWrite(LED_PIN3, LOW);
}
} else if (!strcmp(topic, SUBTOPIC_LED4)) {
if (!strncmp((char *)payload, "1", length)) {
digitalWrite(LED_PIN4, HIGH);
} else if (!strncmp((char *)payload, "0", length)) {
digitalWrite(LED_PIN4, LOW);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
pinMode(LED_PIN3, OUTPUT);
pinMode(LED_PIN4, OUTPUT);
// Test LEDs directly
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay(3000); // Keep LEDs on for 3 seconds
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
delay(1000);
}