Firebase Nedir ve Neden IoT Projelerinde Kullanılır?
Firebase, Google tarafından geliştirilen bir mobil ve web uygulama geliştirme platformudur. Geliştiricilerin arka uç (backend) işlerini kolaylaştırarak, veri depolama, kimlik doğrulama, gerçek zamanlı veritabanı, bildirim gönderme ve daha birçok özelliği bulut tabanlı olarak sunar. Bu sayede, sunucu yönetimi veya karmaşık arka uç kodlama derdi olmadan hızlıca uygulama geliştirebilirsiniz.
IoT projeleri için Firebase’in temel avantajları şunlardır:
- Gerçek Zamanlı Veritabanı (Realtime Database): Cihazlar arasında anlık veri senkronizasyonu sağlar. Bir cihaz veri yazdığında, diğer bağlı cihazlar (ESP32’ler, mobil uygulamalar, web arayüzleri) bu değişikliği saniyenin altında bir hızda otomatik olarak algılar ve güncellenir. Bu, gecikmesiz kontrol ve izleme için kritik öneme sahiptir.
- Kolay Entegrasyon: ESP32 gibi mikrodenetleyiciler için geliştirilmiş kütüphaneler (Firebase-ESP-Client gibi) sayesinde kolayca Firebase’e bağlanabilir ve veri işlemleri yapabilirsiniz.
- Ölçeklenebilirlik: Küçük projelerden büyük ölçekli uygulamalara kadar ölçeklenebilir bir yapı sunar. Cihaz sayınız veya veri miktarınız arttığında altyapı konusunda endişelenmenize gerek kalmaz.
- Kimlik Doğrulama (Authentication): Kullanıcılarınızı farklı yöntemlerle (e-posta, Google, anonim vb.) kimliklerini doğrulamasını sağlar. IoT cihazları için genellikle anonim kimlik doğrulama tercih edilir, çünkü cihazların kullanıcı adı ve parola tutması pratik değildir.
- Ücretsiz Katman (Spark Plan): Başlangıç ve küçük ölçekli projeler için yeterli kaynakları ücretsiz olarak sunar.
Firebase Kurulumu: Adım Adım Rehber
Firebase konsolu üzerinden projenizi kurmak oldukça basittir. Aşağıdaki adımları takip edin:
- Firebase Konsoluna Erişim:
- Bir web tarayıcısından Firebase Console adresine gidin.
- Google hesabınızla oturum açın. Eğer bir Google hesabınız yoksa, yeni bir tane oluşturmanız gerekecektir.
- Yeni Proje Oluşturma:
- Konsol ana sayfasında “Proje ekle” butonuna tıklayın.
- Projenize anlamlı bir isim verin (örneğin:
ESP32_Firebase_Kontrol
). - Google Analytics’i etkinleştirip etkinleştirmemeyi seçebilirsiniz. Bu proje için gerekli değildir, bu yüzden isterseniz devre dışı bırakabilirsiniz.
- “Proje Oluştur” butonuna tıklayın. Projenizin hazırlanması birkaç dakika sürebilir.

- Anonymous Authentication Özelliğini Etkinleştirme (Önce API Key almadan!):
- Projeniz oluşturulduktan sonra sol menüden “Derle” altında “Authentication” seçeneğine tıklayın.
- “Başlayın” butonuna tıklayın.
- “Oturum Açma Yöntemi” sekmesine gidin.
- “Anonim” seçeneğini bulun ve üzerine tıklayın.
- “Etkinleştir” anahtarını açık konuma getirin ve “Kaydet” butonuna tıklayın. Bu, ESP32’nin kimlik doğrulama gerektirmeden Firebase’e bağlanmasına olanak tanır ve API key’i almanız için bu adımın tamamlanmış olması önemlidir.



- API Key Bilgisini Alma:
- Anonim kimlik doğrulama etkinleştirildikten sonra, projenizin ana sayfasına geri dönün (sol üst köşedeki proje adına tıklayarak veya sol üstteki ev simgesine tıklayarak).
- Sol menüden “Proje ayarlarına git” (dişli çark simgesi) tıklayın.
- “Genel” sekmesinde, “Web API anahtarı” kısmında API anahtarınızı (API Key) göreceksiniz. Bu anahtarı kopyalayın. Bu anahtar, ESP32’nizin Firebase projenizle iletişim kurması için gereklidir.

- Realtime Database’i Aktif Etme:
- Sol menüden “Derle” altında “Realtime Database” seçeneğine tıklayın.
- “Realtime Database oluştur” butonuna tıklayın.
- Güvenlik kuralları için size iki seçenek sunulacaktır: “Test modunda başlat” veya “Kilitli modda başlat”. “Test modunda başlat” seçeneğini seçin. Bu, herkese açık okuma ve yazma izinleri verecektir ki bu da başlangıç için işimizi kolaylaştıracaktır. Daha sonra güvenlik kurallarını düzenleyeceğiz.
- “Etkinleştir” butonuna tıklayın.



- Gerekli Kuralları Tanımlama:
- Realtime Database sayfasında “Kurallar” sekmesine gidin.
- Aşağıdaki kuralları göreceksiniz. Eğer “Test modunda başlat” seçeneğini seçtiyseniz, zaten bu şekilde olacaktır:
{ "rules": { ".read": true, ".write": true } }

- Bu kurallar, veritabanınızdaki tüm verilere herkesin okuma ve yazma izni olduğu anlamına gelir. Küçük projeler ve testler için uygun olsa da, gerçek uygulamalarda daha kısıtlayıcı kurallar kullanmalısınız.
- Database URL Bilgisini Alma:
- Realtime Database sayfasında, sayfanın üst kısmında
https://<PROJE-ID>.firebaseio.com/
şeklinde görünecektir.<PROJE-ID>
kısmını kendi proje ID’niz ile değiştirmeniz gerekmektedir. Bu URL’yi de kopyalayın. Bu URL, ESP32’nizin hangi veritabanına bağlanacağını belirtir.
- Realtime Database sayfasında, sayfanın üst kısmında

Firebase Realtime Database Yapısı
Projemiz için Realtime Database yapısını basit tutacağız. Potansiyometre değerini parlaklik
adında bir anahtar altında depolayacağız.
/parlaklik → integer (0-255 arası)
Bu yapı, verici ESP32’nin parlaklik
anahtarına değer yazmasını, alıcı ESP32’nin ise bu anahtardan değer okumasını sağlayacaktır.
🌐 ESP32 ve Firebase: Basit Bir IoT Projesi
Bu proje, ESP32 kartlarının Firebase ile nasıl konuşacağını basitçe anlatır. Temel olarak, fiziksel bir şeyden aldığımız veriyi internete gönderip, başka bir fiziksel şeyi kontrol etmek için kullanacağız.
⚙️ Proje Nasıl Çalışıyor?
Projemiz iki ESP32 kartı ve internetteki bir “veri alanı” olan Firebase’i kullanır:
- ⬆️ Veriyi Gönderen ESP32:
- Bu ESP32, bir potansiyometreden gelen değeri okur. Pot’u çevirdikçe farklı bir sayı alır.
- Okuduğu bu sayıyı internetteki Firebase’e gönderir.
- Önemli nokta: Sayı sadece değiştiğinde gönderilir. Bu, internet trafiğini ve Firebase kullanımını azaltır, her şeyin daha hızlı olmasını sağlar.
- ⬇️ Veriyi Alan ESP32:
- Bu ESP32, Firebase’de bekler ve “parlaklık” adını verdiğimiz sayıyı dinler.
- Firebase’deki parlaklık sayısı değiştiği an, bu ESP32 yeni sayıyı hemen alır.
- Aldığı bu sayıya göre kendisine bağlı bir LED’in parlaklığını ayarlar. Eğer gönderilen sayı yüksekse LED daha parlak, düşükse daha sönük yanar. LED de sadece yeni bir sayı geldiğinde parlaklığını değiştirir, boşuna yanıp sönmez.
☁️ Firebase Neden Önemli?
Firebase, Google’ın bize internet üzerinden kolayca veri saklama ve paylaşma imkanı sunan bir hizmetidir. Bu projede Firebase, iki ESP32 kartı arasında veri köprüsü kurar:
- ⚡ Gerçek Zamanlı Veri Alanı: Firebase, gönderilen veriyi anında saklar ve diğer ESP32 gibi onu dinleyen herkese anında ulaştırır. Böylece potansiyometreyi çevirir çevirmez LED’in parlaklığı değişir.
- 🔗 Basit Bağlantı: ESP32 gibi cihazların internete bağlanıp veri göndermesi veya alması için özel bir şifreye veya kullanıcı adına ihtiyaç duymamasını sağlar. Bu sayede işimiz kolaylaşır.
- 🔑 Anahtar Bilgiler: Her Firebase projesinin özel bir kimliği (API anahtarı ve veritabanı adresi) vardır. ESP32’ler bu kimlikleri kullanarak doğru yere bağlanır.
🔌 Projeyi Denemek İçin Bağlantılar (Devre Şeması)
Bu projeyi yapmak için kabloları nasıl bağlayacağınızı basitçe anlatalım:

- ➡️ Verici Kart (Potansiyometre için):
- Potansiyometrenin orta bacağını ESP32’nin analog giriş pinlerinden birine (genellikle GPIO34) bağlayın.
- Diğer iki bacağını ESP32’deki 3.3V ve GND (toprak) pinlerine bağlayın.
- ⬅️ Alıcı Kart (LED için):
- LED’in uzun bacağını 220 Ohm’luk bir dirençle ESP32’nin PWM destekli bir pinine (örneğin GPIO2) bağlayın.
- LED’in kısa bacağını ESP32’nin GND (toprak) pinine bağlayın.
📲 ESP32 için Firebase ESP Client Kütüphanesi – Kurulum ve Temel Fonksiyonlar
ESP32 ile bulut tabanlı veri alışverişi yapmak istiyorsanız, Firebase mükemmel bir çözümdür. Mobizt tarafından geliştirilen Firebase ESP Client kütüphanesi, ESP32’nin Firebase Realtime Database ile güvenli ve hızlı bir şekilde iletişim kurmasını sağlar.
Bu makalede, bu kütüphanenin nasıl kurulacağını ve sık kullanılan temel fonksiyonlarını sade bir dille anlatıyoruz.
🔧 Kurulum
Firebase ESP Client kütüphanesini Arduino IDE’ye eklemek için aşağıdaki adımları izleyin:
- Arduino IDE’yi açın.
- Araçlar > Kütüphane Yöneticisi menüsüne girin.
- Arama kutusuna “
firebase arduino client library for esp8266 and esp32
” yazın. - Geliştirici olarak Mobizt olan kütüphaneyi bulun ve Yükle butonuna tıklayın.
- Aynı şekilde, veri işleme için gerekli olan
ArduinoJson
kütüphanesini de yükleyin.
Firebase kullanabilmek için ayrıca bir Firebase projesi oluşturmanız ve API anahtarınızı, veritabanı URL’nizi almanız gerekir. Bu bilgiler kod içinde yapılandırma sırasında kullanılacaktır.
🧰 Temel Fonksiyonlar
Aşağıda, bu kütüphanede en sık kullanılan temel fonksiyonları ve görevlerini kısa ve anlaşılır bir şekilde bulabilirsiniz:
Kategori | Fonksiyon | Açıklama |
---|---|---|
Bağlantı | Firebase.begin() | Firebase bağlantısını başlatır. |
Firebase.reconnectWiFi(true) | WiFi bağlantısı koparsa otomatik yeniden bağlanmayı sağlar. | |
config.api_key | Firebase API anahtarını tanımlar. | |
config.database_url | Firebase Realtime Database URL’sini belirtir. | |
auth.user.email / password | Firebase kimlik doğrulama ,bilgileri (opsiyonel). |
📋 Firebase ESP Client – Temel Fonksiyonlar 📝 Veri Yazma ────────────────────────────────────────────────────────────── setString() | String veri yazar setInt() | Tam sayı (integer) veri yazar setFloat() | Ondalıklı sayı (float) veri yazar setBool() | Boolean (true/false) veri yazar setJSON() | JSON yapısında çoklu veri yazar pushXXX() | Otomatik ID ile yeni veri ekler (XXX: veri türü) 🔍 Veri Okuma ────────────────────────────────────────────────────────────── getString() | String veri okur getInt() | Tam sayı veri okur getFloat() | Ondalıklı sayı veri okur getDouble() | Double türünde veri okur getBool() | Boolean veri okur getJSON() | JSON formatındaki veriyi okur ❌ Veri Silme ────────────────────────────────────────────────────────────── deleteNode() | Belirtilen yolu ve tüm alt verilerini siler 📡 Stream (Dinleme) ────────────────────────────────────────────────────────────── beginStream() | Belirli bir yol üzerindeki veriyi dinlemeye başlar readStream() | Yeni gelen verileri kontrol eder setStreamCallback()| Stream güncellenince çalışacak fonksiyonu tanımlar endStream() | Stream bağlantısını sonlandırır ⚠️ Hata ve Durum ────────────────────────────────────────────────────────────── errorReason() | Son işlemin hata mesajını verir dataType() | Gelen verinin veri türünü belirtir dataPath() | Gelen verinin ait olduğu yolu verir ⚙️ Diğer ────────────────────────────────────────────────────────────── isTokenExpired() | Token süresi dolmuş mu kontrol eder ready() | Firebase bağlantısının hazır olup olmadığını kontrol eder
📤 1. Verici ESP32 Kodu (Potansiyometre) Alanı
Potansiyometre değerini okuyup Firebase’e gönderen ESP32 kodu
#include <WiFi.h> #include <Firebase_ESP_Client.h> #include "addons/TokenHelper.h" #include "addons/RTDBHelper.h" // Wi-Fi Bilgileri #define WIFI_SSID "wifi adı" #define WIFI_PASSWORD "wifi sifresi" // Firebase API Bilgileri #define API_KEY "AIzaSyB3TBjUQ8mYw1z1QGQSbjvxPwQXW7QF--Q" #define DATABASE_URL "https://esp32-360c9-default-rtdb.firebaseio.com/" // Firebase Nesneleri FirebaseData fbdo; FirebaseAuth auth; FirebaseConfig config; // Potansiyometre pini const int potPin = 34; int oncekiPWM = -1; // Son gönderilen PWM değeri void setup() { Serial.begin(115200); // Wi-Fi bağlantısı WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); } Serial.println("\nWiFi Bağlandı"); // Firebase bağlantısı firebase_baglantisi(); } void loop() { if (Firebase.ready()) { int potDeger = analogRead(potPin); // 0–4095 arası okuma int pwmDeger = map(potDeger, 0, 4095, 0, 255); // 8 bit PWM'ye dönüştür if (pwmDeger != oncekiPWM) { oncekiPWM = pwmDeger; // Firebase'e PWM değerini gönder if (Firebase.RTDB.setInt(&fbdo, "/parlaklik", pwmDeger)) { Serial.print("Firebase'e gönderilen PWM değeri: "); Serial.println(pwmDeger); } else { Serial.print("Firebase yazma hatası: "); Serial.println(fbdo.errorReason()); } } } delay(30); } void firebase_baglantisi() { config.api_key = API_KEY; config.database_url = DATABASE_URL; if (Firebase.signUp(&config, &auth, "", "")) { Serial.println("Firebase bağlantısı başarılı"); } else { Serial.print("Firebase HATASI: "); Serial.println(config.signer.signupError.message.c_str()); } Firebase.begin(&config, &auth); Firebase.reconnectWiFi(true); }

📥 2. Alıcı ESP32 Kodu (LED) Alanı
Firebase’den gelen parlaklık değerini alıp LED’i kontrol eden ESP32 kodu
#include <WiFi.h> #include <Firebase_ESP_Client.h> #include "addons/TokenHelper.h" #include "addons/RTDBHelper.h" // Wi-Fi Bilgileri #define WIFI_SSID "wifi adı" #define WIFI_PASSWORD "wifi sifresi" // Firebase API Bilgileri #define API_KEY "AIzaSyB3TBjUQ8mYw1z1QGQSbjvxPwQXW7QF--Q" #define DATABASE_URL "https://esp32-360c9-default-rtdb.firebaseio.com/" // Firebase Nesneleri FirebaseData fbdo; FirebaseAuth auth; FirebaseConfig config; // LED Pin (PWM destekli pin) const int ledPin = 15; int oncekiDeger = -1; // Son LED değeri void setup() { Serial.begin(115200); // Wi-Fi Bağlantısı WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); } Serial.println("\nWiFi Bağlandı"); // Firebase bağlantısı firebase_baglantisi(); } void loop() { if (Firebase.ready()) { if (Firebase.RTDB.getInt(&fbdo, "/parlaklik")) { int pwmDeger = fbdo.intData(); if (pwmDeger != oncekiDeger) { analogWrite(ledPin, pwmDeger); Serial.print("Firebase PWM değeri alındı: "); Serial.println(pwmDeger); oncekiDeger = pwmDeger; } } else { Serial.print("Firebase okuma hatası: "); Serial.println(fbdo.errorReason()); } } } void firebase_baglantisi() { config.api_key = API_KEY; config.database_url = DATABASE_URL; if (Firebase.signUp(&config, &auth, "", "")) { Serial.println("Firebase bağlantısı başarılı"); } else { Serial.print("Firebase HATASI: "); Serial.println(config.signer.signupError.message.c_str()); } Firebase.begin(&config, &auth); Firebase.reconnectWiFi(true); }

Bu kod alanlarını kullanarak, ESP32 kartlarınızı kolayca programlayabilir ve Firebase tabanlı gerçek zamanlı IoT projenizi hayata geçirebilirsiniz.