8. Integrasi IoT dengan Firebase untuk Data Logging

Sekilas tentang Internet of Things (IoT) Integrasi IoT dengan Firebase untuk Data Logging
ESP32 Firebase WiFi

Integrasi IoT dengan Firebase untuk Data Logging

Panduan lengkap menghubungkan ESP32 dengan Firebase Realtime Database untuk menyimpan dan memantau data sensor secara real-time dari mana saja.

Dipublikasikan: 11 Januari 2026 • Kategori: IoT, Tutorial, Firebase
Baca Selengkapnya
FAR
Faqih Al Rasyid
Mahasiswa Informatika IoT Semester 7 | Universitas Respati Yogyakarta

🎯 Apa itu Firebase dan Mengapa Penting untuk IoT?

Firebase adalah platform cloud yang dikembangkan oleh Google, menyediakan berbagai layanan backend seperti database real-time, authentication, cloud storage, dan hosting. Untuk project IoT, Firebase Realtime Database menjadi pilihan populer karena kemampuannya menyinkronkan data secara instant ke semua client yang terhubung.

💡 Mengapa Firebase?
Berbeda dengan database tradisional yang perlu polling untuk update, Firebase menggunakan WebSocket yang memungkinkan push notification real-time. Ketika sensor mengirim data baru, dashboard web/mobile Anda langsung terupdate tanpa refresh!

Real-time Sync

Data tersinkronisasi instant ke semua device

🔒

Security Rules

Kontrol akses data dengan rules yang flexible

📊

Scalable

Handle ribuan request per detik dengan mudah

🆓

Free Tier

Gratis untuk project kecil dan pembelajaran

🛠️ Persiapan: Yang Anda Butuhkan

Hardware:

  • ESP32 DevKit (Rp 50.000 - 80.000)
  • Sensor DHT11 atau DHT22 untuk temperature & humidity (Rp 15.000 - 40.000)
  • Kabel USB Micro untuk programming
  • Breadboard & Jumper Wire (optional, untuk prototyping)

Software & Akun:

  • Arduino IDE (atau PlatformIO)
  • ESP32 Board Package terinstall
  • Library Firebase ESP Client by Mobizt
  • Library DHT Sensor by Adafruit
  • Akun Google untuk Firebase Console
  • Koneksi WiFi yang stabil

📋 Step-by-Step Tutorial

Langkah 1: Setup Firebase Project

  1. Buka Firebase Console
    Kunjungi console.firebase.google.com dan login dengan akun Google Anda.
  2. Create New Project
    Klik "Add project" atau "Tambah project", beri nama (contoh: "IoT-DataLogger"), lanjutkan setup (bisa disable Google Analytics jika tidak perlu).
  3. Aktifkan Realtime Database
    Di sidebar, pilih "Build" → "Realtime Database" → "Create Database". Pilih location terdekat (Asia Southeast1 - Singapore), lalu pilih mode "Test mode" untuk awal (data public untuk 30 hari).
  4. Catat Database URL
    Setelah dibuat, Anda akan melihat URL database seperti:
    https://iot-datalogger-xxxxx.firebaseio.com/
    Simpan URL ini!
  5. Generate API Key
    Pergi ke Project Settings (icon gear) → "Service accounts" → "Database secrets" → "Show" atau langsung ke "Project settings" → bagian "Web API Key". Copy API Key yang ditampilkan.
⚠️ Penting - Security Rules:
Test mode membuat database public selama 30 hari. Untuk production, Anda harus setup security rules yang proper. Contoh basic rules:
{ "rules": { ".read": "auth != null", ".write": "auth != null" } }

Langkah 2: Wiring Hardware

Hubungkan sensor DHT11 ke ESP32 dengan skema berikut:

  • DHT11 VCC → ESP32 3.3V
  • DHT11 GND → ESP32 GND
  • DHT11 DATA → ESP32 GPIO 4 (atau pin lain yang Anda pilih)
  • Tambahkan resistor pull-up 10kΩ antara VCC dan DATA pin (optional tapi recommended)
💡 Tips Wiring:
Jika DHT11 Anda memiliki 3 pin (bukan 4), biasanya sudah include resistor pull-up internal. Cek datasheet module Anda untuk memastikan.

Langkah 3: Install Library Arduino

Di Arduino IDE:

  1. Buka Library Manager
    Sketch → Include Library → Manage Libraries
  2. Install Firebase ESP Client
    Search "Firebase ESP Client" by Mobizt → Install (pilih yang versi terbaru)
  3. Install DHT Sensor Library
    Search "DHT sensor library" by Adafruit → Install (akan otomatis install dependency "Adafruit Unified Sensor")

Langkah 4: Upload Code ke ESP32

Copy dan paste code berikut ke Arduino IDE. PENTING: Ganti nilai WiFi credentials, API Key, dan Database URL dengan milik Anda!

📄 firebase_datalogger.ino
#include <WiFi.h> #include <Firebase_ESP_Client.h> #include <DHT.h> // Provide token generation process info #include "addons/TokenHelper.h" // Provide RTDB payload printing info #include "addons/RTDBHelper.h" // ===== KONFIGURASI - GANTI DENGAN DATA ANDA! ===== #define WIFI_SSID "NamaWiFiAnda" // Nama WiFi #define WIFI_PASSWORD "PasswordWiFi" // Password WiFi #define API_KEY "AIzaSyXXXXXXXXXXXXXXXXX" // Web API Key dari Firebase #define DATABASE_URL "https://iot-datalogger-xxxxx.firebaseio.com/" // Database URL // Konfigurasi DHT Sensor #define DHTPIN 4 // Pin data DHT11 connected ke GPIO 4 #define DHTTYPE DHT11 // Tipe sensor (DHT11 atau DHT22) // ===== INISIALISASI ===== DHT dht(DHTPIN, DHTTYPE); FirebaseData fbdo; FirebaseAuth auth; FirebaseConfig config; unsigned long sendDataPrevMillis = 0; bool signupOK = false; void setup() { Serial.begin(115200); dht.begin(); // Connect ke WiFi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("Connecting to WiFi"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(300); } Serial.println(); Serial.print("Connected! IP: "); Serial.println(WiFi.localIP()); // Setup Firebase config.api_key = API_KEY; config.database_url = DATABASE_URL; // Sign up (anonymous authentication) if (Firebase.signUp(&config, &auth, "", "")) { Serial.println("Firebase signup OK"); signupOK = true; } else { Serial.printf("Signup failed: %s\n", config.signer.signupError.message.c_str()); } // Assign callback function untuk token generation task config.token_status_callback = tokenStatusCallback; Firebase.begin(&config, &auth); Firebase.reconnectWiFi(true); } void loop() { // Kirim data setiap 10 detik if (Firebase.ready() && signupOK && (millis() - sendDataPrevMillis > 10000 || sendDataPrevMillis == 0)) { sendDataPrevMillis = millis(); // Baca sensor float temperature = dht.readTemperature(); float humidity = dht.readHumidity(); // Check jika pembacaan gagal if (isnan(temperature) || isnan(humidity)) { Serial.println("Failed to read from DHT sensor!"); return; } // Print ke Serial Monitor Serial.println("----------------------------------------"); Serial.printf("Temperature: %.2f °C\n", temperature); Serial.printf("Humidity: %.2f %%\n", humidity); // Get timestamp (epoch time) unsigned long timestamp = millis() / 1000; // Kirim Temperature ke Firebase String tempPath = "/SensorData/temperature"; if (Firebase.RTDB.setFloat(&fbdo, tempPath.c_str(), temperature)) { Serial.println("Temperature sent successfully"); } else { Serial.println("Failed to send temperature"); Serial.println("Reason: " + fbdo.errorReason()); } // Kirim Humidity ke Firebase String humPath = "/SensorData/humidity"; if (Firebase.RTDB.setFloat(&fbdo, humPath.c_str(), humidity)) { Serial.println("Humidity sent successfully"); } else { Serial.println("Failed to send humidity"); Serial.println("Reason: " + fbdo.errorReason()); } // Kirim Timestamp String timePath = "/SensorData/lastUpdate"; if (Firebase.RTDB.setInt(&fbdo, timePath.c_str(), timestamp)) { Serial.println("Timestamp sent successfully"); } else { Serial.println("Failed to send timestamp"); } // BONUS: Simpan history dengan timestamp unik String historyPath = "/History/" + String(timestamp); FirebaseJson json; json.set("temperature", temperature); json.set("humidity", humidity); json.set("timestamp", timestamp); if (Firebase.RTDB.setJSON(&fbdo, historyPath.c_str(), &json)) { Serial.println("History logged successfully"); } else { Serial.println("Failed to log history"); } Serial.println("----------------------------------------"); } }

Langkah 5: Upload dan Monitor

  1. Pastikan Setting Board Benar
    Tools → Board → ESP32 Dev Module (atau sesuai board Anda)
    Tools → Port → Pilih port COM yang sesuai
  2. Upload Code
    Klik tombol Upload (ikon panah kanan) dan tunggu hingga selesai
  3. Buka Serial Monitor
    Tools → Serial Monitor (atau Ctrl+Shift+M)
    Set baud rate ke 115200
  4. Lihat Output
    Anda akan melihat ESP32 connect ke WiFi, kemudian mulai mengirim data sensor setiap 10 detik
  5. Cek Firebase Console
    Buka Realtime Database di Firebase Console, Anda akan melihat data muncul di path "/SensorData" dan "/History"
🎉 Selamat!
Jika Anda melihat data temperature dan humidity muncul di Firebase Console, berarti integrasi berhasil! ESP32 Anda sekarang sudah bisa logging data sensor ke cloud secara real-time.

📊 Struktur Data di Firebase

Dengan code di atas, data akan tersimpan dengan struktur seperti ini:

{ "SensorData": { "temperature": 28.50, "humidity": 65.20, "lastUpdate": 1234567890 }, "History": { "1234567890": { "temperature": 28.50, "humidity": 65.20, "timestamp": 1234567890 }, "1234567900": { "temperature": 28.45, "humidity": 65.30, "timestamp": 1234567900 } } }

Penjelasan:

  • /SensorData - Menyimpan data sensor terkini (current value), selalu terupdate
  • /History - Menyimpan log historical data dengan timestamp sebagai key, untuk analisis data nanti

🎨 Membuat Dashboard Web Sederhana

Setelah data masuk ke Firebase, Anda bisa membuat dashboard web untuk memvisualisasikan data. Berikut contoh HTML sederhana:

📄 dashboard.html (Buka di browser)
<!DOCTYPE html> <html> <head> <title>IoT Dashboard</title> <style> body { font-family: Arial; text-align: center; padding: 50px; background: #f0f0f0; } .card { background: white; padding: 30px; border-radius: 10px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); display: inline-block; margin: 20px; } .value { font-size: 48px; font-weight: bold; color: #0f5b8a; } .label { font-size: 18px; color: #666; } </style> </head> <body> <h1>IoT Monitoring Dashboard</h1> <div class="card"> <div class="label">Temperature</div> <div class="value" id="temp">--</div> <div class="label">°C</div> </div> <div class="card"> <div class="label">Humidity</div> <div class="value" id="hum">--</div> <div class="label">%</div> </div> <script type="module"> import { initializeApp } from 'https://www.gstatic.com/firebasejs/10.7.1/firebase-app.js'; import { getDatabase, ref, onValue } from 'https://www.gstatic.com/firebasejs/10.7.1/firebase-database.js'; // GANTI dengan config Firebase Anda! const firebaseConfig = { apiKey: "AIzaSyXXXXXXXXXXXXXXXXX", databaseURL: "https://iot-datalogger-xxxxx.firebaseio.com" }; const app = initializeApp(firebaseConfig); const db = getDatabase(app); // Listen untuk perubahan data real-time const tempRef = ref(db, 'SensorData/temperature'); const humRef = ref(db, 'SensorData/humidity'); onValue(tempRef, (snapshot) => { document.getElementById('temp').innerText = snapshot.val().toFixed(2); }); onValue(humRef, (snapshot) => { document.getElementById('hum').innerText = snapshot.val().toFixed(2); }); </script> </body> </html>
💡 Cara Menggunakan Dashboard:
1. Copy code HTML di atas ke file baru (dashboard.html)
2. Ganti firebaseConfig dengan API Key dan Database URL Anda
3. Buka file HTML di browser (Chrome/Firefox)
4. Dashboard akan otomatis update setiap kali ESP32 kirim data baru!

🚀 Pengembangan Lanjutan

1. Menambah Sensor Lain

Komentar

Postingan populer dari blog ini

1. Menghubungkan Dunia Fisik dan Digital

12. MQTT vs HTTP: Protocol Mana yang Tepat untuk IoT