/*
* This ESP32 code is created by esp32io.com
*
* This ESP32 code is released in the public domain
*
* For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-ultrasonic-sensor
*/
// Mengakses library
#include <WiFi.h> // library WiFi esp32
#include <PubSubClient.h> // library MQTT
#define TRIG_PIN 18 // ESP32 pin GIOP23 connected to Ultrasonic Sensor's TRIG pin
#define ECHO_PIN 5 // ESP32 pin GIOP22 connected to Ultrasonic Sensor's ECHO pin
// Data akun Wifi yang disediakan wokwi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Data MQTT Broker
// broker.hivemq.com versi free tanpa username dan password
char *mqttServer = "broker.hivemq.com";
int mqttPort = 1883;
char *mqttTopic = "chesya/ultrasonik";
// Membuat object
WiFiClient wifiClient; // Membuat objek wifiClient
PubSubClient mqttClient(wifiClient); // Membuat objek mqttClient dengan konstruktor objek WiFiClient (Permintaan dari Lib)
// Mendeklarasikan function
void connectToInternet(); // function untuk melayani koneksi ke SSID
void setupMQTT(); // function seting data koneksi ke MQTT server
void reconnectMQTT(); // function koneksi ulang ke MQTT server, jika koneksi dengan MQTT server putus
float duration_us, distance_cm;
void setup() {
// begin serial port
Serial.begin (9600);
// memanggil function connectToInternet() untuk koneksi ke SSID
connectToInternet();
// memanggil function setupMQTT() untuk koneksi ke MQQ Broker
setupMQTT(); // setup koneksi ke broker
// configure the trigger pin to output mode
pinMode(TRIG_PIN, OUTPUT);
// configure the echo pin to input mode
pinMode(ECHO_PIN, INPUT);
}
void loop() {
//Mengecek koneksi ke MQTT Broker
if (!mqttClient.connected()){
reconnectMQTT(); // jika putus koneksi, dicoba lagi
}
// int nilaiTegangan = analogRead(potensiometerPin);
// Menghitung duty cycle PWM berdasarkan nilai tegangan (0-255)
// int dutyCycle = map(nilaiTegangan, 0, 4095, 0, 255);
// generate 10-microsecond pulse to TRIG pin
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;
mqttClient.publish(mqttTopic,String(distance_cm).c_str());
// print the value to Serial Monitor
// Serial.print("distanceA: ");
// Serial.print(distance_cm);
// Serial.println(" cm ");
// delay(500);
}
// function connectToInternet()
// bertugas menjalankan tugas konek ke SSID
void connectToInternet(){
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");
}
// mengatur dan menginisialisasi koneksi ke broker MQTT
void setupMQTT() {
mqttClient.setServer(mqttServer, mqttPort); // Mengatur detail broker target yang digunakan
}
// untuk melakukan koneksi ulang (reconnect) ke broker MQTT
// jika klien kehilangan koneksi dengan broker
// atau gagal melakukan koneksi saat pertama kali menjalankan program.
// ESP32 Reconnect to broker
void reconnectMQTT() {
Serial.println("Connecting to MQTT Broker...");
while (!mqttClient.connected()) {
Serial.println("Reconnecting to MQTT Broker..");
//membuat Cliend ID untuk setiap device
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
// menampilkan pesan koneksi ke MTQQ broker sukses
if (mqttClient.connect(clientId.c_str())) {
Serial.println("Connected.");
}
}
}