#define TRIG_PIN 17 // ESP32 pin GPIO23 connected to Ultrasonic Sensor's TRIG pin
#define ECHO_PIN 16 // ESP32 pin GPIO22 connected to Ultrasonic Sensor's ECHO pin
#define LEDGREEN 18
#define LEDRED 19
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ThingsBoard.h>
float duration_us, distance_cm;
String wifiSSID = "Wokwi-GUEST";
String wifiPassword = "";
String ukuranMobil;
String tbHost = "demo.thingsboard.io";
String tbToken = "9tibfpdvcohbje0lfl6z"; // "uphvng27y3blp3lya3wf";
void connectWifi() {
WiFi.begin(wifiSSID.c_str(), wifiPassword.c_str());
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
void sendDataToThingsBoard(String ukuranMobil, float distance_cm) {
HTTPClient http;
String url = "http://" + tbHost + "/api/v1/" + tbToken + "/telemetry";
String payload = "{\"size\":" + ukuranMobil + ",\"distance\":" + distance_cm + "}";
http.begin(url);
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.POST(payload);
if (httpResponseCode > 0) {
Serial.println("Data sent to ThingsBoard successfully");
} else {
Serial.println("Error sending data to ThingsBoard");
}
http.end();
}
void setup() {
// begin serial port
Serial.begin(115200);
connectWifi();
// configure the trigger pin to output mode
pinMode(TRIG_PIN, OUTPUT);
// configure the echo pin to input mode
pinMode(ECHO_PIN, INPUT);
pinMode(LEDGREEN, OUTPUT);
pinMode(LEDRED, OUTPUT);
digitalWrite(LEDGREEN, LOW);
digitalWrite(LEDRED, LOW);
}
void loop() {
// 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;
// print the value to Serial Monitor
Serial.print(F("distance: "));
Serial.print(distance_cm);
Serial.println(F(" cm"));
lights();
sendDataToThingsBoard(ukuranMobil, distance_cm());
delay(500);
}
void lights(){
if(distance_cm < 120) {
digitalWrite(LEDRED, HIGH);
digitalWrite(LEDGREEN, LOW);
ukuranMobil = "Mobil besar";
Serial.println(ukuranMobil);
}
else if(distance_cm < 180) {
digitalWrite(LEDRED, HIGH);
digitalWrite(LEDGREEN, LOW);
ukuranMobil = "Mobil sedang";
Serial.println(ukuranMobil);
}
else if(distance_cm < 250) {
digitalWrite(LEDRED, HIGH);
digitalWrite(LEDGREEN, LOW);
ukuranMobil = "Mobil kecil";
Serial.println(ukuranMobil);
}
else{
digitalWrite(LEDRED, LOW);
digitalWrite(LEDGREEN, HIGH);
ukuranMobil = "Parkir kosong";
Serial.println(ukuranMobil);
}
}