Skip to Content
ESP ve IoTWi-Fi Bağlantısı Kurmak

Wi-Fi Bağlantısı Kurmak

ESP kartlarının en temel işlevi Wi-Fi ağına bağlanmaktır. Bu yazı, basit bir bağlantıdan başlayıp gerçek projelerde ihtiyaç duyacağınız kararlılık önlemlerine kadar ilerler.

En Basit Bağlantı

#include <WiFi.h> // ESP32 icin // #include <ESP8266WiFi.h> // ESP8266 icin const char* SSID = "AgAdi"; const char* SIFRE = "Sifre123"; void setup() { Serial.begin(115200); delay(100); Serial.print("Baglaniyor: "); Serial.println(SSID); WiFi.begin(SSID, SIFRE); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.println("Baglanti kuruldu!"); Serial.print("IP adresi: "); Serial.println(WiFi.localIP()); } void loop() { }

Seri Monitör’ü 115200 baud hızında açın. Bağlantı kurulduğunda kartın IP adresini göreceksiniz.

Zaman Aşımı Eklemek

Yukarıdaki kodun sorunu şudur: bağlantı kurulamazsa while döngüsü sonsuza kadar çalışır ve kart hiçbir şey yapamaz.

Gerçek projelerde zaman aşımı koymak gerekir:

bool wifiBaglan(const char* ssid, const char* sifre, unsigned long timeout) { WiFi.mode(WIFI_STA); WiFi.begin(ssid, sifre); unsigned long baslangic = millis(); while (WiFi.status() != WL_CONNECTED) { if (millis() - baslangic > timeout) { Serial.println("\nBaglanti zaman asimi!"); return false; } delay(250); Serial.print("."); } Serial.println(); Serial.print("Baglandi. IP: "); Serial.println(WiFi.localIP()); return true; } void setup() { Serial.begin(115200); if (!wifiBaglan("AgAdi", "Sifre123", 20000)) { Serial.println("Cevrimdisi modda devam ediliyor."); // Wi-Fi olmadan da calisabilecek isleri yapin } }

WiFi.mode(WIFI_STA) satırı önemlidir: kartın yalnızca istemci (station) modunda çalışmasını sağlar. Varsayılan olarak ESP kartları aynı anda erişim noktası (AP) olarak da yayın yapabilir; bu gereksiz akım tüketir ve karışıklığa yol açar.

Bağlantı Durumları

WiFi.status() fonksiyonu bağlantının durumunu döndürür:

DurumAnlamı
WL_CONNECTEDBağlantı kuruldu
WL_NO_SSID_AVAILAğ bulunamadı (isim yanlış veya menzil dışı)
WL_CONNECT_FAILEDŞifre yanlış
WL_IDLE_STATUSBağlanmaya çalışıyor
WL_DISCONNECTEDBağlantı kesildi
WL_CONNECTION_LOSTBağlantı koptu

Hata ayıklarken bu değeri yazdırmak, sorunun şifrede mi menzilde mi olduğunu anında gösterir:

void durumYazdir() { switch (WiFi.status()) { case WL_CONNECTED: Serial.println("Bagli"); break; case WL_NO_SSID_AVAIL: Serial.println("Ag bulunamadi"); break; case WL_CONNECT_FAILED: Serial.println("Sifre hatali"); break; case WL_DISCONNECTED: Serial.println("Baglanti kesik"); break; default: Serial.println("Baglaniyor..."); break; } }

Ağları Taramak

Yakındaki ağları listelemek, hem hata ayıklama hem de sinyal gücü kontrolü için kullanışlıdır:

void agTara() { Serial.println("Taraniyor..."); WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); int adet = WiFi.scanNetworks(); if (adet == 0) { Serial.println("Ag bulunamadi."); return; } Serial.print(adet); Serial.println(" ag bulundu:"); for (int i = 0; i < adet; i++) { Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(" dBm) "); Serial.println(WiFi.encryptionType(i) == WIFI_AUTH_OPEN ? "[Acik]" : "[Sifreli]"); delay(10); } }

RSSI — Sinyal gücü

RSSIKalite
−30 ile −50 dBmMükemmel
−50 ile −60 dBmİyi
−60 ile −70 dBmKabul edilebilir
−70 ile −80 dBmZayıf, kopmalar olur
−80 dBm altıKullanılamaz

Bağlantı sürekli kopuyorsa WiFi.RSSI() değerini kontrol edin. −75 dBm’in altındaysa sorun yazılımda değil, konumdadır.

Sabit IP Atamak

Varsayılan olarak modem DHCP ile IP atar ve bu IP değişebilir. Kartınıza tarayıcıdan erişecekseniz sabit IP kullanmak daha pratiktir.

IPAddress ip(192, 168, 1, 200); IPAddress agGecidi(192, 168, 1, 1); IPAddress altAg(255, 255, 255, 0); IPAddress dns(8, 8, 8, 8); void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.config(ip, agGecidi, altAg, dns); // begin()'den ONCE WiFi.begin(SSID, SIFRE); // ... }

WiFi.config() çağrısı WiFi.begin()’den önce yapılmalıdır.

Seçtiğiniz IP’nin modemin DHCP havuzu dışında olduğundan emin olun; aksi halde çakışma yaşanır.

Sabit IP ayrıca bağlantıyı hızlandırır: DHCP anlaşması atlandığı için bağlanma süresi belirgin şekilde kısalır. Pille çalışan projelerde bu, doğrudan pil ömrü demektir.

Otomatik Yeniden Bağlanma

Modem yeniden başladığında veya sinyal kısa süre kesildiğinde kartın kendini toparlaması gerekir.

unsigned long sonKontrol = 0; const unsigned long KONTROL_ARALIGI = 30000; void wifiKontrol() { if (millis() - sonKontrol < KONTROL_ARALIGI) return; sonKontrol = millis(); if (WiFi.status() != WL_CONNECTED) { Serial.println("Baglanti kesik, yeniden baglaniliyor..."); WiFi.disconnect(); WiFi.begin(SSID, SIFRE); } } void loop() { wifiKontrol(); // Diger isler... }

ESP8266 ve ESP32’de otomatik yeniden bağlanmayı çekirdeğe bırakmak da mümkündür:

WiFi.setAutoReconnect(true); WiFi.persistent(true);

Yine de bir güvenlik ağı olarak yukarıdaki periyodik kontrolü eklemek iyi bir alışkanlıktır.

Erişim Noktası (AP) Modu

ESP kartı kendi Wi-Fi ağını da yayınlayabilir. Bu, mevcut bir ağ olmadığında veya ilk kurulum ekranı sunmak için kullanılır.

#include <WiFi.h> const char* AP_SSID = "RobotikDepo-Kurulum"; const char* AP_SIFRE = "12345678"; // en az 8 karakter void setup() { Serial.begin(115200); WiFi.mode(WIFI_AP); WiFi.softAP(AP_SSID, AP_SIFRE); Serial.print("AP baslatildi. IP: "); Serial.println(WiFi.softAPIP()); // genellikle 192.168.4.1 }

Telefonunuzdan bu ağa bağlanıp 192.168.4.1 adresine giderek karta erişebilirsiniz.

WIFI_AP_STA modu ikisini aynı anda çalıştırır ama akım tüketimini artırır.

WiFiManager — Şifreyi Koda Yazmamak

Wi-Fi bilgilerini koda gömmenin iki sorunu vardır: ağ değişince kodu yeniden yüklemeniz gerekir, ve şifreniz kaynak kodda durur.

WiFiManager kütüphanesi bunu çözer: kart kayıtlı bir ağa bağlanamazsa kendi erişim noktasını açar, telefonunuzdan bir ayar sayfası sunar ve girdiğiniz bilgileri kalıcı belleğe kaydeder.

Kütüphane Yöneticisi’nden WiFiManager (tzapu) aratıp kurun.

#include <WiFiManager.h> void setup() { Serial.begin(115200); WiFiManager wm; // Ayarlari sifirlamak icin (test amacli): // wm.resetSettings(); wm.setConfigPortalTimeout(180); // 3 dakika sonra vazgec if (!wm.autoConnect("RobotikDepo-Kurulum", "12345678")) { Serial.println("Baglanilamadi, yeniden baslatiliyor..."); ESP.restart(); } Serial.println("Baglandi!"); Serial.print("IP: "); Serial.println(WiFi.localIP()); } void loop() { }

İlk açılışta kart RobotikDepo-Kurulum adlı bir ağ yayınlar. Telefondan bağlanıp açılan sayfadan ev ağınızı seçer ve şifreyi girersiniz. Bilgiler kaydedilir; sonraki açılışlarda kart doğrudan bağlanır.

Kullanıcıya teslim edilecek her projede bu yaklaşım tercih edilmelidir.

mDNS ile İsimle Erişim

IP adresi ezberlemek yerine karta bir isim verebilirsiniz.

#include <ESPmDNS.h> // ESP32 // #include <ESP8266mDNS.h> // ESP8266 void setup() { // ... Wi-Fi baglantisi ... if (MDNS.begin("robotikdepo")) { Serial.println("mDNS baslatildi: http://robotikdepo.local"); } }

Artık tarayıcıdan http://robotikdepo.local adresiyle erişebilirsiniz.

mDNS macOS ve iOS’ta yerleşik olarak çalışır. Windows’ta Bonjour servisi gerekebilir; Android desteği sürüme göre değişir.

Akım Tasarrufu

Wi-Fi, ESP kartlarındaki en büyük tüketicidir. Pille çalışan projelerde:

// Iletim gucunu dusur (menzil azalir, akim azalir) WiFi.setTxPower(WIFI_POWER_11dBm); // ESP32 // Kullanilmadiginda Wi-Fi'yi kapat WiFi.disconnect(true); WiFi.mode(WIFI_OFF); // Modem uyku modu (baglanti korunur, akim azalir) WiFi.setSleep(true);

En etkili yöntem, ölçüm yapıp veriyi gönderdikten sonra deep sleep’e geçmektir. Bir sensör düğümü günde 24 kez uyanıp veri gönderiyorsa, toplam çalışma süresi dakikalarla ölçülür.

Sık Karşılaşılan Sorunlar

BelirtiNeden
Hiç bağlanmıyor5 GHz — ESP kartları yalnızca 2,4 GHz destekler
WL_CONNECT_FAILEDŞifre yanlış
WL_NO_SSID_AVAILSSID yanlış yazılmış veya menzil dışı
Bağlanıyor sonra resetleniyorBesleme yetersiz — Wi-Fi tepe akımı karşılanamıyor
Bağlantı sık kopuyorRSSI zayıf; modem kanalı kalabalık
Türkçe karakterli SSID çalışmıyorAğ adında Türkçe karakter kullanmayın
Bağlanıyor ama internet yokDNS ayarı eksik; sabit IP kullanıyorsanız DNS belirtin
Her açılışta çok yavaş bağlanıyorDHCP bekleniyor — sabit IP kullanın

Özet

ESP kartlarını Wi-Fi’ye bağlamak WiFi.begin() ile başlar, ancak gerçek projelerde zaman aşımı, yeniden bağlanma ve hata yönetimi eklemek gerekir.

Bu derste şunları öğrendik:

  • Temel bağlantı ve zaman aşımlı bağlantı kurmayı
  • WiFi.status() durum kodlarını ve ne anlama geldiklerini
  • Ağ taramayı ve RSSI sinyal gücünü yorumlamayı
  • Sabit IP atamayı ve bağlantıyı hızlandırmayı
  • Otomatik yeniden bağlanma mantığını
  • AP modunu ve WiFiManager ile şifreyi koddan çıkarmayı
  • mDNS ile isimle erişimi ve akım tasarrufu yöntemlerini