#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "cobaaja.cloud.shiftr.io";
const int mqtt_port = 1883;
const char* mqtt_user = "cobaaja";
const char* mqtt_password = "9TZCgDsHhcGlRVJh";
// Define LED pins for each room
const int ledPinDapur = 27;
const int ledPinRuangTamu = 14;
const int ledPinRuangMakan = 13;
const int ledPinToilet = 12;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
// Set LED pins as output and turn them off initially
pinMode(ledPinDapur, OUTPUT);
pinMode(ledPinRuangTamu, OUTPUT);
pinMode(ledPinRuangMakan, OUTPUT);
pinMode(ledPinToilet, OUTPUT);
digitalWrite(ledPinDapur, LOW);
digitalWrite(ledPinRuangTamu, LOW);
digitalWrite(ledPinRuangMakan, LOW);
digitalWrite(ledPinToilet, LOW);
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Connect to MQTT broker
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("ESP32Client", mqtt_user, mqtt_password)) {
Serial.println("Connected to MQTT broker");
// Subscribe to the topics for each room
client.subscribe("esp32/dapur");
client.subscribe("esp32/ruang_tamu");
client.subscribe("esp32/ruang_makan");
client.subscribe("esp32/toilet");
} else {
Serial.print("Failed to connect, rc=");
Serial.print(client.state());
delay(2000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
String message;
for (unsigned int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.print("Message received on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
Serial.println(message);
// Control LEDs based on the room and message
if (String(topic) == "esp32/dapur") {
digitalWrite(ledPinDapur, message == "ON" ? HIGH : LOW);
client.publish("esp32/dapur/status", message.c_str());
} else if (String(topic) == "esp32/ruang_tamu") {
digitalWrite(ledPinRuangTamu, message == "ON" ? HIGH : LOW);
client.publish("esp32/ruang_tamu/status", message.c_str());
} else if (String(topic) == "esp32/ruang_makan") {
digitalWrite(ledPinRuangMakan, message == "ON" ? HIGH : LOW);
client.publish("esp32/ruang_makan/status", message.c_str());
} else if (String(topic) == "esp32/toilet") {
digitalWrite(ledPinToilet, message == "ON" ? HIGH : LOW);
client.publish("esp32/toilet/status", message.c_str());
}
}
void loop() {
if (!client.connected()) {
while (!client.connected()) {
Serial.println("Reconnecting to MQTT...");
if (client.connect("ESP32Client", mqtt_user, mqtt_password)) {
Serial.println("Connected to MQTT broker");
client.subscribe("esp32/dapur");
client.subscribe("esp32/ruang_tamu");
client.subscribe("esp32/ruang_makan");
client.subscribe("esp32/toilet");
} else {
Serial.print("Failed to connect, rc=");
Serial.print(client.state());
delay(2000);
}
}
}
client.loop();
}