#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <NewPing.h>
// ====== KONFIGURASI WIFI & MQTT ======
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqttServer = "broker.hivemq.com";
const int mqttPort = 1883;
const char* mqttTopic = "trashbox/1/status";
// ====== KONFIGURASI SENSOR ======
#define TRIG_PIN D2
#define ECHO_PIN D3
#define MAX_DISTANCE 200 // cm
WiFiClient espClient;
PubSubClient client(espClient);
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
// ====== FUNGSI: KONEKSI KE WIFI ======
void connectWiFi() {
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected!");
}
// ====== FUNGSI: KONEKSI KE BROKER MQTT ======
void connectMQTT() {
while (!client.connected()) {
Serial.print("Connecting to MQTT...");
if (client.connect("ESP1_NodeSensing")) {
Serial.println("Connected!");
} else {
Serial.print("Failed (rc=");
Serial.print(client.state());
Serial.println("), retrying...");
delay(2000);
}
}
}
// ====== SETUP ======
void setup() {
Serial.begin(115200);
connectWiFi();
client.setServer(mqttServer, mqttPort);
}
// ====== LOOP ======
void loop() {
if (!client.connected()) {
connectMQTT();
}
client.loop();
// Baca jarak dari sensor
int distance = sonar.ping_cm();
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
// Tentukan status
String status;
if (distance > 30) status = "KOSONG";
else if (distance > 10) status = "TERISI";
else status = "PENUH";
// Publish ke MQTT
client.publish(mqttTopic, status.c_str());
Serial.println("Status dikirim: " + status);
delay(3000); // kirim tiap 3 detik
}