ESP32 ile Wi-Fi Web Server Üzerinden Kablosuz LED Kontrolü

👤 Yazar: ozcan 📅 Tarih: 04.06.2026 17:01 👁️ Görüntüleme: 5

ESP32 ile Wi-Fi Web Server Üzerinden Kablosuz LED Kontrolü

Bu uygulamada, ESP32'nin entegre Wi-Fi modülünü kullanarak yerel ağda (LAN) çalışan asenkron bir HTTP Web Sunucusu oluşturacağız. Bu sistem sayesinde, ESP32 ile aynı ağa bağlı olan herhangi bir bilgisayar, akıllı telefon veya tablet tarayıcısından bir arayüze erişerek yerleşik LED'i kablosuz olarak uzaktan kontrol edebileceksiniz.

1. Gerekli Malzemeler ve Donanım Mimarisi

esp32 wifi led resmi

2. Devre Şeması ve Pin Konfigürasyonu

ESP32'nin lojik çıkış akımı (maksimum 20mA) doğrudan bir adet LED'i sürmek için yeterlidir. Wi-Fi sinyalizasyonunun ve işlemcinin kararlı çalışması için yüksek akımlı yüklerin transistör üzerinden sürülmesi gerekse de, bu temel prototipte doğrudan GPIO bağlantısı kullanılacaktır.

ESP32 Wi-Fi Web Server LED Bağlantı Şeması

Görsel 1: ESP32 Kablosuz Web Sunucusu Devre Şeması

3. Wi-Fi Web Sunucu Kod Bloğu

Aşağıdaki kaynak kod, ESP32'yi istasyon (STA) moduna alır, belirttiğiniz yerel ağa bağlanır ve 80 numaralı standart HTTP portunu dinlemeye başlar. Tarayıcıdan gelen HTTP GET isteklerini ("GET /H" veya "GET /L") parse ederek (ayrıştırarak) ilgili GPIO çıkışını lojik durumuna ulaştırır.

#include <WiFi.h>

// Ağ Kimlik Bilgileri (Kendi ağınıza göre güncelleyin)
const char* ssid     = "WIFI_AGINIZIN_ADI";
const char* password = "WIFI_SIFRENIZ";

// Web sunucusunu standart HTTP portu olan 80. portta başlatıyoruz
WiFiServer server(80);

#define LED_PIN 2
String HTTP_ISTEK = ""; // Gelen HTTP istek satırlarını tutacak değişken

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW); // Başlangıçta LED kapalı

  // Wi-Fi ağına bağlantı başlatma
  Serial.print("Baglanti kuruluyor: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  // Bağlantı sağlanana kadar döngüde bekle
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  // Bağlantı başarılı, IP adresini seri monitöre yazdır
  Serial.println("");
  Serial.println("Wi-Fi baglantisi saglandi.");
  Serial.print("Yerel IP Adresi: ");
  Serial.println(WiFi.localIP());
  
  server.begin(); // Sunucuyu aktif et
}

void loop() {
  WiFiClient client = server.available(); // Gelen istemciyi (tarayıcıyı) kontrol et

  if (client) {                             // Eğer bir istemci bağlandıysa
    Serial.println("Yeni Istemci Baglandi.");
    String akim_satiri = "";                // İstemciden gelen verileri okumak için string
    
    while (client.connected()) {            // İstemci bağlı olduğu sürece döngüyü çalıştır
      if (client.available()) {             // Okunabilir veri var ise
        char c = client.read();             // Bir bayt oku
        Serial.write(c);
        HTTP_ISTEK += c;
        
        if (c == '\n') {                    // Eğer satır sonu geldiyse
          // Eğer akım satırı boşsa, bu HTTP isteğinin bittiğini ve boş bir satır geldiğini gösterir
          if (akim_satiri.length() == 0) {
            // Standart HTTP yanıt başlığı (200 OK) gönderiliyor
            client.print("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n");
            
            // HTML Sayfa İçeriği ve CSS Tasarımı
            client.print("<!DOCTYPE html><html>");
            client.print("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.print("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.print(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;");
            client.print("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.print(".button2 {background-color: #555555;}</style></head>");
            
            client.print("<body><h1>ESP32 Web Server LED Kontrol</h1>");
            
            // Gelen isteğe göre LED durumunu değiştir ve arayüzü güncelle
            if (HTTP_ISTEK.indexOf("GET /H") != -1) {
              digitalWrite(LED_PIN, HIGH);
              client.print("<p>LED Durumu: ACIK</p>");
              client.print("<p><a href=\"/L\"><button class=\"button button2\">KAPAT</button></a></p>");
            } else if (HTTP_ISTEK.indexOf("GET /L") != -1) {
              digitalWrite(LED_PIN, LOW);
              client.print("<p>LED Durumu: KAPALI</p>");
              client.print("<p><a href=\"/H\"><button class=\"button\">AC</button></a></p>");
            } else {
              // İlk açılış durumu (Varsayılan olarak kapalı varsayılıyor)
              client.print("<p>LED Durumu: KAPALI</p>");
              client.print("<p><a href=\"/H\"><button class=\"button\">AC</button></a></p>");
            }
            
            client.print("</body></html>");
            break; // Döngüden çık ve istemciye veriyi gönder
          } else {
            akim_satiri = ""; // Yeni satıra geçildiğinde temizle
          }
        } else if (c != '\r') {
          akim_satiri += c; // Gelen karakteri mevcut satıra ekle
        }
      }
    }
    HTTP_ISTEK = ""; // İstek stringini bir sonraki bağlantı için sıfırla
    client.stop();    // Bağlantıyı güvenli şekilde kapat
    Serial.println("Istemci Baglantisi Kesildi.");
  }
}

4. Uygulama ve Test Adımları

  1. Kod içerisindeki ssid ve password değişkenlerine evinizdeki veya ofisinizdeki Wi-Fi ağının bilgilerini eksiksiz yazın.
  2. ESP32'yi bilgisayara bağlayıp kodu yükleyin. Yükleme tamamlandıktan sonra Arduino IDE üzerinden Seri Port Ekranını (Serial Monitor) açın ve baud hızını 115200 olarak ayarlayın.
  3. ESP32 ağa bağlandığında seri ekranda Yerel IP Adresi: 192.168.1.XX benzeri bir IP adresi basılacaktır.
  4. Aynı Wi-Fi ağına bağlı olan telefon veya bilgisayarınızın web tarayıcısını (Chrome, Safari, Edge vb.) açıp adres çubuğuna bu IP adresini yazarak entegre kontrol paneline erişebilirsiniz.

Web sayfası Led açmaWeb sayfası Led kapama

Gelişmiş Ağ ve Güvenlik Notu:
  • Statik IP İhtiyacı: ESP32 her yeniden başladığında modeminizden (DHCP) farklı bir IP adresi alabilir. Sık erişilen projelerde IP adresinin sabit kalması için kod içerisine WiFi.config() fonksiyonu eklenerek statik IP ataması yapılması veya modem arayüzünden ESP32'nin MAC adresine IP rezervasyonu yapılması önerilir.
  • Ağ Sınırlandırması: Bu web sunucusu yerel ağ mimarisinde çalışır. Bu LED'i ev dışından (mobil veri veya başka bir internet ağından) kontrol edebilmek için modemden port yönlendirme (Port Forwarding) yapılması veya MQTT, Firebase, Blynk gibi harici bir bulut (Cloud) protokolünün projeye entegre edilmesi gerekir.

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
Sayfa Başı
Yenidir CMS V0.1