#include <WiFi.h>
#include "PubSubClient.h"
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// MQTT Broker
const char *mqtt_broker = "broker.hivemq.com";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
// MQTT Topics
const char *topic_publish = "emqx/esp32/p";
const char *topic_subsrcibe = "emqx/esp32/s";
const char *topic_subsrcibe2 = "emqx/esp32/s2";
WiFiClient hamada;
PubSubClient client(hamada);
#define LED 2
bool ledState = false;
void setup() {
// Initialize LED pin
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW); // Turn off LED initially
// Start serial communication
Serial.begin(115200);
// Connect to Wi-Fi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to Wi-Fi!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// Set MQTT server
client.setServer(mqtt_broker, mqtt_port);
// Connect to MQTT broker
while (!client.connected()) {
String clientId = "esp32-client-" + String(WiFi.macAddress());
Serial.printf("Attempting to connect with client ID: %s\n", clientId.c_str());
if (client.connect(clientId.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Connected to MQTT broker!");
client.subscribe(topic_subsrcibe);
client.subscribe(topic_subsrcibe2);
} else {
Serial.print("Failed to connect. State: ");
Serial.println(client.state());
delay(5000); // Retry in 5 seconds
}
}
// Publish a test message
client.publish(topic_publish, "Hi, I'm ESP32 ^^");
}
void loop() {
client.loop(); // Ensure to keep the MQTT connection alive
}
void callback(char *topic, byte *payload, unsigned int length) {
String messageTemp;
for (int i = 0; i < length; i++) {
messageTemp += (char)payload[i];
}
// Example to toggle LED based on incoming message
if (String(topic) == "emqx/esp32/s" && messageTemp == "ON") {
digitalWrite(LED, HIGH);
} else if (String(topic) == "emqx/esp32/s" && messageTemp == "OFF") {
digitalWrite(LED, LOW);
}
}