#include <WiFi.h>
#include <PubSubClient.h>
// WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT
const char* mqttServer = "test.mosquitto.org";
const int mqttPort = 1883;
const char* topikbutton = "smkn9mlg/btn";
const char* topikpotensio = "smkn9mlg/ptn";
// Pin
#define POT_PIN 34
#define BUTTON_PIN 35
WiFiClient espClient;
PubSubClient client(espClient);
// Variabel untuk deteksi perubahan
int lastPotValue = -1;
int lastButtonState = -1;
void setup() {
Serial.begin(115200);
// Inisialisasi pin
pinMode(BUTTON_PIN, INPUT);
// WiFi
Serial.print("Menghubungkan ke WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Terhubung!");
// MQTT
client.setServer(mqttServer, mqttPort);
Serial.print("Menghubungkan ke MQTT...");
while (!client.connected()) {
if (client.connect("")) {
Serial.println("\nMQTT Terhubung!");
} else {
Serial.print("Gagal terhubung. Kode error: ");
Serial.println(client.state());
delay(1000);
}
}
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
reconnectWiFi();
}
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
// Baca potensiometer
int potValue = analogRead(POT_PIN);
if (abs(potValue - lastPotValue) > 10) { // Threshold supaya gak terlalu sensitif
lastPotValue = potValue;
String potStr = String(potValue);
client.publish(topikpotensio, potStr.c_str());
Serial.println("Kirim potensio: " + potStr);
}
// Baca tombol
int buttonState = digitalRead(BUTTON_PIN);
if (buttonState != lastButtonState) {
lastButtonState = buttonState;
String btnStr = String(buttonState);
client.publish(topikbutton, btnStr.c_str());
Serial.println("Kirim tombol: " + btnStr);
}
delay(100);
}
void reconnectWiFi() {
Serial.print("WiFi terputus! Menghubungkan ulang...");
WiFi.disconnect();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Terhubung kembali!");
}
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("Menghubungkan kembali ke MQTT...");
if (client.connect("")) {
Serial.println("\nMQTT Terhubung kembali!");
} else {
Serial.print("Gagal terhubung. Kode error: ");
Serial.println(client.state());
delay(1000);
if (client.state() == -2) {
Serial.println("Error -2 terdeteksi, perangkat akan restart...");
delay(5000);
ESP.restart();
}
}
}
}