ESP32 Wi-Fi bağlantısı için kartı STA modunda, yani evdeki modem ya da telefon hotspot'u gibi bir erişim noktasına istemci olarak çalıştırırsın. Önce WiFi.mode(WIFI_STA) ile modu seçersin, ardından WiFi.begin() ile ağ adını ve parolayı verirsin. Sonra WiFi.status() ile bağlantının kurulup kurulmadığını denetlersin. Bağlantı kurulunca WiFi.localIP() ile aldığın IP adresini seri porta yazdırırsın.
STA modu nedir ve ESP32 bir ağa nasıl bağlanır?
STA modu, ESP32'nin bir erişim noktasına (modem, router, telefon hotspot'u) istemci olarak bağlandığı çalışma biçimidir. Telefonun ya da dizüstü bilgisayarın Wi-Fi'ye bağlanması ile aynı mantıktır: ağı başka bir cihaz kurar, ESP32 o ağa katılır. Karşıt biçim AP (erişim noktası) modudur; orada ESP32 kendi ağını yayar ve diğer cihazlar ona bağlanır. Bu yazıda yalnızca STA modunu ele alıyoruz.
Bağlantı akışı dört adımdan oluşur:
- Modu seç:
WiFi.mode(WIFI_STA)kartı istemci olarak çalışacak şekilde ayarlar. - Bağlanmayı başlat:
WiFi.begin(ssid, password)çağrısına ağın adını (SSID) ve parolasını verirsin. - Durumu kontrol et:
WiFi.status()bağlantının durumunu döndürür. DeğerWL_CONNECTEDise kart ağa bağlanmıştır. - IP adresini oku: Bağlantı kurulduktan sonra
WiFi.localIP()kartın ağdaki adresini verir.
IP adresi, kartın yerel ağdaki kimliği gibidir. Modemin DHCP hizmeti bağlanan her cihaza bir adres atar; ESP32 de bağlandığı anda bu adresi alır. Bilgisayarın aynı ağdaysa bu adres üzerinden karta ulaşabilirsin. Adres modem tarafından atandığı için kart yeniden bağlandığında değişebilir. Bu yüzden her bağlantıda seri porttan okumak sağlıklı bir alışkanlıktır.
Çalışan ESP32 Wi-Fi bağlantı kodu ve satır satır açıklaması

Aşağıdaki örnek Arduino IDE ile ESP32 kartına yüklenebilir. AG_ADI ve PAROLA yerine kendi ağ bilgilerini yazman gerekir.
#include <WiFi.h>
const char* ssid = "AG_ADI";
const char* password = "PAROLA";
const unsigned long ZAMAN_ASIMI = 15000; // milisaniye
void setup() {
Serial.begin(115200);
delay(1000);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Bağlanılıyor");
unsigned long baslangic = millis();
while (WiFi.status() != WL_CONNECTED && millis() - baslangic < ZAMAN_ASIMI) {
delay(500);
Serial.print(".");
}
Serial.println();
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Bağlandı");
Serial.print("IP adresi: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("Bağlanılamadı");
}
}
void loop() {
}
Kod bloklarının görevi
#include <WiFi.h>: Arduino-ESP32 çekirdeğiyle gelen Wi-Fi kütüphanesini projeye ekler.ssidvepassword: Ağ bilgilerini en üstte sabit olarak toplar; değiştirmen gerektiğinde tek yere bakarsın.Serial.begin(115200): Seri port iletişimini başlatır. Hızın seri port monitöründeki ayarla eşleşmesi gerekir; ayrıntısı bir sonraki bölümün konusu.WiFi.mode(WIFI_STA)veWiFi.begin(): Kartı istemci moduna alır ve bağlantı girişimini başlatır. Sonuç bu satırlarda değil, durum kontrolünde anlaşılır.whiledöngüsü: Bağlantı kurulana kadar ya da süre dolana kadar yarım saniyede bir nokta yazdırır.millis()kartın açılışından beri geçen süreyi verir;baslangicile farkı alarak beklemenin 15 saniyeyi aşmasını engelleriz.ifbloğu: Döngü bitince sonucu yorumlar. Bağlandıysa IP adresini, bağlanamadıysa uyarı mesajını yazar.
Sonsuz döngü yerine zaman aşımı kullanmanın nedeni teşhistir. Parola yanlışsa ya da ağ menzilde değilse sonsuz döngü ekranda yalnızca nokta üretir ve program hiç ilerlemez. Zaman aşımı ise bir sonuç mesajı verir; böylece sorunu aramaya başlayabilirsin.
Seri port monitöründe beklenen çıktı
Bağlantı başarılıysa şuna benzer bir çıktı görürsün (IP adresi senin ağına göre farklı olacaktır):
Bağlanılıyor......
Bağlandı
IP adresi: 192.168.1.42
Süre dolduğunda ise 15 saniye boyunca yaklaşık 30 nokta yazılır ve ardından hata mesajı gelir:
Bağlanılıyor..............................
Bağlanılamadı
Güvenlik uyarısı: Kodunu forumda, bir repoda ya da ekran görüntüsüyle paylaşırken SSID ve parolayı açıkta bırakma; yerine AG_ADI ve PAROLA gibi yer tutucular yaz. Parolayı ana koddan ayırıp ayrı bir dosyada tutmak da paylaşım sırasında kazara sızmayı azaltan iyi bir alışkanlıktır.
Serial.begin hızı seri port monitörüyle neden eşleşmeli?

Seri iletişimde ESP32 ile bilgisayar birbirini ortak bir saat sinyali olmadan dinler. Bu yüzden iki tarafın da saniyede kaç sinyal değişimiyle konuşulacağı konusunda anlaşmış olması gerekir. Bu hıza baud denir. Kodundaki Serial.begin(115200) satırı ESP32 tarafının hızını belirler, seri port monitöründeki hız seçimi ise bilgisayar tarafının hızını belirler. İkisi aynı değilse bilgisayar gelen sinyalleri yanlış aralıklarla okur.
Belirti genellikle şu ikisinden biridir: monitörde ⸮ ya da rastgele semboller görünür, ya da ekran boş kalır. Kartın çalışıp çalışmadığını bu çıktıdan anlayamazsın. Oysa sorun Wi-Fi'de değil, yalnızca iki tarafın hızındadır. Bu yazıdaki örnekte 115200 kullanılıyor; başka bir değer seçmek de mümkündür, önemli olan iki tarafın aynı değeri taşımasıdır.
Düzeltmek için şu adımları izle:
- Arduino IDE'de seri port monitörünü aç.
- Monitördeki hız seçeneğini koddaki değere, yani 115200'e ayarla.
- Kartın programı baştan çalıştırması için üzerindeki EN ya da RESET tuşuna bas.
Son adım önemlidir: kart bağlantı mesajlarını açılışta yazdığı için, hızı düzelttikten sonra yeniden başlatmazsan bu mesajları kaçırmış olabilirsin. Çıktı hâlâ gelmiyorsa Araçlar menüsünde doğru kartın ve doğru portun seçili olduğunu da kontrol et.
ESP32 Wi-Fi'ye bağlanmıyorsa kontrol edilecek üç nokta
Bağlantı kurulamadığında sırayla şu üç noktaya bak. Çoğu durumda sorun bunlardan birindedir.
1. SSID ve parola doğru mu?
Ağ adı ve parola karakter karakter aynı olmalıdır. Büyük küçük harf farkı, kopyalarken gelen görünmez bir baştaki ya da sondaki boşluk, ağ adındaki Türkçe karakterler ve benzer görünen harflerin karışması sık görülen nedenlerdir. Ağ adını elle yazmak yerine telefonundaki ya da modem arayüzündeki hâlinden kopyalayıp tırnak içinde boşluk kalmadığından emin ol. Şüphe duyuyorsan sınama için ağ adı sade, Türkçe karakter içermeyen bir ağ kullanabilirsin.
2. Ağ ESP32'nin desteklediği bantta mı?
Espressif'in resmî dokümantasyonuna göre klasik ESP32 Wi-Fi'yi 2.4 GHz bandında kullanır. Router ya da telefonun hotspot'u yalnızca 5 GHz yayın yapıyorsa kart o ağı göremez ve bağlanamaz. Çift bantlı modemlerde iki bant bazen aynı ağ adıyla yayınlanır; bu durumda hangi banda bağlanacağını cihaz seçer. Modem ayarlarından iki bandın adlarını ayırmak (örneğin sonuna 2G ve 5G eklemek) hangi ağa bağlandığını netleştirir. Telefonunun hotspot ayarlarında bant seçeneği varsa 2.4 GHz'i seçebilirsin.
Bir sınır var: ESP32 ailesinde farklı çip varyantları bulunur ve bant desteği varyanta göre değişebilir. Elindeki kartın hangi çiple geldiğini öğrenip o modelin dokümantasyonuna bakmak en güvenli yoldur.
3. Seri hız eşleşiyor mu?
Bağlantı aslında kurulmuş olabilir, ama monitördeki hız yanlışsa IP adresi ya da durum mesajları okunaklı görünmez. Bu yüzden önceki bölümdeki hız ve yeniden başlatma adımlarını, bağlanamıyor sonucuna varmadan önce mutlaka uygula.
Seri port çıktısına bakarak üç durumu ayırma: teşhis kontrol listesi
Bağlantı sorununu çözmenin en hızlı yolu, seri port monitöründe tam olarak ne gördüğüne bakmaktır. Aşağıdaki tablo, görülen çıktıyı en olası nedene ve ilk bakılacak yere eşler.
| Görülen çıktı | Büyük olasılıkla neden | Önce bakılacak yer |
|---|---|---|
| Hiç çıktı yok ya da anlamsız karakterler | Seri hız uyuşmazlığı, yanlış port ya da kart seçimi, kartın yeniden başlatılmaması | Monitördeki hız ile koddaki Serial.begin değeri, araçlar menüsündeki port ve kart seçimi, kartın reset düğmesi |
| Noktalar akıyor ama bağlanılamıyor, zaman aşımı mesajı geliyor | SSID ya da parola hatası, desteklenmeyen bant, zayıf sinyal | Koddaki ağ adı ve parola (büyük küçük harf dahil), modemin yayın bandı, kartın modeme uzaklığı |
| "Bağlandı" yazıyor ama IP görünmüyor ya da 0.0.0.0 yazıyor | IP'nin durum kontrolü yapılmadan erken okunması, bekleme döngüsünün tamamlanmaması, adres atamasının henüz bitmemiş olması | Bekleme döngüsünün WiFi.status() sonucunu gerçekten beklediği, IP satırının döngüden sonra yazdırıldığı |
Kontrol sırası
- Hız ve port: Monitörün hızını koddaki değere eşitle, doğru portu ve kartı seç, ardından kartı yeniden başlat.
- Ağ bilgisi: SSID ve parolayı tırnak içinde, boşluk ve harf farkına dikkat ederek yeniden yaz.
- Bant: Modemin yayın bandının kartının desteklediği bantla uyuştuğunu, kartının dokümantasyonundan doğrula. Gerekirse telefonundan açtığın bir paylaşımlı ağla dene.
- Bekleme akışı: Bağlantı durumunu kontrol eden döngü bitmeden IP'yi yazdırma. Döngüden sonra birkaç saniye geçmesine rağmen adres yoksa kartı ve modemi yeniden başlatıp çıktıyı baştan izle.
- Sinyal: Kartı modeme yaklaştır ve yeniden dene.
Bu sırayı her seferinde baştan uygulamak, tahmin yürütmek yerine tek bir değişkeni ayırarak ilerlemeni sağlar. Seri monitördeki her satır donanımın sana verdiği bir ipucudur; bağlantı kurulduğunda ekrandaki IP adresi de ilk somut çıktın olacaktır.