#include <WiFi.h>
#include <PubSubClient.h>
// Konfigurasi WiFi
const char* ssid = "Wokwi-GUEST"; // SSID WiFi
const char* password = ""; // Password WiFi (kosongkan untuk Wokwi Guest)
// Konfigurasi MQTT
const char* mqtt_server = "broker.emqx.io"; // Broker MQTT
const int mqtt_port = 1883; // Port MQTT
const char* mqtt_topic = "Spalazgoo"; // Topik untuk mengirim data suhu
const char* control_topic = "testtopic/control"; // Topik untuk menerima perintah "on"
const char* client_id = "zhra-test-si"; // Client ID MQTT
// Pin untuk LED
#define LED_PIN 2 // LED terhubung ke GPIO2 (pastikan pin ini sesuai dengan hardware Anda)
// Setup WiFi dan MQTT Client
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
// Mulai komunikasi serial
Serial.begin(115200);
// Inisialisasi LED
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // Pastikan LED mati di awal
// Koneksi ke WiFi
Serial.println("Menghubungkan ke WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi Terhubung!");
// Konfigurasi MQTT
client.setServer(mqtt_server, mqtt_port);
client.setCallback(mqttCallback); // Menetapkan fungsi callback untuk menerima pesan
reconnectMQTT();
}
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop(); // Mendengarkan pesan dari broker
}
void reconnectMQTT() {
// Coba untuk terhubung ke broker MQTT
while (!client.connected()) {
Serial.println("Menghubungkan ke MQTT...");
if (client.connect(client_id)) {
Serial.println("Terhubung ke MQTT!");
client.subscribe(control_topic); // Subscribe ke topik untuk menerima perintah
} else {
Serial.print("Gagal: ");
Serial.println(client.state());
delay(2000);
}
}
}
// Fungsi callback yang dijalankan saat pesan diterima
void mqttCallback(char* topic, byte* payload, unsigned int length) {
String message = "";
// Membaca pesan yang diterima
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
// Cek jika pesan diterima dari topik kontrol
if (String(topic) == control_topic) {
if (message == "on") {
// Perintah "on" diterima, nyalakan LED
Serial.println("Perintah 'on' diterima!");
digitalWrite(LED_PIN, HIGH); // Menyalakan LED
} else if (message == "off") {
// Perintah "off" diterima, matikan LED
Serial.println("Perintah 'off' diterima!");
digitalWrite(LED_PIN, LOW); // Mematikan LED
} else {
Serial.println("Pesan tidak dikenali");
}
}
}