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:
| Durum | Anlamı |
|---|---|
WL_CONNECTED | Bağlantı kuruldu |
WL_NO_SSID_AVAIL | Ağ bulunamadı (isim yanlış veya menzil dışı) |
WL_CONNECT_FAILED | Şifre yanlış |
WL_IDLE_STATUS | Bağlanmaya çalışıyor |
WL_DISCONNECTED | Bağlantı kesildi |
WL_CONNECTION_LOST | Bağ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ü
| RSSI | Kalite |
|---|---|
| −30 ile −50 dBm | Mükemmel |
| −50 ile −60 dBm | İyi |
| −60 ile −70 dBm | Kabul edilebilir |
| −70 ile −80 dBm | Zayı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
| Belirti | Neden |
|---|---|
| Hiç bağlanmıyor | Ağ 5 GHz — ESP kartları yalnızca 2,4 GHz destekler |
WL_CONNECT_FAILED | Şifre yanlış |
WL_NO_SSID_AVAIL | SSID yanlış yazılmış veya menzil dışı |
| Bağlanıyor sonra resetleniyor | Besleme yetersiz — Wi-Fi tepe akımı karşılanamıyor |
| Bağlantı sık kopuyor | RSSI zayıf; modem kanalı kalabalık |
| Türkçe karakterli SSID çalışmıyor | Ağ adında Türkçe karakter kullanmayın |
| Bağlanıyor ama internet yok | DNS ayarı eksik; sabit IP kullanıyorsanız DNS belirtin |
| Her açılışta çok yavaş bağlanıyor | DHCP 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