Wifi ağı ve WiFi.h Kütüphanesi için Rehber

Bu bölümde, ESP32/ESP8266 projelerinde kullandığımız WiFi.h kütüphanesini sıfırdan öğreniyoruz. Her fonksiyonu basit örneklerle ve günlük hayattan benzetmelerle açıklayacağız!

WiFi.h Kütüphanesi Nedir?

WiFi.h, ESP32 ve ESP8266 kartlarının kablosuz ağlara bağlanmasını sağlayan resmi Arduino kütüphanesidir. Tıpkı bilgisayarınızın veya telefonunuzun Wi-Fi ayarları gibi, kartınızın da internete bağlanmasını yönetir.

En Çok Kullanılan 10 WiFi Fonksiyonu

FonksiyonNe Yapar?Örnek KullanımNot
WiFi.begin(ssid, pass)Wi-Fi ağına bağlanma sürecini başlatırWiFi.begin("EvWiFi", "sifre123");Bağlantı asenkron çalışır, hemen bağlanmaz!
WiFi.status()Mevcut bağlantı durumunu döndürürif(WiFi.status() == WL_CONNECTED)Durum kodlarını tablodan kontrol edin
WiFi.localIP()Kartın ağdaki IP adresini verirSerial.println(WiFi.localIP());Router’ınızdan atanan adresi gösterir
WiFi.disconnect()Mevcut bağlantıyı keserWiFi.disconnect();Yeniden bağlanmadan önce kullanılır
WiFi.SSID()Bağlı olduğu ağın adını döndürürSerial.println(WiFi.SSID());Hangi ağa bağlı olduğunuzu görmek için
WiFi.RSSI()Sinyal gücünü dBm cinsinden verirSerial.println(WiFi.RSSI());-50 güçlü, -80 zayıf sinyal demektir
WiFi.macAddress()Kartın fiziksel MAC adresini verirSerial.println(WiFi.macAddress());Her cihazın benzersiz kimlik numarası
WiFi.scanNetworks()Çevredeki ağları tarar ve listelerint n = WiFi.scanNetworks();Döndürdüğü sayı, bulunan ağ sayısıdır
WiFi.isConnected()Bağlantı var mı? (true/false)if(WiFi.isConnected()) { ... }Kısa ve net kontrol için ideal
WiFi.mode(mode)Çalışma modunu ayarlarWiFi.mode(WIFI_STA);STA=Client, AP=Erişim Noktası, BOTH=İkisi

Wi-Fi Durum Kodları

🟢 Başarı Durumları:
3 - WL_CONNECTED “Bağlandık, işleme devam!”

🟡 Bekleme/Bilgi Durumları:
0 - WL_IDLE_STATUS “Henüz başlamadı”
2 - WL_SCAN_COMPLETED “Tarama bitti”

🔴 Hata Durumları:
1 - WL_NO_SSID_AVAIL “Ağ yok (isim yanlış/menzil dışı)”
4 - WL_CONNECT_FAILED “Şifre yanlış veya erişim reddedildi”
5 - WL_CONNECTION_LOST “Bağlantı koptu”
6 - WL_DISCONNECTED “Bağlantı manuel kesildi”

Örnek 1: Bağlantı Durumunu Yazdırma

#include <WiFi.h>
#include "arduino_secrets.h"

// Wi-Fi bilgileri harici dosyadan alınıyor
const char* ssid = SECRET_SSID;
const char* password = SECRET_PASS;

// Wi-Fi durumunu okunabilir şekilde yazdıran fonksiyon
void printWiFiStatus() {
  int status = WiFi.status();

  Serial.print("Durum: ");
  switch(status) {
    case WL_IDLE_STATUS:
      Serial.println("Bekleniyor...");
      break;
    case WL_NO_SSID_AVAIL:
      Serial.println("Ag bulunamadi!");
      break;
    case WL_CONNECTED:
      Serial.println("Baglandi!");
      Serial.print("IP: ");
      Serial.println(WiFi.localIP());
      break;
    case WL_CONNECT_FAILED:
      Serial.println("Baglanti basarisiz (sifre?)");
      break;
    default:
      Serial.print("Bilinmeyen durum: ");
      Serial.println(status);
  }
}

void setup() {
  Serial.begin(115200);
  delay(1000);

  Serial.println("ESP32 WiFi Ornegi");
  Serial.println("Baglanti baslatiliyor...");

  // Wi-Fi bağlantısını başlat
  WiFi.begin(ssid, password);

  // Bağlantı tamamlanana kadar bekle
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    printWiFiStatus();
  }

  // Bağlantı başarılı olduğunda detayları yazdır
  Serial.println();
  Serial.println("WiFi baglantisi tamamlandi!");
  Serial.print("Ag Adi: ");
  Serial.println(WiFi.SSID());
  Serial.print("IP Adresi: ");
  Serial.println(WiFi.localIP());
  Serial.print("Sinyal Gucu: ");
  Serial.print(WiFi.RSSI());
  Serial.println(" dBm");
  Serial.print("MAC Adresi: ");
  Serial.println(WiFi.macAddress());
}

void loop() {
  // Bağlantı durumunu periyodik olarak kontrol et
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("Baglanti koptu, durum kontrol ediliyor...");
    printWiFiStatus();
  }
  
  delay(5000);
}

🔹 Örnek 2: Çevredeki Ağları Listeleme

#include "WiFi.h"

void setup() {
  Serial.begin(115200);
  Serial.println("Ağlar taranıyor...");
  
  int n = WiFi.scanNetworks();
  Serial.println("Tarama tamamlandı.");

  if (n == 0) {
    Serial.println("Hiçbir ağ bulunamadı.");
  } else {
    Serial.println("Bulunan ağlar:");
    for (int i = 0; i < n; ++i) {
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println();
    }
  }
}
void loop() {
  // Tarama bir kez yapıldıktan sonra boş bırakılabilir
}

Öğrenci Alıştırmaları

Bu alıştırmaları yaparak WiFi kütüphanesini pekiştirebilirsiniz:

Görev: ESP32’yi Wi-Fi’ye bağlayın ve Serial Monitor’de şu çıktıyı alın:

Bağlandı!
IP Adresi: 192.168.1.XX
Sinyal Gücü: -65 dBm
Ağ Adı: Fiber_XXXX

İpucu: WiFi.localIP(), WiFi.RSSI() ve WiFi.SSID() fonksiyonlarını kullanın.

Görev: Bağlantı koptuğunda otomatik tekrar bağlanan, 3 denemeden sonra hata veren ve LED ile durum gösteren (Yeşil=Bağlı, Kırmızı=Hata, Sarı=Beklemede) bir sistem kurun.

İpucu: WiFi.onEvent() fonksiyonunu araştırın!

Öğrencilerden Gelen Sık Sorular

Q: WiFi.begin() neden hemen bağlanmıyor?

C: Çünkü bu fonksiyon asenkron çalışır. Yani “bağlanmaya başla” der ve arka planda işlem devam eder. Bu yüzden while(WiFi.status() != WL_CONNECTED) döngüsü ile bağlantı tamamlanana kadar bekleriz.

Q: RSSI değeri negatif, bu normal mi?

C: Evet! RSSI (Received Signal Strength Indicator) dBm cinsindendir ve negatif değerler normaldir.
• -30 dBm ≈ Mükemmel (router yanınızda)
• -50 dBm ≈ Çok iyi
• -70 dBm ≈ Kabul edilebilir
• -80 dBm ≈ Zayıf, kopabilir
• -90 dBm ≈ Bağlantı yok

Q: ESP32 neden 5GHz ağlara bağlanamıyor?

C: Çoğu ESP32 modülü sadece 2.4GHz bandını destekler. Bu bir donanım sınırlamasıdır. Eğer router’ınız çift bantlıysa, 2.4GHz ağını ayrı bir SSID ile yayınlayın veya “Smart Connect” özelliğini kapatın.

Q: arduino_secrets.h yerine doğrudan şifre yazsam ne olur?

C: Teknik olarak çalışır , ama:
• Kodunuzu GitHub’a yüklerseniz şifreniz herkese açık olur
• Şifre değiştirdiğinizde her dosyayı güncellemeniz gerekir
• Ekip çalışmasında herkes kendi şifresini kullanamaz

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir