#define BLYNK_TEMPLATE_ID "TMPL6dkH814wW"
#define BLYNK_TEMPLATE_NAME "Smart Parking System"
#define BLYNK_AUTH_TOKEN "V6cQpJjyiY_s7fuA0PAcNuromxpi8vSQ"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include "SPI.h"
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
char auth[] = BLYNK_AUTH_TOKEN;
/**
* ILI9341 TFT libraries and resources
*/
const int TFT_CS = 15;
const int TFT_DC = 4;
const int TFT_MOSI = 23;
const int TFT_SLK = 18;
const int TFT_RST = 2;
/**
* Ultrasonic 1 and Ultrasonic 2 declaration echo and trigger pin
*/
int Trigger1 = 13;
int Echo = 12;
int Trigger2 = 26;
int Echo2 = 25;
int LED1 = 21;
int LED2 = 32;
#define BOXSIZE 130
long duration;
int dis1;
int dis2;
String Occp= "Occupied";
String Avail= "Available";
/**
* Hardware tft and coding tft configuration
*/
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
BlynkTimer timer;
WidgetLED led2(V2);
WidgetLED led3(V3);
BLYNK_CONNECTED ()
{
Blynk.syncVirtual (V2);
Blynk.syncVirtual (V3);
Blynk.syncVirtual (V4);
Blynk.syncVirtual (V5);
}
void sendSensor()
{
digitalWrite(Trigger1,LOW);
delayMicroseconds(2);
digitalWrite(Trigger1,HIGH);
delayMicroseconds(2);
digitalWrite(Trigger1,LOW);
long timedelay = pulseIn(Echo,HIGH);
int distance1 = 0.0343 * (timedelay/2);
Serial.print("Sensor 1 : ");
Serial.println(distance1);
delayMicroseconds(2);
digitalWrite(Trigger2,LOW);
delayMicroseconds(2);
digitalWrite(Trigger2,HIGH);
delayMicroseconds(2);
digitalWrite(Trigger2,LOW);
long td = pulseIn(Echo2,HIGH);
int distance2 = 0.0343 * (td/2);
Serial.print("Sensor 2 : ");
Serial.println(distance2);
Blynk.virtualWrite(V2, distance1);
Blynk.virtualWrite(V3, distance2);
if(dis1 != distance1 || dis2 != distance2){
dis1=distance1;
dis2=distance2;
if (distance1 < 100 && distance2 < 100) {
tft.fillRect(10, 60, BOXSIZE, BOXSIZE, ILI9341_RED);
tft.setCursor(30, 100);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("OCCUPIED");
Blynk.virtualWrite(V4, Occp);
tft.setCursor(50, 120);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("C001");
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
led2.on();
tft.fillRect(170, 60, BOXSIZE, BOXSIZE, ILI9341_RED);
tft.setCursor(190, 100);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("OCCUPIED");
Blynk.virtualWrite(V5, Occp);
tft.setCursor(210, 120);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("C002");
led3.on();
}
else if (distance1 < 100 && distance2 > 100) {
tft.fillRect(10, 60, BOXSIZE, BOXSIZE, ILI9341_RED);
tft.setCursor(30, 100);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.print("OCCUPIED");
Blynk.virtualWrite(V4, Occp);
tft.setCursor(50, 120);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.print("C001");
led2.on();
tft.fillRect(170, 60, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
tft.setCursor(190, 100);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.print("AVAILABLE");
Blynk.virtualWrite(V5, Avail);
tft.setCursor(210, 120);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.print("C002");
led3.off();
digitalWrite(LED1,LOW);
digitalWrite(LED2,HIGH);
}
else if (distance1 > 100 && distance2 < 100) {
tft.fillRect(10, 60, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
tft.setCursor(30, 100);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.print("AVAILABLE");
Blynk.virtualWrite(V4, Avail);
tft.setCursor(50, 120);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.print("C001");
led2.off();
tft.fillRect(170, 60, BOXSIZE, BOXSIZE, ILI9341_RED);
tft.setCursor(190, 100);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.print("OCCUPIED");
Blynk.virtualWrite(V5, Occp);
tft.setCursor(210, 120);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.print("C002");
led3.on();
digitalWrite(LED1,HIGH);
digitalWrite(LED2,LOW);
}
else if (distance1 > 100 && distance2 > 100) {
tft.fillRect(10, 60, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
tft.setCursor(20, 100);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.print("AVAILABLE");
Blynk.virtualWrite(V4, Avail);
tft.setCursor(50, 120);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.print("C001");
led2.off();
tft.fillRect(170, 60, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
tft.setCursor(180, 100);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.print("AVAILABLE");
Blynk.virtualWrite(V5, Avail);
tft.setCursor(210, 120);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.print("C002");
led3.off();
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
}
}
}
void setup() {
pinMode(Trigger1,OUTPUT);
pinMode(Echo,INPUT);
pinMode(Trigger2,OUTPUT);
pinMode(Echo2,INPUT);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
Serial.begin(115200);
tft.begin();
tft.setRotation(1);
Serial.begin(115200);
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(40, 10);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.print("IOT PARKING SYSTEM");
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, sendSensor);
}
void loop(){
Blynk.run();
timer.run();
}