Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Bu rehber, ESP32 geliştirme kartı kullanarak bir buton ile LED kontrol etme işlemini adım adım açıklar. Butona basıldığında LED’in yanması, bırakıldığında sönmesi prensibine dayanan bu proje, dijital giriş/çıkış kavramlarını öğrenmek için temel bir uygulamadır.
Buton (Push Button): Buton, devrede mekanik bir anahtar görevi görür. Basıldığında iki ucu arasında elektriksel bağlantı sağlar, bırakıldığında bu bağlantı kesilir.

LED ve Direnç: LED, anot (+) ve katot (-) bacaklarına sahip bir ışık kaynağıdır. Aşırı akımdan korunması için seri bir direnç (220Ω veya 330Ω) ile kullanılmalıdır.
Pull-up Direnç: ESP32’nin dahili pull-up direnci (INPUT_PULLUP) kullanıldığında, buton serbestken pin HIGH (3.3V), basıldığında LOW (0V) okunur. Bu yapı, harici direnç ihtiyacını ortadan kaldırır.
Pull-Up ve Pull-Down bağlantı nedir?
Dijital devrelerde ve ESP32 gibi mikrodenetleyicilerde bir giriş pininin boşta kaldığında (herhangi bir yere bağlı değilken) kararsız davranmasını engellemek için kullanılan direnç bağlantı yöntemleridir. Bir dijital pin ya 1 (High) ya da 0 (Low) olmalıdır. Eğer pin hiçbir yere bağlı değilse, havadaki statik elektrikten bile etkilenip rastgele 1 ve 0 arasında gidip gelir. Buna “Floating” (Yüzen) durum denir ve sistemde hatalı tetiklemelere yol açar.
1. Pull-Up Direnci (Yukarı Çekme)
Pini bir direnç üzerinden VCC (+3.3V veya +5V) hattına bağlamaktır. Butona basılmadığında Pin sürekli High (1) seviyesindedir. Buton Basıldığında: Buton pini şaseye (GND) çeker ve pin Low (0) olur. Ters mantık çalışır (Basılmadı = 1, Basıldı = 0).
2. Pull-Down Direnci (Aşağı Çekme)
Pini bir direnç üzerinden GND (Toprak) hattına bağlamaktır. Butona basılmadığında Pin sürekli Low (0) seviyesindedir. Buton Basıldığında: Buton pini VCC’ye bağlar ve pin High (1) olur. Düz mantık çalışır (Basılmadı = 0, Basıldı = 1).
ESP32 ve Yazılımsal Çözüm
ESP32 (ve çoğu modern MCU) içerisinde dahili pull-up ve pull-down dirençleri (10 Kohm) barındırır. Yani dışarıdan fiziksel bir direnç bağlamak yerine bunu kodla aktif hale getirebilirsiniz. Bu durumda;pinMode(GPIO_PIN, INPUT_PULLUP); // Dahili pull-up aktif pinMode(GPIO_PIN, INPUT_PULLDOWN); // Dahili pull-down aktif
Neden Direnç Kullanıyoruz?
Eğer direnç kullanmadan pini doğrudan VCC’ye bağlayıp sonra butona basıp GND’ye kısa devre yaparsan, işlemciyi yakarsın. Direnç, bu kısa devreyi engelleyerek akımı sınırlar (genelde 10kΩ kullanılır).
Projede kullanılan pin atamaları:
Aşağıdaki bağlantı şemasını takip ederek devreyi kurun:

Arduino IDE’yi açın ve aşağıdaki ayarları kontrol edin:
Aşağıdaki kodu Arduino IDE editörüne yapıştırın ve ESP32 kartınıza yükleyin:
/*
* ESP32 Buton Kontrollü LED Projesi
* Buton GPIO18, LED GPIO21 pinine bağlıdır
*/
#define BUTTON_PIN 18 // Butonun bağlı olduğu GPIO pini
#define LED_PIN 21 // LED'in bağlı olduğu GPIO pini
int button_state = 0; // Buton durumunu tutan değişken
void setup() {
// LED pinini çıkış olarak ayarla
pinMode(LED_PIN, OUTPUT);
// Buton pinini dahili pull-up ile giriş olarak ayarla
// Buton serbestken: HIGH, basıldığında: LOW
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
// Butonun mevcut durumunu oku
button_state = digitalRead(BUTTON_PIN);
// Buton durumuna göre LED'i kontrol et
if (button_state == LOW) // Butona basıldıysa
digitalWrite(LED_PIN, HIGH); // LED'i yak
else // Buton serbestse
digitalWrite(LED_PIN, LOW); // LED'i söndür
}
pinMode(LED_PIN, OUTPUT): LED pinini dijital çıkış olarak yapılandırır.pinMode(BUTTON_PIN, INPUT_PULLUP): Buton pinini dahili pull-up direnç ile giriş olarak ayarlar. Bu sayede buton serbestken pin HIGH, basıldığında GND’ye bağlanarak LOW okunur.digitalRead(BUTTON_PIN): Butonun mevcut durumunu okur ve button_state değişkenine atar.if (button_state == LOW): Butona basıldığında (LOW) LED’i yakar (HIGH).else: Buton serbest bırakıldığında LED’i söndürür (LOW).Kod yüklendikten sonra:
Temel işlevi tamamladıktan sonra projeyi aşağıdaki şekilde genişletebilirsiniz:
delay(50) veya yazılımsal debounce ekleyin.S: Butona basılı değilken LED yanık kalıyor, neden?
C: INPUT_PULLUP yerine INPUT modu kullanılmış olabilir. Pull-up modunda buton serbestken pin HIGH, basıldığında LOW olur. Kodun bu mantığa uygun yazıldığından emin olun.
S: LED titriyor gibi davranıyor, ne yapmalıyım?
C: Mekanik butonlar basıldığında milisaniyelik titreşimler (bounce) oluşturabilir. Bu durumu engellemek için okuma sonrası kısa bir delay(50) ekleyebilir veya yazılımsal debounce algoritması kullanabilirsiniz.
S: Farklı GPIO pinleri kullanabilir miyim?
C: Evet, ancak GPIO 6-11 (SPI flash), GPIO 34-39 (sadece giriş) gibi özel işlevli pinlerden kaçının. GPIO 0, 2, 12, 15 gibi boot sırasında etkili olan pinlerde de dikkatli olun.
S: LED çok sönük yanıyor, sorun ne?
C: Direnç değeri çok yüksek olabilir. 220Ω veya 330Ω direnç kullanın. Ayrıca LED’in anot/katot yönünü kontrol edin.
S: Kod yüklenirken “Connecting…” mesajında takılıyor.
C: ESP32 kartınızda kod yüklerken “BOOT” butonuna basılı tutmanız gerekebilir. Ayrıca USB kablosunun veri aktarımını desteklediğinden emin olun.