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.

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.
GPIO 2 pinine bağlanır.GND (Toprak) hattına çekilir.
Görsel 1: ESP32 Kablosuz Web Sunucusu Devre Şeması
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.");
}
}
ssid ve password değişkenlerine evinizdeki veya ofisinizdeki Wi-Fi ağının bilgilerini eksiksiz yazın.115200 olarak ayarlayın.Yerel IP Adresi: 192.168.1.XX benzeri bir IP adresi basılacaktır.

WiFi.config() fonksiyonu eklenerek statik IP ataması yapılması veya modem arayüzünden ESP32'nin MAC adresine IP rezervasyonu yapılması önerilir.Henüz yorum yapılmamış. İlk yorumu siz yapın!