#include <WiFi.h> //perintah untuk mengimpor library wifi
#include <MQTT.h> //Mengimpor library MQTT untuk komunikasi dengan broker MQTT.
//library ini memungkinkan ESP32 untuk publish dan subscribe pesan MQTT
WiFiClient net; //Class untuk membuat koneksi TCP/IP melalui WiFi
MQTTClient client; //Membuat objek/instance dari MQTT client
//NusabotSimpleTimer timer; //Class untuk mengelola komunikasi MQTT
//timer untuk mengatur interval pengiriman data ke topik,
// bisa juga utk mengatur delay lainnya
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
void setup() {
pinMode(27, OUTPUT);
WiFi.begin(ssid, pass);
client.begin("broker.emqx.io", net); //Fungsi untuk mengkonfigurasi MQTT client
// broker.emqx.io = Alamat broker MQTT publik gratis
// net = WiFiClient object
Serial.begin(9600); //Baud rate (kecepatan komunikasi) 9600 bits per detik
client.onMessage(subscribe);
//timer.setInterval(10000, publish); //publish info ke topik setiap 10 detik (1000 = 1 dtk)
connect();
}
// Variabel global ini di atas
long lastReconnectAttempt = 0;
void reconnect() {
if (!client.connected()) {
long now = millis();
if (now - lastReconnectAttempt > 5000) {
lastReconnectAttempt = now;
connect();
}
}
}
void loop() {
reconnect();
client.loop();
}
void subscribe(String &topic, String &data){
if(topic=="KelasIoT/led"){
if(data=="nyala"){
digitalWrite(27, 1);
} else {
digitalWrite(27, 0);
}
}
}
void publish(){
client.publish("KelasIoT/data","halo");
}
void connect(){
Serial.print("Menghubungkan ke WiFi");
while(WiFi.status()!=WL_CONNECTED){
Serial.print(".");
delay(500);
}
Serial.println("\nBerhasil terhubung ke WiFi");
Serial.print("Menghubungkan ke Broker");
while(!client.connect("mqttx_157a929e6")){
Serial.print(".");
delay(500);
}
Serial.println("\nBerhasil terhubung ke Broker");
client.subscribe("KelasIoT/#", 1);
}