#include <WiFi.h>
#include <FirebaseESP32.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define WIFI_SSID "Haashim"
#define WIFI_PASSWORD "aslam2608"
#define FIREBASE_HOST "https://parksense-3c095-default-rtdb.asia-southeast1.firebasedatabase.app/"
#define FIREBASE_AUTH "" // empty for now
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
int ledPins[5] = {18, 19, 23, 5, 4};
int buttonPins[5] = {14, 27, 26, 25, 33};
int slotStatus[5] = {0, 0, 0, 0, 0};
FirebaseData fbdo;
void setup() {
Serial.begin(115200);
for (int i = 0; i < 5; i++) {
pinMode(ledPins[i], OUTPUT);
pinMode(buttonPins[i], INPUT_PULLUP);
}
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
while (1);
}
display.clearDisplay();
display.display();
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" Connected!");
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
}
void loop() {
for (int i = 0; i < 5; i++) {
if (digitalRead(buttonPins[i]) == LOW) {
slotStatus[i] = !slotStatus[i];
delay(300);
}
digitalWrite(ledPins[i], slotStatus[i]);
}
// Update OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
for (int i = 0; i < 5; i++) {
display.setCursor(0, i * 10);
display.print("Slot ");
display.print(i + 1);
display.print(": ");
display.print(slotStatus[i] ? "OCC" : "FREE");
}
display.display();
// Update Firebase
if (Firebase.ready()) {
for (int i = 0; i < 5; i++) {
String path = "parkingAreas/area1/slot" + String(i + 1);
Firebase.setString(fbdo, path, slotStatus[i] ? "occupied" : "free");
}
}
delay(2000);
}