#include <WiFi.h>
#include <PubSubClient.h>
// Konfigurasi WiFi
const char* ssid = "Wokwi-GUEST"; // Nama WiFi
const char* password = ""; // Password WiFi (kosong untuk Wokwi)
// Konfigurasi MQTT
const char* mqtt_server = "broker.mqttdashboard.com"; // Broker MQTT publik
const char* topic_vibration = "Getaran/mesin"; // Topik MQTT untuk data getaran
const char* topic_sound = "Suara/mesin"; // Topik MQTT untuk data suara mesin
WiFiClient espClient;
PubSubClient client(espClient);
// Pin potensiometer
const int potVibrationPin = 34; // Pin ADC ESP32 untuk potensiometer getaran
const int potSoundPin = 35; // Pin ADC ESP32 untuk potensiometer suara
void setup() {
Serial.begin(115200);
// Koneksi ke WiFi
Serial.print("Menghubungkan ke WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Terhubung!");
// Inisialisasi MQTT
client.setServer(mqtt_server, 1883);
reconnect();
// Inisialisasi pin ADC
pinMode(potVibrationPin, INPUT);
pinMode(potSoundPin, INPUT);
}
void reconnect() {
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT...");
if (client.connect("ESP32_Genset_Simulator")) {
Serial.println("Terhubung ke broker MQTT!");
} else {
Serial.print("Gagal, rc=");
Serial.print(client.state());
Serial.println(" mencoba lagi dalam 5 detik.");
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Membaca nilai dari potensiometer getaran
int potVibrationValue = analogRead(potVibrationPin);
float vibrationFrequency = map(potVibrationValue, 0, 4095, 0, 100);
// Membaca nilai dari potensiometer suara
int potSoundValue = analogRead(potSoundPin);
float soundFrequency = map(potSoundValue, 0, 4095, 20, 20000); // Range suara manusia (20 Hz - 20 kHz)
// Format pesan MQTT untuk getaran
char vibrationMessage[50];
sprintf(vibrationMessage, "Frekuensi Getaran: %.2f Hz", vibrationFrequency);
// Format pesan MQTT untuk suara
char soundMessage[50];
sprintf(soundMessage, "Frekuensi Suara: %.2f Hz", soundFrequency);
// Kirim data ke broker MQTT
client.publish(topic_vibration, vibrationMessage);
client.publish(topic_sound, soundMessage);
// Print ke Serial Monitor
Serial.println(vibrationMessage);
Serial.println(soundMessage);
// Delay 1 detik sebelum membaca lagi
delay(1000);
}