#include <WiFi.h>
#include "PubSubClient.h" // MQTT Library
WiFiClient wifiClient; // Membuat objek wifiClient
PubSubClient mqttClient(wifiClient);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
char *mqttServer = "broker.hivemq.com";
int mqttPort = 1883;
#define ECHO_PIN 26
#define TRIG_PIN 27
float distance_cm, duration_us;
void reconnect() {
Serial.println("Connecting to MQTT Broker...");
while (!mqttClient.connected()) {
Serial.println("Reconnecting to MQTT Broker..");
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
if (mqttClient.connect(clientId.c_str())) {
Serial.println("Connected.");
}
}
}
void setupMQTT() {
mqttClient.setServer(mqttServer, mqttPort); // Menagtur detail broker yang digunakan
mqttClient.setCallback(callback); // jika kita ingin menerima pesan untuk langganan yang dibuat oleh klien
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Callback - ");
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
WiFi.begin(ssid, password); // Mencoba connect ke Wifi
// Melakukan pengecekan terhadap status koneksi ke WI-Fi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected to Wi-Fi");
setupMQTT(); // koneksi ke broker
}
void loop() {
if (!mqttClient.connected())
reconnect(); // Try to connect with broker
mqttClient.loop();
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// measure duration of pulse from ECHO pin
duration_us = pulseIn(ECHO_PIN, HIGH);
// calculate the distance
distance_cm = 0.017 * duration_us;
char distance_cm_string[8];
dtostrf(distance_cm, 1, 2, distance_cm_string);
Serial.print("distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
mqttClient.publish("lele-dumbo-testing", distance_cm_string);
// put your main code here, to run repeatedly:
delay(2000); // this speeds up the simulation
}