#include <WiFi.h>
#include <PubSubClient.h>
#include <Preferences.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
Preferences prefs;
#define R1 14
#define R2 13
#define R3 12
#define R4 11
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
// Serial.println("Hello, ESP32-S3!");
pinMode(R1, OUTPUT);
pinMode(R2, OUTPUT);
pinMode(R3, OUTPUT);
pinMode(R4, OUTPUT);
prefs.begin("lights", false);
digitalWrite(R1, prefs.getInt("r1", LOW));
digitalWrite(R2, prefs.getInt("r2", LOW));
digitalWrite(R3, prefs.getInt("r3", LOW));
digitalWrite(R4, prefs.getInt("r4", LOW));
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.println("WiFi Connected");
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void callback(char* topic, byte* payload, unsigned int length) {
String msg = "";
for (int i = 0; i < length; i++) {
msg += (char)payload[i];
}
String t = String(topic);
if (t == "cb16/light1") {
digitalWrite(R1, msg == "ON" ? HIGH : LOW);
prefs.putInt("r1", digitalRead(R1));
}
else if (t == "cb16/light2") {
digitalWrite(R2, msg == "ON" ? HIGH : LOW);
prefs.putInt("r2", digitalRead(R2));
}
else if (t == "cb16/light3") {
digitalWrite(R3, msg == "ON" ? HIGH : LOW);
prefs.putInt("r3", digitalRead(R3));
}
else if (t == "cb16/light4") {
digitalWrite(R4, msg == "ON" ? HIGH : LOW);
prefs.putInt("r4", digitalRead(R4));
}
Serial.println(t + " -> " + msg);
client.publish((t + "/status").c_str(), msg.c_str());
}
void reconnect() {
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
String clientId = "ESP32_" + String(random(1000));
if ( client.connect(
clientId.c_str(),
"cb16/status", // LWT topic
0,
true,
"OFFLINE"
)) {
Serial.println("Connected!");
for(int i=1;i<5;i++)
client.subscribe(("cb16/light"+String(i)).c_str());
client.publish("cb16/status", "ONLINE", true);
} else {
Serial.print("Failed, rc=");
Serial.println(client.state());
delay(2000);
}
}
}
void loop() {
// put your main code here, to run repeatedly:
// delay(10); // this speeds up the simulation
if (!client.connected()) reconnect();
client.loop();
}Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1