#include <WiFi.h>
#include <U8g2lib.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SCREEN_ADDRESS 0x3C
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 22, /* data=*/ 21, /* reset=*/ U8X8_PIN_NONE);
#define ECHO_PIN1 15 // Pins for Sensor 1
#define TRIG_PIN1 2 // Pins for Sensor 1
#define ECHO_PIN2 5 // Pins for Sensor 2
#define TRIG_PIN2 18 // Pins for Sensor 2
#define ECHO_PIN3 26 // Pins for Sensor 3
#define TRIG_PIN3 27 // Pins for Sensor 3
int LEDPIN1 = 13;
int LEDPIN2 = 12;
int LEDPIN3 = 14;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* apiKey = "WSJVHF5A15WWF3UQ";
const char* server = "api.thingspeak.com";
void setup() {
Serial.begin(115200);
u8g2.begin();
pinMode(LEDPIN1, OUTPUT);
pinMode(TRIG_PIN1, OUTPUT);
pinMode(ECHO_PIN1, INPUT);
pinMode(LEDPIN2, OUTPUT);
pinMode(TRIG_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
pinMode(LEDPIN3, OUTPUT);
pinMode(TRIG_PIN3, OUTPUT);
pinMode(ECHO_PIN3, INPUT);
connectToWiFi();
}
void connectToWiFi() {
Serial.println("Connecting to WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
float readDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
int duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2;
}
void sendToThingSpeak(int field1, int field2, int field3) {
WiFiClient client;
if (client.connect(server, 80)) {
String url = "/update?api_key=";
url += apiKey;
url += "&field1=";
url += field1;
url += "&field2=";
url += field2;
url += "&field3=";
url += field3;
Serial.println("Sending to ThingSpeak: " + url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
delay(1000);
Serial.println("Data sent to ThingSpeak");
} else {
Serial.println("Failed to connect to ThingSpeak");
}
client.stop();
}
void loop() {
float distance1 = readDistance(TRIG_PIN1, ECHO_PIN1);
float distance2 = readDistance(TRIG_PIN2, ECHO_PIN2);
float distance3 = readDistance(TRIG_PIN3, ECHO_PIN3);
bool isNearby1 = distance1 > 200;
digitalWrite(LEDPIN1, isNearby1);
bool isNearby2 = distance2 > 200;
digitalWrite(LEDPIN2, isNearby2);
bool isNearby3 = distance3 > 200;
digitalWrite(LEDPIN3, isNearby3);
sendToThingSpeak(isNearby1, isNearby2, isNearby3);
Serial.print("Parking 1: ");
Serial.println(isNearby1 ? "Available" : "Occupied");
Serial.print("Parking 2: ");
Serial.println(isNearby2 ? "Available" : "Occupied");
Serial.print("Parking 3: ");
Serial.println(isNearby3 ? "Available" : "Occupied");
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawStr(0, 20, "SMART PARKING");
// Display parking status
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0, 40);
u8g2.print("Parking 1: ");
u8g2.print(isNearby1 ? "Available" : "Occupied");
u8g2.setCursor(0, 50);
u8g2.print("Parking 2: ");
u8g2.print(isNearby2 ? "Available" : "Occupied");
u8g2.setCursor(0, 60);
u8g2.print("Parking 3: ");
u8g2.print(isNearby3 ? "Available" : "Occupied");
u8g2.sendBuffer();
delay(1500);
}