Yarana Iot Guru
Published © MIT

Build a smart home using ESP32 and Firebase Realtime Databas

Smart home automation using ESP32 and Firebase with real-time sync between app, web, and physical switches.

BeginnerShowcase (no instructions)8 hours87
Build a smart home using ESP32 and Firebase Realtime Databas

Things used in this project

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

1️⃣ ESP32 Firmware Code (Main & Mandatory)

C/C++
1️⃣ ESP32 Firmware Code (Main & Mandatory)

πŸ‘‰ Purpose:

ESP32 ko WiFi se connect karna

Firebase Realtime Database se data read/write

Relay control

Manual switch synchronization

πŸ”§ ESP32 Arduino Code
#include <WiFi.h>
#include <FirebaseESP32.h>

/* ========= WIFI DETAILS ========= */
#define WIFI_SSID "YOUR_WIFI_NAME"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"

/* ========= FIREBASE DETAILS ========= */
#define FIREBASE_HOST "your-project-id.firebaseio.com"
#define FIREBASE_AUTH "YOUR_DATABASE_SECRET"

/* ========= FIREBASE OBJECT ========= */
FirebaseData fbdo;

/* ========= PIN CONFIG ========= */
int relayPins[]   = {23, 22, 21, 19};
int switchPins[]  = {32, 33, 25, 26};

void setup() {
  Serial.begin(115200);

  // Relay & Switch setup
  for (int i = 0; i < 4; i++) {
    pinMode(relayPins[i], OUTPUT);
    pinMode(switchPins[i], INPUT_PULLUP);
    digitalWrite(relayPins[i], LOW);
  }

  // WiFi Connect
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  // Firebase Init
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.reconnectWiFi(true);
}

void loop() {

  // Firebase β†’ Relay
  for (int i = 0; i < 4; i++) {
    String path = "/devices/device01/relay" + String(i + 1);
    if (Firebase.getInt(fbdo, path)) {
      digitalWrite(relayPins[i], fbdo.intData());
    }
  }

  // Manual Switch β†’ Firebase
  for (int i = 0; i < 4; i++) {
    if (digitalRead(switchPins[i]) == LOW) {
      String path = "/devices/device01/relay" + String(i + 1);
      Firebase.setInt(fbdo, path, !digitalRead(relayPins[i]));
      delay(300);
    }
  }
}

2️⃣ Firebase Realtime Database Structure (JSON)

C/C++
πŸ‘‰ Purpose:
Common data layer for ESP32, App & Web
{
  "devices": {
    "device01": {
      "relay1": 0,
      "relay2": 0,
      "relay3": 0,
      "relay4": 0
    }
  }
}

3️⃣ Web Dashboard Code (HTML + JavaScript)

C/C++
πŸ‘‰ Purpose:
Browser se relay control + live status

πŸ”§ HTML + JS (Firebase Web SDK)
<!DOCTYPE html>
<html>
<head>
  <title>Home Automation Dashboard</title>
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-database.js"></script>
</head>
<body>

<h2>ESP32 Home Automation</h2>

<button onclick="toggleRelay(1)">Relay 1</button>
<button onclick="toggleRelay(2)">Relay 2</button>
<button onclick="toggleRelay(3)">Relay 3</button>
<button onclick="toggleRelay(4)">Relay 4</button>

<script>
  var firebaseConfig = {
    apiKey: "API_KEY",
    databaseURL: "https://your-project-id.firebaseio.com"
  };
  firebase.initializeApp(firebaseConfig);
  var db = firebase.database();

  function toggleRelay(relay) {
    var ref = db.ref("devices/device01/relay" + relay);
    ref.once("value", snap => {
      ref.set(snap.val() === 1 ? 0 : 1);
    });
  }
</script>

</body>
</html>

Credits

Yarana Iot Guru
48 projects β€’ 25 followers
Yarana Iot GuruYarana IoT Guru: Arduino,ESP32, GSM, NodeMCU & more.Projects, Tutorials & App Development. Innovate with us!
Thanks to Yarana IoT Guru.

Comments