#include <WiFi.h>
#include <PubSubClient.h>
// Kredensial WiFi
const char* ssid = "Wokwi-GUEST"; // Nama WiFi
const char* password = ""; // Password WiFi (if any)
// Broker MQTT
const char* mqtt_server = "pemulungilmu.cloud.shiftr.io";
const char* user_server = "pemulungilmu";
const char* pw_server = "bosacong";
const int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
// Pin LED
#define LED_DAPUR_PIN 12 // Pin LED untuk dapur
#define LED_RUANG_TAMU_PIN 13 // Pin LED untuk ruang tamu
#define LED_RUANG_MAKAN_PIN 19 // Pin LED untuk ruang makan
#define LED_TOILET_PIN 18 // Pin LED untuk toilet
void setup() {
Serial.begin(115200);
// Set pin modes for each LED
pinMode(LED_DAPUR_PIN, OUTPUT);
pinMode(LED_RUANG_TAMU_PIN, OUTPUT);
pinMode(LED_RUANG_MAKAN_PIN, OUTPUT);
pinMode(LED_TOILET_PIN, OUTPUT);
// Koneksi ke WiFi
setup_wifi();
// Set server MQTT dan fungsi callback
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Menghubungkan ke ");
Serial.println(ssid);
WiFi.begin(ssid, password);
unsigned long startAttemptTime = millis();
while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 10000) { // Timeout 10 detik
delay(500);
Serial.print(".");
}
Serial.println("");
if (WiFi.status() == WL_CONNECTED) {
Serial.println("WiFi terhubung");
} else {
Serial.println("Koneksi WiFi gagal");
}
}
void reconnect() {
while (!client.connected()) {
Serial.print("Mencoba koneksi MQTT...");
String clientId = "ESP32Client-" + String(WiFi.macAddress());
if (client.connect("controlled", user_server, pw_server)) {
Serial.println("terhubung");
client.subscribe("home/lamp/control"); // Subscribe to control topic
} else {
Serial.print("gagal, rc=");
Serial.print(client.state());
Serial.println(" coba lagi dalam 5 detik");
delay(5000);
}
}
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Pesan tiba pada topik: ");
Serial.print(topic);
String msg;
for (int i = 0; i < length; i++) {
msg += (char)message[i];
}
Serial.println(". Pesan: " + msg);
// Kontrol LED berdasarkan pesan yang diterima
if (String(topic) == "home/lamp/control") {
if (msg == "dapur/on") {
digitalWrite(LED_DAPUR_PIN, HIGH); // Turn on kitchen LED
Serial.println("LED Dapur dinyalakan");
} else if (msg == "dapur/off") {
digitalWrite(LED_DAPUR_PIN, LOW); // Turn off kitchen LED
Serial.println("LED Dapur dimatikan");
} else if (msg == "ruang_tamu/on") {
digitalWrite(LED_RUANG_TAMU_PIN, HIGH); // Turn on living room LED
Serial.println("LED Ruang Tamu dinyalakan");
} else if (msg == "ruang_tamu/off") {
digitalWrite(LED_RUANG_TAMU_PIN, LOW); // Turn off living room LED
Serial.println("LED Ruang Tamu dimatikan");
} else if (msg == "ruang_makan/on") {
digitalWrite(LED_RUANG_MAKAN_PIN, HIGH); // Turn on dining room LED
Serial.println("LED Ruang Makan dinyalakan");
} else if (msg == "ruang_makan/off") {
digitalWrite(LED_RUANG_MAKAN_PIN, LOW); // Turn off dining room LED
Serial.println("LED Ruang Makan dimatikan");
} else if (msg == "toilet/on") {
digitalWrite(LED_TOILET_PIN, HIGH); // Turn on toilet LED
Serial.println("LED Toilet dinyalakan");
} else if (msg == "toilet/off") {
digitalWrite(LED_TOILET_PIN, LOW); // Turn off toilet LED
Serial.println("LED Toilet dimatikan");
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}