/*******************
* SMART PARKING IoT
* ESP32 + 4 HC-SR04 + LCD I2C + Blynk
*******************/
#define BLYNK_TEMPLATE_ID "TMPL60lBsZWaO"
#define BLYNK_TEMPLATE_NAME "Monitoring Parkir IoT"
#define BLYNK_AUTH_TOKEN "OstX7kGmF7NRNNxX0CfXp0CEXGKiEUn9"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
LiquidCrystal_I2C lcd(0x27,16,2);
BlynkTimer timer;
//============================
// Pin Sensor Ultrasonik
//============================
const int trigPins[4] = {5,19,12,27};
const int echoPins[4] = {18,23,14,26};
// Virtual Pin Blynk
const int vPins[4] = {V1,V2,V3,V4};
// Jarak kendaraan dianggap terdeteksi
const int batasJarak = 50;
//===================================
// Membaca jarak HC-SR04
//===================================
int bacaJarak(int trig,int echo){
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
long durasi = pulseIn(echo,HIGH,30000);
int jarak = durasi * 0.034 / 2;
if(jarak==0)
jarak=100;
return jarak;
}
//===================================
// Update Status Parkir
//===================================
void updateParkirStatus(){
String baris1="S1:";
String baris2="S3:";
for(int i=0;i<4;i++){
int jarak=bacaJarak(trigPins[i],echoPins[i]);
bool terisi = jarak < batasJarak;
if(terisi){
Blynk.virtualWrite(vPins[i],"TERISI");
Blynk.setProperty(vPins[i],"color","#D3435C");
if(i==0) baris1+="F";
if(i==1) baris1+=" S2:F";
if(i==2) baris2+="F";
if(i==3) baris2+=" S4:F";
}else{
Blynk.virtualWrite(vPins[i],"KOSONG");
Blynk.setProperty(vPins[i],"color","#23C48E");
if(i==0) baris1+="E";
if(i==1) baris1+=" S2:E";
if(i==2) baris2+="E";
if(i==3) baris2+=" S4:E";
}
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print(baris1);
lcd.setCursor(0,1);
lcd.print(baris2);
}
//===================================
// Setup
//===================================
void setup(){
Serial.begin(115200);
for(int i=0;i<4;i++){
pinMode(trigPins[i],OUTPUT);
pinMode(echoPins[i],INPUT);
}
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" SMART PARKING ");
lcd.setCursor(0,1);
lcd.print(" Connecting...");
Blynk.begin(auth,ssid,pass);
lcd.clear();
timer.setInterval(1000L,updateParkirStatus);
}
//===================================
// Loop
//===================================
void loop(){
Blynk.run();
timer.run();
}