Pendahuluan — Cloud Tanpa Server Sendiri
Sejauh ini Seri 2 mengandalkan broker MQTT sendiri (Mosquitto #16) atau web server lokal. Itu bagus untuk kontrol penuh — tapi butuh VPS/Raspberry Pi yang selalu online.
Firebase Realtime Database menawarkan backend cloud Google: ESP32 cukup push JSON lewat HTTPS, data langsung tersedia di console atau app mobile. Artikel Jalur E ini melengkapi PlatformIO (#29) — cocok untuk prototipe cepat tanpa maintain server.
Prasyarat: Sudah bisa koneksi WiFi ESP32 (#4), baca DHT22 (#5), dan paham perbedaan push vs pull di REST vs MQTT (#20).
Firebase vs MQTT vs REST — Kapan Pakai?
| Pendekatan | Cocok untuk | Contoh Seri 2 |
|---|---|---|
| MQTT + broker sendiri | Kontrol penuh, banyak device, offline LAN | #7, Grafana #19 |
| REST / HTTP | Request-response, API sederhana | Web server #6 |
| Firebase Realtime DB | Prototipe cloud, sync real-time ke app | Artikel ini (#30) |
Firebase bukan pengganti MQTT untuk industri — latency dan biaya skala besar perlu dipertimbangkan. Tapi untuk belajar cloud IoT atau dashboard mobile cepat, Firebase sangat praktis.
Arsitektur Project
┌─────────────┐ WiFi/HTTPS ┌──────────────────────┐
│ ESP32 │ ──────────────────► │ Firebase Realtime DB │
│ + DHT22 │ JSON push │ /kodingindonesia/... │
└─────────────┘ └──────────┬───────────┘
│
┌──────────▼───────────┐
│ Console / App / Web │
└────────────────────────┘
Node ESP32 membaca sensor, format JSON (dengan timestamp dari NTP #34 jika perlu), lalu set() ke path database.
Buat Project di Firebase Console
- Buka console.firebase.google.com → Add project
- Nama:
kindo-esp32-demo(contoh) - Nonaktifkan Google Analytics jika hanya untuk lab
- Build → Realtime Database → Create Database
- Pilih region dekat Indonesia (mis.
asia-southeast1) - Mode awal: locked — kita atur rules manual
Catat Database URL (contoh format):
https://GANTI_PROJECT_ID-default-rtdb.asia-southeast1.firebasedatabase.app
Di Project settings → General, salin Web API Key — jangan commit ke Git publik.
Authentication — Email/Password
Untuk ESP32, pola umum adalah Firebase Authentication dengan akun layanan khusus device:
- Build → Authentication → Get started → Email/Password → Enable
- Tambah user:
device-esp32@contoh.local/ password kuat - ESP32 login sekali saat boot, dapat token, lalu tulis ke Realtime DB
Placeholder di sketch (ganti sebelum upload):
GANTI_FIREBASE_API_KEYGANTI_FIREBASE_DATABASE_URLGANTI_FIREBASE_USER_EMAILGANTI_FIREBASE_USER_PASSWORD
Realtime Database Rules
Rules produksi minimal — hanya user terautentikasi yang boleh tulis path sensor:
{
"rules": {
"kodingindonesia": {
"esp32": {
"dht22": {
"data": {
".read": "auth != null",
".write": "auth != null"
}
}
}
}
}
}
Pro tip: Jangan pakai
".read": true, ".write": truedi production — data sensor bisa dibaca/ditulis siapa saja. Untuk lab 5 menit saja, lalu kunci rules.
Memahami Struktur Payload JSON
Payload yang dikirim ESP32 ke path /kodingindonesia/esp32/dht22/data sebaiknya konsisten dengan format MQTT Seri 2 — memudahkan tim yang sudah punya subscriber Python (#18) atau dashboard Grafana (#19) untuk membandingkan sumber data.
Field minimal yang disarankan:
temperature— float °C, satu desimal cukup untuk DHT22humidity— float % RHunix— epoch detik (contoh statis1782977400di artikel ini; produksi pakai NTP #34)iso— string ISO 8601 untuk debug manusia (2026-07-02T14:30:00)source— identitas device, mis.esp32atauesp32-greenhouse-01
Firebase menyimpan nilai sebagai string JSON di node leaf jika kamu pakai setString() — itu normal. Alternatif setJSON() memecah field menjadi child node; pilih satu pola dan dokumentasikan ke tim agar parser app mobile tidak bingung.
Jika suhu tiba-tiba null di console, cek Serial Monitor: biasanya DHT22 gagal baca (isnan) atau WiFi drop sehingga Firebase.ready() belum true. Pola retry sama seperti troubleshooting di artikel DHT22 (#5).
Library — Firebase_ESP_Client
Di Arduino IDE: Library Manager → cari Firebase ESP Client (Mobizt). Di PlatformIO (#29):
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
mobizt/Firebase ESP Client @ ^4.4
adafruit/DHT sensor library @ ^1.4
adafruit/Adafruit Unified Sensor @ ^1.1
Sketch ESP32 — WiFi + Firebase
#include <Arduino.h>
#include <WiFi.h>
#include <Firebase_ESP_Client.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define API_KEY "GANTI_FIREBASE_API_KEY"
#define DATABASE_URL "GANTI_FIREBASE_DATABASE_URL"
#define USER_EMAIL "GANTI_FIREBASE_USER_EMAIL"
#define USER_PASSWORD "GANTI_FIREBASE_USER_PASSWORD"
const char* ssid = "GANTI_NAMA_WIFI";
const char* password = "GANTI_PASSWORD_WIFI";
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
void setup() {
Serial.begin(115200);
dht.begin();
delay(2000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
Serial.println("\nWiFi OK");
config.api_key = API_KEY;
config.database_url = DATABASE_URL;
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
}
void loop() {
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) { delay(5000); return; }
String json = "{\"temperature\":" + String(t, 1) +
",\"humidity\":" + String(h, 1) +
",\"unix\":1782977400" +
",\"iso\":\"2026-07-02T14:30:00\"" +
",\"source\":\"esp32\"}";
if (Firebase.RTDB.setString(&fbdo, "/kodingindonesia/esp32/dht22/data", json)) {
Serial.println("Firebase OK");
} else {
Serial.println(fbdo.errorReason());
}
delay(30000);
}
Path /kodingindonesia/esp32/dht22/data konsisten dengan topic MQTT Seri 2 — memudahkan migrasi mental dari MQTT #7.
Verifikasi di Firebase Console
- Buka Realtime Database → tab Data
- Refresh — muncul tree
kodingindonesia → esp32 → dht22 → data - Klik node
data— JSON suhu/kelembaban terlihat - Opsional: export JSON untuk bandingkan dengan payload MQTT di broker
192.168.1.50
Hybrid: Firebase + MQTT (Konsep)
Di lapangan besar, banyak tim memakai keduanya:
- MQTT lokal untuk automasi cepat (relay, PIR #24)
- Firebase untuk app mobile penjaga kebun
- Gateway seperti LoRa #28 tetap ke Mosquitto; cloud bridge terpisah
Baca #20 sebelum memutuskan satu stack saja.
Keamanan & Produksi
- Jangan commit
GANTI_FIREBASE_*— pakaibuild_flagsPlatformIO atau NVS (#12) - Aktifkan rules ketat; rotasi password device berkala
- Untuk TLS mendalam di ESP32, pelajari MQTT TLS (#17) — Firebase client sudah HTTPS
- Pantau quota Spark (free tier) di console
Estimasi Biaya
| Item | Biaya |
|---|---|
| Firebase Spark (free tier) | Rp 0 untuk prototipe kecil |
| ESP32 + DHT22 (sudah punya) | Rp 0 tambahan |
| Skala produksi / banyak GB transfer | Upgrade Blaze — cek kalkulator Firebase |
Checklist Sebelum Go-Live
- Rules database bukan mode test terbuka?
- Credential device bukan password pribadi kamu?
- Path data konsisten dengan dokumentasi tim?
- Interval publish tidak terlalu agresif (hemat quota)?
- Ada rencana backup jika vendor lock-in jadi masalah?
Uji Coba
- Buat project Firebase + Realtime DB
- Enable Email/Password auth + user device
- Upload sketch — Serial: WiFi OK + Firebase OK
- Data muncul di console dalam 30 detik
- Ubah rules ke locked — pastikan tanpa auth gagal write
Membaca Data dari Web (Tanpa App Native)
Firebase Console sudah cukup untuk lab. Untuk dashboard sederhana, kamu bisa pakai Firebase Hosting + JavaScript SDK — di luar scope artikel ini, tapi konsepnya: web page subscribe onValue() ke path /kodingindonesia/esp32/dht22/data dan update DOM setiap ada perubahan.
Alternatif: export berkala ke MySQL (#18) jika tim sudah punya pipeline SQL — Firebase jadi buffer real-time, ETL ke histori.
PlatformIO vs Arduino IDE untuk Firebase
Library Firebase_ESP_Client cukup besar — compile pertama bisa 2–5 menit. Di project PlatformIO (#29), pin versi di lib_deps agar build reproducible:
lib_deps =
mobizt/Firebase ESP Client @ 4.4.14
adafruit/DHT sensor library @ ^1.4
Partition scheme ESP32: jika sketch besar, pilih Huge APP di board menu atau tambahkan board_build.partitions = huge_app.csv di PlatformIO.
Migrasi Mental dari MQTT ke Firebase
Jika kamu sudah punya node MQTT yang publish ke kodingindonesia/esp32/dht22/data, berikut peta konsepnya:
| MQTT (#7) | Firebase (#30) |
|---|---|
Broker 192.168.1.50 | Database URL Google |
| Topic path | Node path (sama: /kodingindonesia/esp32/dht22/data) |
mosquitto_pub / subscriber | Console / SDK onValue |
User kindo_esp32 + GANTI_PASSWORD_MQTT | Email device + rules auth |
| Retained / LWT (#17) | Last value tetap di node sampai overwrite |
Node yang sudah jalan di MQTT tidak perlu dimatikan — Firebase bisa jadi saluran paralel untuk app mobile, sementara automasi relay tetap lewat broker lokal. Pola ini umum di smart home skala rumah sebelum tim memutuskan satu vendor cloud.
Untuk timestamp live (bukan contoh statis 1782977400), integrasikan NTP #34 di setup() sebelum loop publish — payload JSON jadi siap untuk grafik Grafana (#19) maupun audit trail.
FAQ Singkat
- Firebase menggantikan Grafana?
- Tidak — Grafana (#19) untuk grafik histori MQTT; Firebase untuk sync real-time ke app.
- Bisa pakai Arduino IDE tanpa PlatformIO?
- Ya — library sama; #29 opsional tapi disarankan untuk project besar.
- Perlu kartu kredit?
- Spark plan gratis tanpa kartu untuk belajar; Blaze butuh billing untuk beberapa fitur.
Tips & Troubleshooting
- auth/network-request-failed: Cek SSID 2.4 GHz, bukan guest network terisolasi
- Permission denied: Rules atau token auth salah — login ulang device user di Authentication tab
- DHT22 nan: Ulangi
delay(2000)setelahdht.begin()seperti #5 - Token expired: Panggil
Firebase.ready()di loop atau refresh sesuai docs library - Heap low / crash: Kurangi buffer SSL — matikan fitur Firebase yang tidak dipakai; pertimbangkan partition Huge APP
- Data tidak update: Pastikan path diawali
/dan tidak ada typodht22vsdht-22 - Quota exceeded: Perpanjang interval
delay(30000)menjadi 60–120 detik untuk prototipe
Untuk debug rules tanpa upload ulang sketch, gunakan tab Rules Playground di Firebase Console — simulasikan read/write dengan UID user device sebelum deploy rules ke production. Simpan screenshot hasil simulasi di dokumentasi tim agar onboarding anggota baru lebih cepat.
Langkah Selanjutnya (Jalur E)
- FreeRTOS (#31): task terpisah sensor / WiFi / cloud
- NTP (#34) — timestamp live, bukan contoh statis
- Python → MySQL (#18) — arsip SQL paralel cloud
- OTA (#15) — update firmware tanpa USB
- Capstone greenhouse (#39)
Dengan Firebase, ESP32 kamu punya jalur cepat ke cloud — tanpa sewa VPS dulu. Lanjutkan Seri 2 di halaman artikel Koding Indonesia.