Rehberler · 13 dk okuma

Blynk ESP32 Rehberi: Telefondan LED, Röle ve Sensör Kontrolü

Blynk ESP32 kurulumu adım adım: şablon ve datastream (V0, V1), Auth Token, röle ve LED kontrolü, sensör grafiği, bildirim, BlynkTimer ve ücretsiz plan sınırı.

Blynk ESP32 ikilisi, kendi telefon uygulamanı yazmadan ESP32'yi dünyanın her yerinden kontrol etmenin en hızlı yoludur. Blynk IoT; ESP32'nin bağlandığı bir bulut sunucusu (Blynk.Cloud), sürükle-bırak yöntemiyle panel hazırladığın bir mobil uygulama ve bir web paneli sunar. Telefondaki bir anahtara dokunduğunda komut önce buluta, oradan da ESP32'ye gider; ESP32'nin ölçtüğü sıcaklık da aynı yoldan telefonuna sayı ve grafik olarak düşer. Telefonun ve kartın aynı evde olmasına gerek yoktur: telefonun mobil verideyken bile çalışır.

Bu rehberde sıfırdan başlayıp çalışan bir proje kuracaksın: Blynk.Cloud hesabı açacak, bir şablon ve datastream'ler (V0, V1, V2, V3) tanımlayacak, cihazın Auth Token'ını alacak, kütüphaneyi kurup telefondan LED ve röle kontrol edecek, DHT11 sensörünün verisini grafikte gösterecek ve sıcaklık yükselince telefonuna bildirim göndereceksin. Ayrıca BlynkTimer ile neden delay() kullanmaman gerektiğini, ücretsiz planın mesaj sınırını nasıl hesaplayacağını, eski Blynk'ten kalma kodların neden derlenmediğini ve en sık görülen bağlantı hatalarının çözümünü öğreneceksin.

Blynk IoT ile telefondan kontrol edilen ESP32 geliştirme kartı
ESP32, içindeki Wi-Fi sayesinde Blynk.Cloud'a doğrudan bağlanır; ek bir kablosuz modüle ihtiyaç duymaz.

Blynk IoT nedir, nasıl çalışır?

Blynk'te ESP32 ile telefon birbirine doğrudan bağlanmaz; ikisi de Blynk.Cloud'a bağlanır ve mesajları sunucu taşır. ESP32 açıldığında önce Wi-Fi'ye, ardından Blynk sunucusuna bağlanır ve kendini Auth Token ile tanıtır. Veriler sanal pinler (Virtual Pin, V0–V255) üzerinden akar: sanal pin, ESP32'nin gerçek bir bacağı değil, kodla uygulama arasındaki numaralı bir veri kanalıdır. Uygulamadaki anahtar V1'e 1 yazar, koddaki BLYNK_WRITE(V1) fonksiyonu bunu yakalar ve röleyi çeker; kod Blynk.virtualWrite(V2, 24.5) çalıştırınca da telefondaki gösterge güncellenir. Bu yapıyı oluşturan kavramlar şunlardır:

KavramNe işe yarar?Bu rehberdeki örnek
Şablon (Template)Aynı tür cihazların ortak tarifi: datastream'ler, paneller ve olaylarESP32 Ev
DatastreamBir sanal pine bağlı, tipi ve sınırları belli veri kanalıV2: Sicaklik, Double, 0–50 °C
Cihaz (Device)Şablondan üretilen gerçek kart; her birinin kendi verisi vardırSalondaki ESP32
Auth TokenCihazın gizli kimlik anahtarı; kod buluta bununla bağlanırBLYNK_AUTH_TOKEN satırı
WidgetPaneldeki anahtar, gösterge ve grafik gibi öğelerButton, Gauge, SuperChart
Event (olay)Bildirim gönderen ve zaman çizelgesine kaydedilen uyarıyuksek_sicaklik

Eski Blynk ile yeni Blynk IoT arasındaki farklar

İnternetteki Blynk videolarının ve kodlarının çoğu, artık çalışmayan eski sürüm (Blynk Legacy) içindir. Yeni platform Mayıs 2021'de çıktı; eski uygulama Haziran 2022'de mağazalardan kaldırıldı ve eski bulut sunucuları 31 Aralık 2022'de tamamen kapatıldı. Yani eski bir projedeki token, satın alınmış energy puanları ya da blynk-cloud.com adresi bugün hiçbir işe yaramaz; projeyi yeni platformda baştan kurman gerekir. İyi haber şu: ESP32 tarafındaki kodun büyük kısmı (BLYNK_WRITE, virtualWrite, BlynkTimer) aynı kaldı.

ÖzellikEski Blynk (Legacy)Blynk IoT (yeni)
Proje nerede kurulur?Her şey telefondaki projedeŞablon ve datastream'ler Blynk.Console'da (web), panel telefonda ve webde
Auth TokenProje başına, e-postayla gelirdiHer cihaza ayrı, cihaz sayfasında görünür
Ödeme modeliWidget'lar energy puanıyla alınırdıAylık planlar: cihaz, mesaj ve özellik sınırları
Kodun başıYalnızca char auth[] satırıBLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME ve BLYNK_AUTH_TOKEN zorunlu
BildirimBlynk.notify() ve Blynk.email()Şablonda event tanımlanır, Blynk.logEvent() ile tetiklenir
Sunucublynk-cloud.com, 80 ya da 8080 portu (kapatıldı)blynk.cloud, 80 portu ya da SSL ile 443
Web paneliYokVar (Blynk.Console)
Yerel sunucuAçık kaynak Java sunucu kurulabilirdiKişisel yerel sunucu yok; eski sunucu artık güncellenmiyor
Eski bir örneği yeni kütüphaneyle derlediğinde üç tipik sorunla karşılaşırsın: BLYNK_DEVICE_NAME kullanan kodlar "Please specify your BLYNK_TEMPLATE_ID and BLYNK_TEMPLATE_NAME" hatası verir, Blynk.notify() içeren kodlar "'class BlynkWifi' has no member named 'notify'" hatasıyla durur, Blynk.begin() satırında blynk-cloud.com adresini (çoğunlukla 8080 portuyla) açıkça yazan kodlar ise derlense bile hiçbir zaman bağlanamaz.

Gerekli malzemeler ve bağlantı şeması

Bu projede bir ESP32 geliştirme kartı, bir 5 V röle modülü, bir DHT11 sıcaklık ve nem sensörü, isteğe bağlı bir LED ile 220 Ω direnç, breadboard ve jumper kablolar kullanacaksın. LED için kartın GPIO 2'ye bağlı dahili mavi LED'i yeterlidir; harici LED takacaksan direnç değerini LED direnç hesaplayıcı ile bulabilirsin. Kartının pin dizilimini de Pinout aracından kontrol et; bazı kartlarda 5 V pini VIN, bazılarında 5V olarak yazılıdır.

ESP32
ESP32
Röle modülü
Röle modülü
DHT11
DHT11
LED
LED
Breadboard
Breadboard
Jumper kablo
Jumper kablo
ParçaParça piniESP32 piniNot
LED (isteğe bağlı)Uzun bacak (+)GPIO 2220 Ω dirençle; kısa bacak GND'ye
Röle modülüVCCVIN / 5VUSB'den beslenirken bu pinde yaklaşık 5 V vardır
Röle modülüGNDGNDOrtak toprak
Röle modülüINGPIO 26Aktif LOW modülde kodda ROLE_AKTIF_LOW = true
DHT11VCC3V33,3–5,5 V ile çalışır
DHT11DATAGPIO 4Çıplak sensörde 10 kΩ pull-up gerekir; modüllerde kart üzerindedir
DHT11GNDGNDOrtak toprak
ESP32'nin pinleri 3,3 V verir. Çoğu 5 V röle modülü bu sinyalle çeker, ama aktif LOW bir modülde 3,3 V'luk HIGH sinyali röleyi her zaman tam bırakmayabilir; röle hiç kapanmıyorsa 3,3 V tetiklemeli bir modül ya da araya bir NPN transistör kullan. Röleyle 220 V şebeke yükü anahtarlayacaksan bağlantıları her zaman fiş çekiliyken yap, açıkta iletken bırakma ve bir yetişkinden yardım al; ayrıntılar Röle Modülü Nedir? yazısında.

Adım 1: Blynk.Cloud hesabı ve şablon oluşturmak

  1. Bilgisayarında blynk.cloud adresine gir, e-posta adresinle ücretsiz bir hesap aç ve gelen e-postadaki bağlantıyla şifreni belirle.
  2. Sol menüde Developer Zone > My Templates bölümüne git ve + New Template düğmesine tıkla.
  3. Şablona bir ad ver (örneğin ESP32 Ev), donanım (Hardware) olarak ESP32, bağlantı türü olarak WiFi seç ve şablonu oluştur.
  4. Şablon sayfasında görünen BLYNK_TEMPLATE_ID ve BLYNK_TEMPLATE_NAME değerleri koda yazılacak; şimdilik yalnızca yerlerini öğren.
  5. Hesabı açarken karşına bir Quickstart sihirbazı çıkarsa onu atlayabilirsin; bu rehberde her adımı elle yapacağız, böylece hangi ayarın ne işe yaradığını göreceksin.

Adım 2: Datastream'leri tanımlamak (V0, V1, V2, V3)

Datastream, sanal pinin kimlik kartıdır: hangi pin olduğunu, veri tipini (Integer tam sayı, Double ondalıklı sayı, String metin), en küçük ve en büyük değeri, birimi ve kaç ondalık basamak gösterileceğini belirler. Şablonu düzenleme modunda açıp Datastreams sekmesinde + New Datastream > Virtual Pin yolunu izle ve aşağıdaki dört kanalı oluştur:

Sanal pinAdVeri tipiMin – MaxBirim ve ondalıkWidget
V0LEDInteger0 – 1YokButton / Switch
V1RoleInteger0 – 1YokButton / Switch
V2SicaklikDouble0 – 50°C, #.#Gauge, SuperChart
V3NemDouble0 – 100%, #Gauge, SuperChart
Min ve Max alanları süs değildir: Blynk aralık dışındaki değerleri sınıra kırpar. Sıcaklık datastream'inin Max değerini 1'de bırakırsan sensör 24,5 °C ölçse bile panelde 1 görürsün. Anahtarların kart yeniden başladığında son durumuna dönmesini istiyorsan kodda BLYNK_CONNECTED() içinde Blynk.syncVirtual() kullan; alternatif olarak datastream'in gelişmiş ayarlarındaki Sync with latest server value seçeneğini açıp Blynk.syncAll() çağırabilirsin. Her değişiklikten sonra şablonu Save ile kaydetmeyi unutma.

Adım 3: Cihaz oluşturup Auth Token'ı almak

Şablon bir tariftir, cihaz ise o tariften yapılmış gerçek karttır. Sol menüde Devices bölümüne gir, + New Device düğmesine bas, From template seçeneğiyle ESP32 Ev şablonunu seç ve cihaza bir ad ver. Cihaz oluştuğunda ekranda üç satırlık bir yapılandırma çıkar: BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME ve BLYNK_AUTH_TOKEN. Bu satırları kopyala; sonradan da cihaz sayfasındaki Device Info (bazı arayüz sürümlerinde Developer Tools) bölümünde bulabilirsin.

Auth Token cihazın şifresidir. Token'ı içeren kodu forumlarda ya da herkese açık bir GitHub deposunda paylaşma; token'ı ele geçiren biri röleni açıp kapatabilir. Token sızarsa cihazı silip yeniden oluşturarak yeni bir token alabilirsin. Her kartın kendi cihazı ve kendi token'ı olmalı: iki ESP32'ye aynı token'ı yüklersen birbirlerini sürekli bağlantıdan düşürürler.

Adım 4: Arduino IDE'ye Blynk kütüphanesini kurmak

  1. Arduino IDE'de ESP32 kart paketi kurulu değilse önce onu kur; adımları ESP32 Nedir? yazısında bulabilirsin.
  2. Kütüphane Yöneticisi'ni aç, arama kutusuna Blynk yaz ve yazarı Volodymyr Shymanskyy olan resmî Blynk kütüphanesini kur. Bağımlılıklar sorulursa Install all seç.
  3. Sensör için aynı yerden Adafruit'in DHT sensor library kütüphanesini ve istediği Adafruit Unified Sensor kütüphanesini kur. Sorun yaşarsan Arduino Kütüphane Ekleme rehberine bak.
  4. Araçlar > Kart menüsünden ESP32 Dev Module seç, kartı veri taşıyan bir USB kablosuyla bağla ve doğru portu seç.
  5. Kütüphane hazır örneklerle gelir: Dosya > Örnekler > Blynk > Boards_WiFi > ESP32_WiFi örneği, aşağıdaki ilk kodun en sade hâlidir.

İlk kod: telefondan LED yakıp söndürmek (V0)

Aşağıdaki kodda en üstteki üç satırı kendi cihaz sayfandan kopyaladıklarınla, Wi-Fi adını ve şifresini de kendi bilgilerinle değiştir. Bu üç #define satırı mutlaka #include satırlarından önce gelmelidir; kütüphane derlenirken bu değerleri arar ve bulamazsa derleme hatası verir.

Arduino (C++)
1// Bu üç satırı Blynk.Console'daki cihaz sayfasından kopyala / copy these three lines from the device page in Blynk.Console
2#define BLYNK_TEMPLATE_ID   "TMPLxxxxxxxx"
3#define BLYNK_TEMPLATE_NAME "ESP32 Ev"
4#define BLYNK_AUTH_TOKEN    "CihazTokeniniBurayaYapistir"
5
6#define BLYNK_PRINT Serial          // bağlantı günlüğünü Seri Monitör'e yaz / print the connection log to the Serial Monitor
7
8#include <WiFi.h>
9#include <WiFiClient.h>
10#include <BlynkSimpleEsp32.h>
11
12char ssid[] = "AgAdi";              // Wi-Fi adın (yalnız 2,4 GHz) / your Wi-Fi name (2.4 GHz only)
13char pass[] = "Sifre123";           // Wi-Fi şifren / your Wi-Fi password
14
15const int LED_PIN = 2;              // çoğu DevKit'te dahili LED / onboard LED on most DevKits
16
17// Uygulama V0'a her değer yazdığında çalışır / runs every time the app writes a value to V0
18BLYNK_WRITE(V0) {
19  int deger = param.asInt();        // anahtar: 0 ya da 1 / switch: 0 or 1
20  digitalWrite(LED_PIN, deger);
21  Serial.print("V0 = ");
22  Serial.println(deger);
23}
24
25// Buluta her bağlanışta son V0 değerini iste / ask for the last V0 value on every connection
26BLYNK_CONNECTED() {
27  Blynk.syncVirtual(V0);
28}
29
30void setup() {
31  Serial.begin(115200);
32  pinMode(LED_PIN, OUTPUT);
33  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);   // Wi-Fi'ye ve Blynk.Cloud'a bağlan / connect to Wi-Fi and Blynk.Cloud
34}
35
36void loop() {
37  Blynk.run();                      // gelen komutları işler, bağlantıyı canlı tutar / handles commands, keeps the link alive
38}
SatırGörevi
BLYNK_PRINT SerialKütüphanenin bağlantı adımlarını Seri Monitör'e yazmasını sağlar; sorun ararken çok işe yarar
BLYNK_WRITE(V0)Uygulama ya da web paneli V0'a bir değer gönderdiğinde kendiliğinden çalışan fonksiyon
param.asInt()Gelen değeri tam sayıya çevirir; ondalık için asFloat(), metin için asStr() kullanılır
BLYNK_CONNECTED()Her başarılı bağlantıdan sonra bir kez çalışır
Blynk.syncVirtual(V0)Sunucudan V0'ın son değerini ister; kart yeniden başlasa da LED eski durumuna döner
Blynk.begin(...)Wi-Fi'ye ve Blynk.Cloud'a bağlanır; bağlanana kadar bekler
Blynk.run()Gelen komutları işler ve bağlantıyı canlı tutar; loop içinde hiç beklemeden çağrılmalıdır

Kodu yükleyip Seri Monitör'ü 115200 baud hızında açtığında sırasıyla "Connecting to AgAdi", "Connected to WiFi", IP adresi, "Connecting to blynk.cloud:80" ve en sonda "Ready (ping: 45ms)." benzeri satırlar görmelisin. Ready satırı geldiyse cihaz Blynk.Console'da Online görünür. İlk bağlantıda "Redirecting to" diye başlayan bir satır da görebilirsin; kütüphane hesabının bulunduğu bölge sunucusuna kendiliğinden geçer, bu normaldir.

Telefon ve web panelini hazırlamak

Kod hazır, şimdi düğmeleri yerleştirelim. Blynk'te mobil panel ile web paneli ayrı ayrı tasarlanır; ikisi de aynı datastream'leri kullandığı için birinden yaptığın değişiklik diğerinde de anında görünür.

  1. Telefonuna Blynk IoT uygulamasını kur (eski Blynk ya da Blynk Legacy değil) ve aynı hesapla giriş yap.
  2. Profil sayfasından Developer Mode seçeneğini aç, ardından Developer Zone'da ESP32 Ev şablonuna dokun.
  3. Boş alana dokunarak widget ekle: V0 ve V1 için birer Button ya da Switch, V2 ve V3 için Gauge ya da Labeled Value, geçmiş için bir SuperChart.
  4. Her widget'a dokunup ayarlarından ilgili datastream'i seç; SuperChart'a V2 ve V3'ü birlikte ekleyebilirsin. Değişiklikler kendiliğinden kaydedilir.
  5. Web paneli için Blynk.Console'da şablonu düzenle, Web Dashboard sekmesinde widget'ları sürükle bırak, her birinin dişli simgesinden datastream'i seç ve Save ile kaydet.
  6. Uygulamada cihazının adına dokun ve anahtarı dene: GPIO 2'deki LED anında yanmalı, Seri Monitör'de "V0 = 1" yazmalı.
Button widget'ının iki çalışma biçimi vardır: Switch modunda her dokunuşta 1 ile 0 arasında geçiş yapar, Push modunda basılı tuttuğun sürece 1, bırakınca 0 gönderir. Lamba ve priz için Switch, kapı zili ya da garaj kapısı gibi kısa darbe isteyen işler için Push uygundur.

Röle ve sensör: BlynkTimer ile delay'siz okuma

Blynk'in altın kuralı şudur: loop() içinde yalnızca Blynk.run() ve timer.run() bulunsun. loop'a delay(2000) koyarsan ESP32 o süre boyunca telefondan gelen komutları göremez ve anahtar gecikmeli çalışır; çok uzun beklemeler sunucunun cihazı çevrimdışı saymasına yol açar. Daha kötüsü, Blynk.virtualWrite() satırını doğrudan loop'a yazarsan ESP32 saniyede yüzlerce mesaj göndermeye çalışır; sunucu cihazı sınırlar ve aylık mesaj kotan kısa sürede tükenir. Çözüm, millis() mantığıyla çalışan BlynkTimer'dır: belirlediğin fonksiyonu belirlediğin aralıkla çağırır, aradaki zamanda loop serbest kalır. Bu mantığı Arduino millis() ve delay() yazısında ayrıntılı anlattık.

Aşağıdaki kod V1 ile röleyi kontrol eder, DHT11'den okuduğu sıcaklığı V2'ye, nemi V3'e her 60 saniyede bir gönderir ve sıcaklık 30 °C'yi geçince bir bildirim olayı tetikler. Sensörün çalışma mantığı için DHT11 Sıcaklık ve Nem Sensörü yazısına bakabilirsin.

Arduino (C++)
1#define BLYNK_TEMPLATE_ID   "TMPLxxxxxxxx"
2#define BLYNK_TEMPLATE_NAME "ESP32 Ev"
3#define BLYNK_AUTH_TOKEN    "CihazTokeniniBurayaYapistir"
4#define BLYNK_PRINT Serial
5
6#include <WiFi.h>
7#include <WiFiClient.h>
8#include <BlynkSimpleEsp32.h>
9#include <DHT.h>
10
11char ssid[] = "AgAdi";
12char pass[] = "Sifre123";
13
14const int ROLE_PIN = 26;            // röle modülünün IN pini / relay module IN pin
15const int DHT_PIN  = 4;             // DHT11 veri pini / DHT11 data pin
16const bool ROLE_AKTIF_LOW = true;   // çoğu modül LOW'da çeker / most modules switch on with LOW
17
18DHT dht(DHT_PIN, DHT11);            // DHT22 kullanıyorsan DHT22 yaz / write DHT22 if you use a DHT22
19BlynkTimer timer;                   // delay() yerine zamanlayıcı / a timer instead of delay()
20bool alarmGitti = false;            // aynı bildirimin tekrarını önler / stops the same alert repeating
21
22void roleYaz(bool acik) {
23  if (ROLE_AKTIF_LOW) digitalWrite(ROLE_PIN, acik ? LOW : HIGH);
24  else                digitalWrite(ROLE_PIN, acik ? HIGH : LOW);
25}
26
27// V1: uygulamadaki röle anahtarı / relay switch in the app
28BLYNK_WRITE(V1) {
29  roleYaz(param.asInt() == 1);
30}
31
32// Elektrik gidip gelince rölenin son durumunu geri al / restore the relay state after a power cut
33BLYNK_CONNECTED() {
34  Blynk.syncVirtual(V1);
35}
36
37// Zamanlayıcının çağırdığı fonksiyon / the function called by the timer
38void sensorGonder() {
39  float sicaklik = dht.readTemperature();
40  float nem = dht.readHumidity();
41  if (isnan(sicaklik) || isnan(nem)) {
42    Serial.println("DHT okunamadi / DHT read failed");
43    return;
44  }
45  Blynk.virtualWrite(V2, sicaklik);   // V2: sıcaklık (°C) / temperature (°C)
46  Blynk.virtualWrite(V3, nem);        // V3: nem (%) / humidity (%)
47
48  // 30 °C'yi geçince tek bildirim, 28 °C'nin altında yeniden kur / one alert above 30 °C, re-arm below 28 °C
49  if (sicaklik > 30.0 && !alarmGitti) {
50    Blynk.logEvent("yuksek_sicaklik", String("Sicaklik / Temp: ") + sicaklik + " C");
51    alarmGitti = true;
52  } else if (sicaklik < 28.0) {
53    alarmGitti = false;
54  }
55}
56
57void setup() {
58  Serial.begin(115200);
59  pinMode(ROLE_PIN, OUTPUT);
60  roleYaz(false);                   // açılışta röle kapalı / relay off at boot
61  dht.begin();
62  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
63  timer.setInterval(60000L, sensorGonder);   // 60 saniyede bir ölç ve gönder / measure and send every 60 seconds
64}
65
66void loop() {
67  Blynk.run();
68  timer.run();                      // loop'ta delay() ya da virtualWrite olmasın / no delay() or virtualWrite in loop
69}

timer.setInterval(60000L, sensorGonder) satırı fonksiyonu 60.000 milisaniyede bir çağırır; sondaki L harfi sayının long türünde olduğunu belirtir. Tek seferlik işler için timer.setTimeout() kullanılır; örneğin röleyi açıp 5 saniye sonra kapatmak gibi. Bir BlynkTimer nesnesi en fazla 16 zamanlayıcı tutar, bu çoğu proje için fazlasıyla yeterlidir. isnan() kontrolü, sensör okunamadığında buluta anlamsız bir NaN değeri gitmesini engeller. alarmGitti bayrağı ve 30 ile 28 °C arasındaki eşik farkı (histerezis) ise sıcaklık 30 °C civarında gidip gelirken her ölçümde yeni bir bildirim üretilmesini önler.

Sensör verisini grafikte göstermek

Grafiğin dolması için iki şey gerekir: ESP32'nin virtualWrite ile veri göndermesi ve datastream'in geçmiş kaydı tutması. Datastream ayarlarında geçmiş (history) için Last Value seçiliyse sunucu yalnızca son değeri saklar ve grafik çizilmez; dakikalık ortalama (1 Minute AVG) seçeneği grafik için yeterlidir. Ücretsiz planda geçmiş veri 1 hafta saklanır, ham (RAW) veri saklama ise ücretli planlara özeldir. SuperChart'ta saat, gün ve hafta gibi zaman aralıkları arasında geçiş yapabilir, aynı grafikte sıcaklığı ve nemi iki ayrı renkle görebilirsin. Veri 60 saniyede bir geldiği için ilk noktaların görünmesi birkaç dakika sürer; sabırsızlanıp gönderim aralığını 1 saniyeye indirme, nedenini ücretsiz plan bölümünde göreceksin.

Bildirim göndermek: Event ve Blynk.logEvent()

Yeni Blynk'te bildirimler olay (event) üzerinden çalışır. Önce şablonda olayı tanımlarsın, sonra kodda Blynk.logEvent() ile tetiklersin; Blynk olayı cihazın zaman çizelgesine (Timeline) yazar ve ayarlarına göre telefonuna anlık bildirim (push) ya da e-posta gönderir. Olay açıklaması en fazla 300 karakter olabilir, ama kütüphanenin gönderme tamponu küçük olduğu için açıklamayı kısa tutmak en iyisidir.

  1. Şablonu düzenleme modunda aç ve Events & Notifications sekmesine geç.
  2. + Create Event düğmesine bas, olaya "Yüksek sıcaklık" gibi bir ad ver ve olay kodunu (event code) yuksek_sicaklik yap. Kod yalnızca harf, rakam ve alt çizgiden oluşmalı ve koddaki metinle birebir aynı olmalıdır.
  3. Olay türü olarak Warning seç; Info, Warning ve Critical uyarının önem derecesini belirtir. Olayın uygulamada görünmesi için zaman çizelgesi (Timeline) seçeneğinin açık olduğundan emin ol.
  4. Notifications sekmesinde bildirimleri aç, alıcı olarak kendi hesabını, kanal olarak push ve e-postayı seç; istersen bildirimleri saatte bir ile sınırla.
  5. Şablonu Save ile kaydet ve cihazı güncellemeyi onayla. Telefonda Blynk IoT uygulamasının bildirim iznini açmayı unutma.
SınırDeğer
Cihaz başına günlük olay (logEvent)100
Aynı türden iki olay arasıEn az 1 saniye
İki bildirim (push, e-posta) arasıEn az 5 saniye
Olay açıklamasıEn fazla 300 karakter
Cihaz başına istek hızıSaniyede en fazla 50
Metin (String) değer uzunluğuEn fazla 1024 bayt
Blynk.logEvent()'i asla loop() içine ya da her ölçümde çalışan bayraksız bir koşulun içine yazma. Sıcaklık eşiğin üstündeyken her 60 saniyede bir olay gönderen bir kod, günlük 100 olay sınırını yaklaşık 100 dakikada doldurur ve o gün başka hiçbir bildirim alamazsın. Yukarıdaki koddaki gibi bir bayrak kullan ya da Notifications sekmesindeki sınırlama ayarlarını aç.

Ücretsiz plan sınırları: mesaj hesabı nasıl yapılır?

Blynk'in ücretsiz planı öğrenmek ve küçük projeler için yeterlidir, ama sınırlarını bilmeden kurulan bir proje ay ortasında susabilir. Ekim 2026 itibarıyla Blynk'in fiyat sayfasında ücretsiz plan için şu değerler yer alıyor: 5 cihaz, 1 kullanıcı, ayda 100.000 cihaz mesajı, 1 haftalık veri geçmişi, 10 şablon, şablon başına 5 olay (event), 1 webhook ve 5 otomasyon. Bu sınırlar son yıllarda birkaç kez değişti; uzun süreli bir proje kurmadan önce güncel değerleri Blynk'in fiyat sayfasından ya da hesabının plan ayarlarından kontrol et. Sayaca en çok giren şey cihazın gönderdiği virtualWrite, syncVirtual ve logEvent komutlarıdır ve her virtualWrite tek başına bir mesajdır. Bir ay yaklaşık 2.592.000 saniye olduğuna göre hesap basittir:

Gönderim aralığı1 datastream (30 gün)2 datastream (30 gün)100.000 sınırına sığar mı?
2 saniye1.296.0002.592.000Hayır
10 saniye259.200518.400Hayır
30 saniye86.400172.800Tek değer sığar, iki değer sığmaz
60 saniye43.20086.400Sığar, ama iki değerde pay az kalır
5 dakika8.64017.280Rahatça sığar
Mesaj tasarrufu için üç yöntem var: ölçüm aralığını ihtiyacına göre büyüt (oda sıcaklığını 5 dakikada bir izlemek yeterlidir), değeri yalnızca belirli bir miktar değiştiğinde gönder (örneğin sıcaklık 0,5 °C değişince) ve kullanmadığın datastream'lere veri yollama. Kütüphanenin kendi örneklerinde de saniyede 10 değerden fazlasını göndermemen öneriliyor.

Wi-Fi yokken takılmayan bağlantı

Blynk.begin() kolaydır ama bir dezavantajı vardır: Wi-Fi ya da Blynk bağlantısı kurulamazsa setup() içinde sonsuza kadar bekler ve kartın geri kalanı hiç çalışmaz. Termostat ya da sulama gibi internet kesilse de çalışması gereken projelerde bağlantıyı kendin yönetmelisin. Aşağıdaki iskelet Wi-Fi'yi beklemeden başlatır, Blynk.config() ile yalnızca ayarları yapar ve bağlantıyı 10 saniyede bir kontrol eder; bu sırada timer'a eklediğin yerel işler internetten bağımsız olarak çalışmaya devam eder.

Arduino (C++)
1#define BLYNK_TEMPLATE_ID   "TMPLxxxxxxxx"
2#define BLYNK_TEMPLATE_NAME "ESP32 Ev"
3#define BLYNK_AUTH_TOKEN    "CihazTokeniniBurayaYapistir"
4#define BLYNK_PRINT Serial
5
6#include <WiFi.h>
7#include <WiFiClient.h>
8#include <BlynkSimpleEsp32.h>
9
10char ssid[] = "AgAdi";
11char pass[] = "Sifre123";
12
13BlynkTimer timer;
14
15// Wi-Fi varsa ama Blynk bağlı değilse yeniden dene / retry Blynk when Wi-Fi is up but Blynk is not
16void baglantiKontrol() {
17  if (WiFi.status() == WL_CONNECTED && !Blynk.connected()) {
18    Serial.println("Blynk'e yeniden baglaniliyor / reconnecting to Blynk");
19    Blynk.connect(3000);            // en fazla 3 saniye bekle / wait at most 3 seconds
20  }
21}
22
23void setup() {
24  Serial.begin(115200);
25  WiFi.mode(WIFI_STA);
26  WiFi.begin(ssid, pass);           // beklemeden başlat / start without waiting
27  Blynk.config(BLYNK_AUTH_TOKEN);   // yalnız ayarla, bağlanmayı bekleme / configure only, don't block
28  timer.setInterval(10000L, baglantiKontrol);   // 10 saniyede bir kontrol / check every 10 seconds
29}
30
31void loop() {
32  if (Blynk.connected()) {
33    Blynk.run();
34  }
35  timer.run();                      // yerel işler internet yokken de çalışır / local tasks keep running offline
36}

ESP32, Wi-Fi koptuğunda kendiliğinden yeniden bağlanmayı dener; kod yalnızca Wi-Fi geri geldiğinde Blynk'e yeniden bağlanır. Verilerin şifreli gitmesini istiyorsan BlynkSimpleEsp32.h yerine BlynkSimpleEsp32_SSL.h dosyasını eklemen yeterli; bağlantı 80 yerine 443 portundan TLS ile kurulur ve bazı okul ya da kurum ağlarındaki port engellerine de takılmaz. Wi-Fi bilgilerini koda gömmek istemiyorsan kütüphanedeki Blynk.Edgent > Edgent_ESP32 örneği, ağ adını ve şifreyi telefondaki Blynk IoT uygulamasından girmeni sağlar; bu yöntemde Auth Token cihaz eklenirken otomatik atanır ve kod kablosuz (OTA) güncellenebilir. Aynı kodlar ESP8266 kartlarında da çalışır: NodeMCU için ESP8266WiFi.h ve BlynkSimpleEsp8266.h dosyalarını kullanman yeterli.

Raspberry Pi Pico W ve MicroPython ile Blynk

Blynk yalnızca ESP32'ye özel değildir. Raspberry Pi Pico W ile MicroPython kullanıyorsan Blynk'in Python kütüphanesindeki tek dosyalık BlynkLib.py'yi Thonny ile Pico'ya kopyalaman yeterlidir. Bu kütüphanenin artık aktif olarak geliştirilmediğini ve Blynk'in yeni projeler için MQTT API'sini önerdiğini bil; yine de öğrenmek ve basit projeler için iş görür. Aşağıdaki kod V0 ile Pico W'nin dahili LED'ini kontrol eder ve yongadaki sıcaklık sensörünün değerini dakikada bir V2'ye gönderir. Pico W için Blynk.Console'da ayrı bir cihaz oluştur ve onun token'ını kullan. MicroPython'a yeniysen MicroPython Temelleri yazısı iyi bir başlangıçtır.

MicroPython
1import network, time
2from machine import Pin, ADC
3import BlynkLib                      # BlynkLib.py Pico'da olmalı / BlynkLib.py must be on the Pico
4
5WIFI_SSID = "AgAdi"
6WIFI_PASS = "Sifre123"
7BLYNK_AUTH = "PicoTokeniniBurayaYapistir"
8
9led = Pin("LED", Pin.OUT)            # Pico W dahili LED / Pico W onboard LED
10sensor = ADC(4)                      # yongadaki sıcaklık sensörü / on-chip temperature sensor
11
12wlan = network.WLAN(network.STA_IF)
13wlan.active(True)
14wlan.connect(WIFI_SSID, WIFI_PASS)
15while not wlan.isconnected():
16    time.sleep(0.5)
17print("IP:", wlan.ifconfig()[0])
18
19blynk = BlynkLib.Blynk(BLYNK_AUTH, insecure=True)   # 80 portu, TLS'siz / port 80, no TLS
20
21@blynk.on("V0")
22def v0_yazildi(value):               # uygulamadaki anahtar / switch in the app
23    led.value(int(value[0]))
24
25@blynk.on("connected")
26def baglandi(ping):
27    print("Blynk hazir / ready, ping:", ping, "ms")
28    blynk.sync_virtual(0)            # son V0 değerini iste / ask for the last V0 value
29
30son = time.ticks_ms()
31while True:
32    blynk.run()
33    if time.ticks_diff(time.ticks_ms(), son) >= 60000:   # 60 saniyede bir / every 60 seconds
34        son = time.ticks_ms()
35        volt = sensor.read_u16() * 3.3 / 65535
36        sicaklik = 27 - (volt - 0.706) / 0.001721
37        blynk.virtual_write(2, round(sicaklik, 1))      # V2: sıcaklık / temperature

Örnekte bağlantı insecure=True ile 80 portundan şifresiz kurulur; bu, en az bellek harcayan seçenektir ve ESP32'deki BlynkSimpleEsp32.h ile aynı düzeydedir. Bu parametreyi kaldırırsan kütüphane 443 portunda TLS kullanmayı dener. Döngüde time.sleep() yerine ticks_ms ile zaman ölçmemizin sebebi Arduino tarafındakiyle aynıdır: blynk.run() sık çağrılmazsa komutlar gecikir ve bağlantı düşer. Yongadaki sıcaklık sensörü oda sıcaklığından birkaç derece sapabilir; gerçek ölçüm için bir DHT11 ya da DS18B20 bağla.

Blynk ile yapabileceğin proje fikirleri

  • Akıllı priz: Bir röleyle masa lambasını ya da fanı dünyanın her yerinden aç ve kapat; röle bağlantısı için Röle Modülü Nedir?
  • Uzaktan bitki sulama: Toprak nem sensörü kuru dediğinde pompayı çalıştır ve nem değerini grafikte izle.
  • Akıllı sera: Sıcaklık ve nem yükselince fanı aç, değerler eşiği aşınca bildirim al; ayrıntılar Akıllı Sera Projesi yazısında.
  • Hırsız alarmı: PIR hareket sensörü birini algılayınca logEvent ile telefonuna kritik bildirim gönder.
  • Gaz kaçağı uyarısı: MQ-2 gaz sensörü eşiği aştığında hem buzzer çalsın hem de telefonun titresin.
  • Hava istasyonu: BME280 ile sıcaklık, nem ve basıncı haftalık grafikte karşılaştır.
  • Kapı ve pencere takibi: Reed röle ile kapının açık kalıp kalmadığını uygulamadan gör.

Sık hatalar ve çözümleri

Belirti ya da mesajSebepÇözüm
Derlemede "Please specify your BLYNK_TEMPLATE_ID and BLYNK_TEMPLATE_NAME"Satırlar eksik, #include'dan sonra yazılmış ya da eski BLYNK_DEVICE_NAME kullanılmışÜç #define satırını dosyanın en üstüne, include'lardan önce yaz; DEVICE_NAME'i TEMPLATE_NAME yap
Derlemede "'class BlynkWifi' has no member named 'notify'"Eski Blynk koduna ait Blynk.notify() komutuŞablonda event oluştur ve Blynk.logEvent() kullan
Seri Monitör'de "Invalid auth token"Token eksik ya da yanlış kopyalanmış, cihaz silinmiş ya da eski Blynk token'ı kullanılıyorToken'ı cihaz sayfasından yeniden kopyala, başında ve sonunda boşluk kalmasın
"Connecting to AgAdi" satırından sonrası gelmiyorKart Wi-Fi'ye bağlanamıyor: 5 GHz ağ, yanlış şifre ya da zayıf sinyal2,4 GHz ağ kullan; ayrıntılar için ESP32 Wi-Fi rehberine bak
"Connecting to blynk.cloud:80" tekrar ediyor ya da "Login timeout"Ağda internet yok ya da okul veya kurum ağı bağlantıyı engelliyorTelefon hotspot'uyla dene; BlynkSimpleEsp32_SSL.h ile 443 portunu kullan
"Heartbeat timeout", cihaz sık sık Offlineloop'ta uzun delay() ya da bekleyen döngü, yetersiz güç kaynağıBeklemeleri BlynkTimer'a taşı, kaliteli kablo ve adaptör kullan
Anahtara basınca hiçbir şey olmuyorWidget başka bir datastream'e bağlı ya da BLYNK_WRITE'taki pin farklıWidget ayarındaki pin ile koddaki Vx aynı olmalı
Göstergede değer hep 1 ya da grafik boşDatastream'in Max değeri 1 bırakılmış ya da geçmiş ayarı Last ValueMin ve Max'ı sensör aralığına göre düzelt, geçmiş ayarını değiştir
Bir süre sonra veriler hiç gelmiyorAylık mesaj kotası dolmuşGönderim aralığını büyüt, yalnızca değişince gönder
Röle ters çalışıyor ya da hiç bırakmıyorAktif LOW modül ya da 3,3 V sinyal yetersizROLE_AKTIF_LOW değerini değiştir, 3,3 V uyumlu modül kullan
Sorun ararken sırayı koru: önce Seri Monitör'de Wi-Fi bağlantısını, sonra "Ready" satırını gör, en son widget ile datastream eşleşmesine bak. Wi-Fi aşamasında takılıyorsan ESP32 Wi-Fi Bağlanmıyor rehberine, kart Wi-Fi açılınca yeniden başlıyorsa ESP32 Brownout ve Guru Meditation yazısına göz at.

Blynk mi, kendi web sunucun mu, MQTT mi?

YöntemArtısıEksisiNe zaman seçilir?
Blynk IoTUygulama yazmadan hazır panel, evin dışından erişim, bildirimÜcretsiz plan sınırları, buluta bağımlılıkHızlı prototip ve uzaktan izleme
ESP32 web sunucusuTamamen ücretsiz, internet olmadan çalışırGenelde yalnızca aynı ağdan erişilir, arayüzü sen yazarsınEv içi kontrol paneli
MQTT ve Home AssistantSınırsız mesaj, yerel çalışır, güçlü otomasyonKurulumu daha uzun, sürekli açık bir sunucu gerekirKalıcı akıllı ev sistemi
Telegram botuÜcretsiz, bildirim ve komut için idealGrafik ve panel yokAlarm ve basit komutlar

Kısacası Blynk, hazır ve şık bir panelle hızlı sonuç almak ve evin dışından erişmek için en kolay yoldur. Sınırsız ve tamamen yerel bir sistem istiyorsan ESP32 Web Server ve WebSocket ya da ESP32 MQTT ve Home Assistant yazılarına, yalnızca telefona uyarı göndermek istiyorsan ESP32 Telegram Botu rehberine göz at.

Şablon, datastream ve Auth Token üçlüsünü bir kez anladıktan sonra Blynk ile yeni bir ESP32 projesini telefona bağlamak birkaç dakikanı alır. Buradaki LED, röle ve sensör örneklerini birleştirerek kendi akıllı ev sistemine başlayabilirsin. BlueGrays uygulamasında da ESP32 ile LED yakma, Wi-Fi bağlantısı, DHT22 ile sıcaklık ölçümü, akıllı aydınlatma, bitki sulama ve Telegram'lı hareket alarmı gibi projelere adım adım devre şeması ve kodlarıyla bakabilirsin.

Sıkça sorulan sorular

Blynk ücretsiz mi?

Evet, Blynk'in kişisel kullanım için ücretsiz bir planı var. Ekim 2026 itibarıyla bu plan 5 cihaz, ayda 100.000 cihaz mesajı ve 1 haftalık veri geçmişi sunuyor. Daha fazla cihaz, sınırsız mesaj ve uzun süreli veri saklama için aylık ücretli planlara geçmek gerekir.

Blynk Auth Token nerede bulunur?

Blynk.Console'da Devices bölümünden cihazını aç; Device Info kısmında BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME ve BLYNK_AUTH_TOKEN satırlarını koda yapıştırmaya hazır şekilde görürsün. Yeni Blynk'te token artık e-postayla gelmez ve her cihazın kendine ait bir token'ı vardır.

Eski Blynk uygulaması hâlâ çalışıyor mu?

Hayır. Eski Blynk (Legacy) uygulaması 2022'de mağazalardan kaldırıldı ve bulut sunucuları 31 Aralık 2022'de kapatıldı. Eski projeleri yeni Blynk IoT platformunda şablon ve datastream'lerle yeniden kurman gerekir; ESP32 kodunun büyük kısmı küçük değişikliklerle kullanılabilir.

Blynk'te sanal pin (virtual pin) nedir?

Sanal pin, uygulama ile kod arasındaki numaralı bir veri kanalıdır ve kartın fiziksel bir bacağına karşılık gelmez. V0'dan V255'e kadar numaralanır; uygulamadan gelen değer BLYNK_WRITE(Vx) ile okunur, karttan uygulamaya ise Blynk.virtualWrite(Vx, değer) ile gönderilir. Böylece gelen değeri istediğin gibi işleyebilir ve sensör verisini panele taşıyabilirsin.

Blynk'te ESP32 neden offline görünüyor?

En sık sebepler yanlış ya da eksik Auth Token, ESP32'nin 5 GHz bir ağa bağlanmaya çalışması, loop() içindeki uzun delay() komutları ve yetersiz güç kaynağıdır. Seri Monitör'de "Ready" satırı görünmüyorsa sorun bağlantıdadır; görünüyorsa uygulamada doğru cihaza baktığından emin ol.

Blynk internet olmadan çalışır mı?

Hayır. Blynk IoT'de komutlar ve veriler Blynk.Cloud üzerinden taşındığı için hem ESP32'nin hem de telefonun internete erişmesi gerekir. İnternetsiz kontrol için ESP32'nin kendi web sunucusunu, ESP-NOW ya da Bluetooth'u kullanabilirsin.

Tüm projeleri gör
ESP32 ile LED Yakma
#103Başlangıç

ESP32 ile LED Yakma

ESP32 ile temel GPIO çıkışı kullanımını öğretir. Bir LED'i dijital pinden açıp kapatarak yanıp sönme efekti elde ederiz. Arduino UNO'daki klasik blink projesinin ESP32 versiyonu; Arduino ortamındaki temel blink komutları aynıdır, ancak ESP32'nin pin yerleşimi ve 3,3 V GPIO seviyeleri Arduino UNO'dan farklıdır.

4.7(36)
96
ESP32 Dahili LED Yakma
#106Başlangıç

ESP32 Dahili LED Yakma

ESP32 DevKit V1'in üzerindeki dahili (built-in) mavi LED'i yanıp söndürmek. Hiçbir harici bileşen gerekmez! ESP32 satın aldığında ilk denemen gereken proje. GPIO 2 dahili LED'e bağlıdır.

4.8(29)
53
ESP32 LDR Modülü ile Işık Şiddeti Okuma
#113Başlangıç

ESP32 LDR Modülü ile Işık Şiddeti Okuma

LDR modülünün ham ADC değerini ve karanlık/aydınlık referanslarına göre hesaplanan göreli ışık yüzdesini Serial Monitor'da gerçek zamanlı izleme. Bu yüzde lux ölçümü değildir. Modülün kalibrasyon mantığını öğretir. Proje 10'un öncesinde yapılması ideal; çünkü eşik değerini belirlemek için kullanılır.

4.6(36)
55
ESP32 Wi-Fi STA Bağlantısı (LCD Ekranlı)
#127İleri
Premium

ESP32 Wi-Fi STA Bağlantısı (LCD Ekranlı)

Bu projede ESP32'yi Station (STA) modunda evdeki Wi-Fi ağına güvenli ve hata toleranslı şekilde bağlıyoruz. SSID/şifreyi `secrets.h` dosyasına ayırarak Git'e sızmasını önlüyor, otomatik yeniden bağlanma mekanizması kuruyor, RSSI sinyal seviyesini ve IP adresini I2C LCD ekranda gösteriyoruz. Dahili LED durum göstergesi olarak çalışır. Üretim seviyesi bir bağlantı yöneticisidir.

4.4(21)
33
ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)
#117Orta

ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)

DHT22 sensörü ile ortam sıcaklığını ve nem oranını ölçüp 16x2 I2C LCD ekranda gerçek zamanlı olarak gösteren bir projedir. Adafruit DHT kütüphanesi kullanılarak tek kablo (one-wire) protokolü ile sensörden veri okunur. Bu proje, IoT hava istasyonu, akıllı ev otomasyonu veya seralarda ortam takip sistemlerinin temelini oluşturur. ESP32'nin GPIO 4 pini üzerinden DHT22 ile haberleşme sağlanır.

4.8(38)
54
ESP32 Akıllı Aydınlatma (PIR + LDR + Röle + OLED)
#141İleri
Premium

ESP32 Akıllı Aydınlatma (PIR + LDR + Röle + OLED)

ESP32, PIR hareket sensörü, LDR ışık sensörü ve röle modülü ile evinin koridorunu, tuvaletini veya kilerini akıllı aydınlatmaya dönüştürüyoruz. Klasik "karanlıkta hareket algılanınca ışık yansın" senaryosunu inşa ediyoruz — ortam aydınlıksa hareket olsa bile ışık yanmaz, böylece gündüz gereksiz yere yanmaz ve enerji tasarrufu sağlanır. Işık 30 saniye yanık kalır; hareket devam ederse timer otomatik sıfırlanır ve süre uzar. SSD1306 OLED ekranda büyük fontlarla durum (AÇIK / GÜNDÜZ / BEKLE), geri

4.3(6)
11
ESP 32 Akıllı Bitki Sulama Sistemi
#139İleri
Premium

ESP 32 Akıllı Bitki Sulama Sistemi

Bu projede ESP32 ve toprak nem sensörü kullanılarak otomatik bitki sulama sistemi geliştirilmiştir. Sensör toprağın nem seviyesini sürekli ölçer. Nem belirlenen seviyenin altına düştüğünde ESP32 röleyi aktif ederek su pompasını çalıştırır ve bitkiyi sular. Toprak yeterince nemli olduğunda pompa otomatik olarak durur. Bu proje sayesinde bitkiler düzenli olarak sulanabilir ve su tasarrufu sağlanabilir. _______________________________ Bağlantılar Nem Sensörü Sensör ESP32 VCC 3.3V GND GND AO GPIO34

4.7(10)
14
ESP32 Hareket Alarm Sistemi (PIR + Buzzer + LED + Telegram)
#145İleri
Premium

ESP32 Hareket Alarm Sistemi (PIR + Buzzer + LED + Telegram)

PIR sensörü hareket algıladığında buzzer ve LED'i aktif eden, aynı anda Telegram üzerinden sahibine anlık bildirim gönderen akıllı bir güvenlik alarm sistemidir. Tekrarlayan alarmların sıklığını sınırlamak için 30 saniyelik cooldown (bekleme süresi) mekanizması vardır; bu mekanizma PIR sensörünün yanlış algılamalarını doğrulamaz veya ortadan kaldırmaz. Ev güvenliği, garaj izleme, depo veya çalışma odası gibi alanlarda kullanılabilir. Telegram entegrasyonu sayesinde nerede olursanız olun anında h

0.0(0)
8