#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <Ultrasonic.h>
const char* ssid = "Wokwi-GUEST"; // SSID WiFi
const char* password = ""; // Password WiFi
const char* mqttServer = "test.mosquitto.org"; // Broker MQTT
const int mqttPort = 1883; // Port broker MQTT
WiFiClient espClient;
PubSubClient client(espClient);
const int buttonPin = 4; // Pin untuk tombol
const int trigPin = 5; // Pin trigger untuk ultrasonik
const int echoPin = 18; // Pin echo untuk ultrasonik
Ultrasonic ultrasonic(trigPin, echoPin); // Inisialisasi sensor ultrasonik
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Menggunakan internal pull-up resistor
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi...");
}
client.setServer(mqttServer, mqttPort);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
bool buttonState = digitalRead(buttonPin) == LOW; // Button pressed if LOW
long distance = ultrasonic.read(); // Membaca jarak dari sensor
// Kirim data hanya jika tombol ditekan
if (buttonState) {
sendData(buttonState, distance);
delay(1000); // debounce delay
}
}
void sendData(bool buttonState, long distance) {
StaticJsonDocument<200> doc;
doc["device"] = "sensor1"; // Menambahkan identifikasi perangkat
doc["button_pressed"] = buttonState; // Status tombol
doc["distance"] = distance; // Jarak yang terukur
char buffer[256];
serializeJson(doc, buffer); // Serialisasi dokumen JSON ke buffer
client.publish("esp/device1", buffer); // Mengirim data ke topik
}
void reconnect() {
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("ESP32Client1")) {
Serial.println("Connected");
} else {
Serial.print("Failed with state ");
Serial.print(client.state());
delay(2000);
}
}
}