//memasukkan library jaringan WIFI dan dan library mqtt
#include <WiFi.h> //library jaringan wifi
#include <PubSubClient.h> //library mqtt
#define TRIG_PIN 5 //variabel untuk mendefinikan pin
#define ECHO_PIN 18 //variabel untuk mendefinikan pin
float duration, distance; //variabel untuk menyimpan rumus
// variabel WiFi
const char *ssid = "Wokwi-GUEST";
const char *password = "";
// variabel MQTT Broker
const char *mqtt_host = "broker.emqx.io";
const char *topic_pub = "salmaa";
const int mqtt_port = 1883;
//variabel nama esp32, agar mqtt mengenali perangkat esp32
String client_id = "RobotikID_publisher";
int waktu_sebelum, waktu_interval = 1*1000;
// memanggil library wifi untuk connect ke jaringan dan
// disimpan dalam variabel "espClient"(nama variabel bisa dirubah)
WiFiClient espClient;
//memanggil library pubsubclient dan
//membuat variabel "client" untuk menyimpan jaringan dalam variabel "espClient"
PubSubClient client (espClient);
void setup() {
//mendefinisikan baud rate untuk data yang dikirim ke serial monitor
Serial.begin (9600);
//mendefinikan fungsi dari pin yang disimpan dalam variabel TRIG_PIN dan ECHO_PIN
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
//reconnect to WIFI
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Menghubungkan ke WiFi..");
}
//memberikan laporan ke serial monitor kalau WiFi sudah terhubung
Serial.println("Terhubung ke WiFi");
//Menghubungkan ke mqtt broker
client.setServer(mqtt_host, mqtt_port);
while (!client.connected()) {
if (client.connect(client_id.c_str())) {
Serial.println("Terhubung ke mqtt broker");
} else {
Serial.print("Gagal Terhubung ");
Serial.print(client.state());
delay(2000);
}
}
// publish pesan ke MQTT
// String(nama_variabel berisi data yang mau dikirim).c_str()
// String digunakan untuk mengkonversi data integer ke dalam bentuk teks
client.publish(topic_pub, String(distance).c_str());
waktu_sebelum = millis();
}
// the code in loop function is executed repeatedly infinitely
void loop() {
//mendefinikan kerja sensor yang terhubung ke pin
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
//duration adalah variabel untuk menyimpan data waktu
//variabel duration dapat diganti sesuai dengan variabel yang ditulis diatas
duration = pulseIn(ECHO_PIN, HIGH);
//distance adalah variabel untuk menyimpan data rumus jarak
//variabel distance dapat diganti sesuai dengan variabel yang ditulis diatas
distance = 0.017 * duration;
//memanggil variabel distance (jarak) untuk dikirimkan diserial monitor.
Serial.print("distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(1000);
//client.loop () -> digunakan untuk mengirimkan data secara berulang.
//client diambil dari variabel yang ditulis diatas -> PubSubClient Client (variabel_jaringan)
client.loop();
if(millis() - waktu_sebelum >= waktu_interval){
client.publish(topic_pub, String(distance).c_str()); //mengirim data ke mqtt
waktu_sebelum = millis();
}
}