#include <WiFi.h> // Untuk koneksi internet
#include <PubSubClient.h> // Untuk komunikasi MQTT
const char* ssid = "Wokwi-GUEST"; // Nama WiFi Wokwi
const char* password = ""; // Password dikosongkan
const char* mqtt_server = "broker.hivemq.com"; // Broker MQTT
WiFiClient espClient;
PubSubClient client(espClient);
#define TRIG_PIN 5
#define ECHO_PIN 18
// Fungsi untuk membaca jarak dari sensor HC-SR04
float bacaJarak() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long durasi = pulseIn(ECHO_PIN, HIGH);
float jarak = durasi * 0.034 / 2; // dalam cm
return jarak;
}
// Fungsi untuk mengirim data tinggi air ke broker MQTT
void kirimKeMQTT(float tinggiAir) {
char pesan[50];
dtostrf(tinggiAir, 6, 2, pesan); // Konversi float ke string
client.publish("jinni/banjir/tinggi", pesan); // Kirim ke topik
}
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Mulai koneksi WiFi
Serial.print("Menyambung ke WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Terhubung ke WiFi");
// Set server MQTT
client.setServer(mqtt_server, 1883);
}
void loop() {
if (!client.connected()) {
reconnect(); // Cek koneksi MQTT
}
client.loop(); // Proses komunikasi MQTT
float jarak = bacaJarak(); // Baca jarak dari sensor
float tinggiAir = 100.0 - jarak; // Misal tangki 100cm
Serial.print("Tinggi Air: ");
Serial.print(tinggiAir);
Serial.println(" cm");
kirimKeMQTT(tinggiAir); // Kirim data ke MQTT
delay(3000); // Kirim data tiap 3 detik
}
// Fungsi untuk reconnect ke broker MQTT
void reconnect() {
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT...");
// Coba sambungkan dengan Client ID yang unik
if (client.connect("ESP32Client_12345")) {
Serial.println("Terhubung ke MQTT!");
} else {
Serial.print("Gagal, status error: ");
Serial.println(client.state()); // Debug jika gagal
delay(5000); // Coba lagi setelah 5 detik
}
}
}