ESP8266 PWM Kullanımı
Bu yazımızda, Arduino IDE ve MicroPython kullanarak ESP8266 PWM sinyallerinin nasıl üretileceğini bakacağız. Örnek olarak, zaman içinde görev döngüsünü(duty cycle) değiştirerek LED parlaklığını azaltacağız.

Arduino IDE Bölümü
Arduino IDE ile ESP8266 pinlerinde bir PWM sinyali oluşturmak için analogWrite(pin, value) kullanılır. Değer 0 ile 255 arasında bir tamsayıdır.
3.0’dan önceki ESP8266 sürümleri için varsayılan aralık 0 ile 1023 arasındadır. PWM aralığı analogWriteRange(new_range) çağrılarak değiştirilebilir.
PWM ile ilgili diğer kılavuzları da okumak isteyebilirsiniz:
Bu içeriğe devam etmeden önce, Arduino IDE’nizde ESP8266 eklentisinin kurulu olması gerekir. ESP8266’yı Arduino IDE’ye kurmak için buradaki yazımıza göz atabilirsiniz.
ESP8266 PWM
ESP8266’da var olan GPIO’lar 0V veya 3.3V çıkışa ayarlanabilir, ancak aralarında herhangi bir voltaj çıkışı yapamazlar. Bununla birlikte, darbe genişlik modülasyonu (PWM) kullanarak “sahte” orta seviye voltajlar üretebilirsiniz; bu proje için değişen seviyelerde LED parlaklığını bu şekilde üreteceksiniz.
Bir LED’in voltajını YÜKSEK ve DÜŞÜK arasında çok hızlı değiştirirseniz, gözleriniz LED’in açılıp kapanma hızına yetişemez; sadece parlaklıkta bazı dereceler göreceksiniz.

Temel olarak PWM böyle çalışır – çok yüksek bir frekansta YÜKSEK ve DÜŞÜK arasında değişen bir çıktı üreterek.
Görev döngüsü(duty cycle), LED’in YÜKSEK olarak ayarlandığı sürenin kesridir. Aşağıdaki şekil PWM’nin nasıl çalıştığını göstermektedir.

Yüzde 50’lik bir görev döngüsü, yüzde 50 LED parlaklığı ile sonuçlanır, 0’lık bir görev döngüsü, LED’in tamamen kapalı olduğu ve 100’lük bir görev döngüsü, LED’in tamamen açık olduğu anlamına gelir. Görev döngüsünü değiştirmek, farklı parlaklık seviyelerini nasıl ürettiğinizdir.
analogWrite()
Belirli bir pin üzerinde bir PWM sinyali üretmek için aşağıdaki işlevi kullanırsınız:
analogWrite(pin, deger);
- pin: PWM, 0 ila 16 pinlerinde kullanılabilir
- deger: varsayılan olarak 255 olan 0 ile PWMRANGE aralığında olmalıdır. Değer 0 olduğunda, o pin üzerinde PWM devre dışı bırakılır. 255 değeri %100 görev döngüsüne karşılık gelir
PWM aralığını şu şekilde değiştirebilirsiniz:
analogWriteRange(yeni_aralik);
Varsayılan olarak, ESP8266 PWM frekansı 1kHz’dir. PWM frekansını şu şekilde değiştirebilirsiniz:
analogWriteFreq(yeni_frekans);
Geçerli değerler 100Hz ile 40000Hz arasındadır.
PWM ile LED Parlaklık Kontrolü
Bu bölümde, projelerinizde PWM’yi nasıl kullanacağınızı görmeniz için bir LED’i karartan ve aydınlatan basit bir örnek oluşturacağız. Aşağıdaki parçalara ihtiyacınız olacak:
- ESP8266 Geliştirme Kartı
- 3mm ya da 5mm LED
- 330Ω Direnç
- Bağlantı kabloları
- Devre tahtası
Devre Şeması
Kodu yükledikten sonra, aşağıdaki şematik diyagramda gösterildiği gibi ESP8266’nıza bir LED bağlayın. LED’i GPIO 2‘ye bağlıyoruz, ancak diğer uygun GPIO’ları kullanabilirsiniz.

Arduino IDE Program Kodu
const int ledPin = 2;
void setup() {
}
void loop() {
// parlaklik artiyor
for(int dutyCycle = 0; dutyCycle < 255; dutyCycle++){
analogWrite(ledPin, dutyCycle);
delay(1);
}
// parlaklik azaliyor
for(int dutyCycle = 255; dutyCycle > 0; dutyCycle--){
analogWrite(ledPin, dutyCycle);
delay(1);
}
}
Kodun nasıl çalıştığını öğrenmek için bu bölümü okumaya devam edin veya bir sonraki bölüme geçin.
LED’in bağlı olduğu pini tanımlayarak başlıyoruz. Bu durumda LED, GPIO 2’ye (D4) bağlıdır.
const int ledPin = 2;
loop() kısmında, LED parlaklığını artırmak için görev döngüsünü(duty cycle) 0 ile 255 arasında değiştiriyoruz.
for(int dutyCycle = 0; dutyCycle < 255; dutyCycle++){
analogWrite(ledPin, dutyCycle);
delay(1);
}
Ardından, parlaklığı azaltmak için 255 ile 0 arasında değerler döndürüyoruz
for(int dutyCycle = 255; dutyCycle > 0; dutyCycle--){
analogWrite(ledPin, dutyCycle);
delay(1);
}
LED parlaklığını ayarlamak için, PWM sinyalini almak istediğiniz yerde GPIO’yu argüman olarak kabul eden analogWrite() işlevini ve görev döngüsünü ayarlamak için 0 ile 255 arasında bir değer kullanmanız gerekir.
Kodun Yüklenmesi
Arduino IDE’nizde Tools > Board‘a gidin ve ESP8266 modelinizi seçin (ESP-01 kullanıyorsanız, “Generic ESP8266 Module”ü seçin). Eğer NodeMCU kiti kullanıyorsanız, NodeMCU 1.0 kartını seçin.
Tools > Port‘a gidin ve ESP8266’nın bağlı olduğu COM bağlantı noktasını seçin.
ESP-01 kullanıyorsanız, kodu yüklemek için bir FTDI programlayıcıya veya Seri Adaptöre ihtiyacınız vardır. Eğer ESP-01 kullanmıyorsanız doğrudan USB kablosu ile kartınızı bilgisayara takabilirsiniz fakat, ESP-01 kullanıyorsanız FTDI programlayıcı bu şekilde bağlamanız gerekir:

ESP-01 | FTDI Programlayıcı |
RX | TX |
TX | RX |
CH_PD | 3.3V |
GPIO 0 | GND |
VCC | 3.3V |
GND | GND |
Sonuçlar
Kodu yükledikten sonra, GPIO 2’ye bağlı LED’in parlaklığı zamanla artmalı ve azalmalıdır.

PWM sinyalinin zaman içinde nasıl değiştiğini görmek için GPIO 2’ya osiloskopa bağlayabilirsiniz.

MicroPython Bölümü
Bu bölüme devam edebilmek için ESP32 veya ESP8266 kartlarınızda MicroPython ürün yazılımının kurulu olması gerekir. Ayrıca kodu yazıp kartınıza yüklemek için bir IDE’ye ihtiyacınız var. Thonny IDE veya uPyCraft IDE kullanmanızı öneririz:
Devre Şeması
Bu örnek için, ESP kartınıza bir LED bağlayın. LED’i her iki kartta da GPIO 5’e bağlayacağız, ancak başka bir uygun PWM pini seçebilirsiniz. ESP32 Pin Giriş çıkış Referans Kılavuzumuzda ya da ESP8266 Pin Giriş çıkış Referans Kılavuzumuzda kullanabileceğiniz en iyi pinlere bakmayı unutmayın.
Gerekli Malzemeler
- ESP8266 ya da ESP32
- 3mm ya da 5mm LED
- 330Ω direnç
- Devre tahtası
- Bağlantı kabloları
Devre Şeması


MicroPython Kodu
Görev döngüsünü artırarak LED parlaklığını zaman içinde değiştiren kod. Bu kod ESP32 ve ESP8266 ile çalışır.
from machine import Pin, PWM
from time import sleep
frequency = 5000
led = PWM(Pin(5), frequency)
while True:
for duty_cycle in range(0, 1024):
led.duty(duty_cycle)
sleep(0.005)
Bir PWM pini oluşturmak için, machine modülünden pin sınıfına ek olarak PWM sınıfını içe aktarırız.
from machine import Pin, PWM
Ardından led adında bir PWM nesnesi oluşturalım.
Bir PWM nesnesi oluşturmak için parametre olarak, bağlı olduğu pini, sinyal frekansını ve görev döngüsünü girmeniz gerekir.
Frekans: Frekans 0 ile 78125 arasında bir değer olabilir. LED parlaklığını kontrol etmek için 5000 Hz frekans kullanılabilir.
Görev döngüsü(duty cycle): Görev döngüsü 0 ile 1023 arasında bir değer olabilir. Burada 1023, %100 görev döngüsüne (tam parlaklık) ve 0, %0 görev döngüsüne (yanmayan LED) karşılık gelir.
Görev döngüsünü while döngüsünde ayarlayacağız, bu nedenle görev döngüsü parametresini geçmemize gerek yok. PWM nesnesini başlatırken görev döngüsünü ayarlamazsanız, varsayılan olarak 0 olacaktır.
Görev döngüsünü ayarlamak için PWM nesnesindeki duty() yöntemini kullanın ve görev döngüsünü bir argüman olarak iletin:
led.duty(duty_cycle)
while döngüsünün içinde, her değişiklik arasında 5 ms aralıklarla görev döngüsünü her döngüde 1 artıran bir for döngüsü oluşturuyoruz.
for duty_cycle in range(0, 1024):
led.duty(duty_cycle)
sleep(0.005)
range() işlevi aşağıdaki sözdizimine sahiptir:
range(start, stop, step)
Start: Hangi konumdan başlayacağınızı belirten bir sayı. 0 görev döngüsü ile başlamak istiyoruz;
Stop: o değer hariç hangi konumda durmak istediğimizi belirten bir sayı. Maksimum görev döngüsü 1023’tür, her döngüde 1 artırdığımız için son değer 1023+1 olmalıdır. Yani, 1024 kullanacağız.
Step: artışı belirten bir tam sayı. Varsayılan olarak, artış 1’dir.
Her bir for döngüsünde, LED’in görev döngüsünü mevcut görev_döngüsü değerine ayarladık:
led.duty(duty_cycle)
Bundan sonra, duty_cycle değişkeni 1 artırılır.
Sonuç
Thonny IDE veya uPyCraft IDE kullanarak kodu ESP kartınıza kaydedin. GPIO 5’e bağlı LED, zaman içinde parlaklığı artırmalıdır.

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.