ESP8266 üzerindeki hangi GPIO pinleri kullanılabilir?
Merhaba, bu yazımda sizlere ESP8266 pinout şemaları, işlevleri ve bu pinout’ları nasıl kullanabileceğiniz ile ilgili bilgi vermeye çalışacağım.
ESP8266 12-E yongası (chip) üzerinde 17 adet GPIO pini bulunmaktadır. Bu GPIO pinlerin tamamı bütün geliştirme kartları üzerinde kullanılabilir durumda değildir, bazılarının kullanılması önerilmez ve bazılarının da özel kullanım amaçları bulunmaktadır. Bu yazımda sizlere ESP8266 GPIO pinlerini nasıl doğru bir şekilde kullanabileceğinizi ve proje yaparken doğru pinleri kullanarak nasıl vakit kaybı yaşamayacağınızı göstermeye çalışacağım.
ESP8266 12-E Pin Şeması
Aşağıdaki resimde ESP8266 12-E yongasında bulunan pinlerin şemasını görebilirsiniz, eğer ESP8266 12-E yongası içeren hazır modül kullanacaksanız aşağıdaki şema işinize yarayacaktır. Ama şunu unutmayın, satılan tüm geliştirme kartlarında bu pinlerin hepsi hazır kullanılabilir durumda olmayabilir. Piyasada ESP8266 yongasına sahip GPIO sayısı, boyut ve şekil olarak çok çeşitli geliştirme kartı bulunduğunu belirtmek isterim. En yaygın kullanılan ESP8266 yongasına sahip kartlara örnek olarak ESP-01, ESP8266 12-E, NodeMCU ve Wemos D1 Mini‘yi verebilirim. Bu kartların karşılaştırmalı incelemesini yaptığım yazımı da yakında yayınlıyor olacağım.
ESP8266-01 Pin Şeması
Projelerinizde ESP8266-01 kullanacaksanız aşağıdaki pin şemasını referans olarak kullanabilirsiniz.
ESP8266 12-E NodeMCU Kit Pin Şeması
Projelerinizde ESP8266-12E NodeMCU Kit kullanacaksanız aşağıdaki pin şemasını referans olarak kullanabilirsiniz.
Wemos D1 Mini Pin Şeması
Projelerinizde Wemos D1 Mini kullanacaksanız aşağıdaki pin şemasını referans olarak kullanabilirsiniz.
ESP8266 üzerinde bulunan çevre birimleri
- 17 adet GPIO
- SPI
- I2C (yazılım desteği ile)
- DMA destekli I2S arayüzü
- UART
- 10-Bit ADC
ESP8266 üzerinde sorunsuz kullanabiliceğiniz pinler
ESP8266’da dikkat etmeniz gereken en önemli nokta GPIO numarası ile geliştirme kartı üzerindeki pin etiketlerinin birbirine uymamasıdır. Örneğin, kart üzerinde yazan D0 pini GPIO16’ya, D1 pini de GPIO5’e karşılık gelmektedir.
Aşağıda verdiğim tabloda, geliştirme kartı üzerindeki pin etiketlerinin karşılık geldiği GPIO numaralarını, hangi pinleri kullanırken sorun yaşamayacağınızı ve hangi pinleri kullanırken dikkat etmeniz gerektiğini görebilirsiniz.
Yeşil renk ile işaretlenmiş pinleri rahatlıkla kullanabilirsiniz. Sarı ile işaretlediklerimi de kullanabilirsiniz ancak dikkat etmeniz gereken husus, bu pinler açılış esnasında beklenmedik davranışlar sergileyebilir. Kırmızı ile işaretlediklerimi ise giriş veya çıkış olarak kullanmanızı önermem.
Etiket | GPIO | Giriş | Çıkış | Not |
D0 | GPIO16 | Kesme yapmaz | PWM veya I2C desteği yoktur . | Boot sırasında değeri HIGH dır Yongayı derin uykudan uyandırmak için kullanılır . |
D1 | GPIO5 | .OK. | .OK. | Genellikle SCL (I2C) olarak kullanılır |
D2 | GPIO4 | .OK. | .OK. | Genellikle SDA (I2C) olarak kullanılır |
D3 | GPIO0 | pulled up | .OK. | Kartın FLASH butonuna bağlıdır, Değeri LOW olursa boot başarısız olur |
D4 | GPIO2 | pulled up | .OK. | Boot sırasında değeri HIGH dır Kartın üzerindeki LED’e bağlıdır, Değeri LOW olursa boot başarısız olur |
D5 | GPIO14 | .OK. | .OK. | SPI (SCLK) |
D6 | GPIO12 | .OK. | .OK. | SPI (MISO) |
D7 | GPIO13 | .OK. | .OK. | SPI (MOSI) |
D8 | GPIO15 | pulled to GND . | .OK. | SPI (CS) Değeri HIGH olursa boot başarısız olur |
RX | GPIO3 | .OK. | .RX pin. | Boot sırasında değeri HIGH dır |
TX | GPIO1 | .TX pin. | .OK. | Boot sırasında değeri HIGH dır Boot esnasında hata ayıklama (debug) çıkışı verir, Değeri LOW olursa boot başarısız olur |
A0 | ADC0 | Analog Input | .X. |
Önyükleme (boot) sırasında kullanılan pinler
Önyükleme (boot) yapılırken bazı pinlere LOW veya HIGH değeri atanırsa ESP8266’nın önyüklenmesi sırasında hata oluşabilir. Aşağıda önyükleme (boot) esnasında pinlerin durumunu görebilirsiniz:
- GPIO16: Önyükleme (boot) esnasında pin değeri HIGH olur.
- GPIO0: LOW değeri verilirse önyükleme (boot) hatası oluşur.
- GPIO2: Pin değeri önyüklemede (boot) HIGH’dır, LOW değeri verilirse önyükleme (boot) hatası oluşur.
- GPIO15: HIGH değeri verilirse önyükleme (boot) hatası oluşur.
- GPIO3: Pin değeri önyüklemede (boot) HIGH’dır.
- GPIO1: Pin değeri önyüklemede (boot) HIGH’dır, LOW değeri verilirse önyükleme (boot) hatası oluşur.
- GPIO10: Pin değeri önyüklemede (boot) HIGH’dır.
- GPIO9: Pin değeri önyüklemede (boot) HIGH’dır.
Önyükleme (boot) esnasında HIGH değerine sahip pinler
ESP8266’nın önyüklemesi esnasında 3,3V sinyal veren bazı pinler vardır. Bu GPIO’lara bağlı röle veya benzeri çevre birimleri varsa sorunla karşılaşmanız yüksek olasılıktır. Aşağıdaki GPIO’lar, önyükleme esnasında HIGH sinyal verir:
- GPIO16
- GPIO3
- GPIO1
- GPIO10
- GPIO9
Yukarıdaki pinlere ek olarak, GPIO5 ve GPIO4 dışındaki diğer GPIO’lar, önyükleme esnasında düşük voltajlı sinyal verebilir, bu pinlere transistör veya röle bağlarsanız sorun yaşayabilirsiniz. Daha fazla detay öğrenmek isterseniz önyükleme esnasında her GPIO’nun durumunu ve davranışını araştıran bu makaleyi de inceleyebilirsiniz.
GPIO4 ve GPIO5 pinleri, röle ile kullanmak için diğer GPIO’lara göre en güvenli olanlardır.
Analog Giriş
ESP8266, sadece bir adet GPIO’da analog değer okumayı destekler. Bu GPIO, ADC0 olarak adlandırılır ve genellikle geliştirme kartı üzerinde A0 olarak belirtilir.
ESP8266 yongasını direk kullanıyorsanız ADC0 pininin maksimum giriş voltajı 0 ila 1V arasındadır. ESP8266 12-E NodeMCU kiti gibi bir geliştirme kartı kullanıyorsanız, bu kartlar dahili bir voltaj bölücü içerdiğinden, voltaj giriş aralığı 0 ila 3.3V arasındadır.
Dahili LED
Çoğu ESP8266 geliştirme kartında dahili LED bulunmaktadır. Bu LED genellikle GPIO2 pinini kullanmaktadır.
RST Pini
RST pinine LOW değerini verdiğimizde, ESP8266 sıfırlanır (reset). Bu geliştirme kartının üzerindeki RESET butonuna basmakla aynı şeydir.
GPIO0 Pini
GPIO0 pinine LOW değerini verdiğimizde, ESP8266 önyükleyici (bootloader) moduna ayarlanır. Bu geliştirme kartının üzerindeki FLASH/BOOT butonuna basmakla aynı şeydir.
GPIO16 Pini
GPIO16 pini ESP8266’yı derin uykudan (deep sleep) uyandırmak için kullanılır. ESP8266’yı derin uykudan uyandırmak için GPIO16 pinini RST pinine bağlamak gerekmektedir. ESP8266 derin uyku kullanımı ile ilgili detaylı yazımı takip ederek okumanızı tavsiye ederim.
I2C Pinleri
ESP8266’da donanımsal olarak I2C pinleri yoktur, yazılım desteği kullanılabilir. Böylelikle herhangi bir GPIO’yu I2C olarak kullanabiliriz. Genellikle, aşağıdaki GPIO’lar I2C pinleri olarak kullanılmaktadır:
- GPIO5: SCL
- GPIO4: SDA
SPI Pinleri
ESP8266’da SPI olarak kullanılan pinler şunlardır:
- GPIO12: MISO
- GPIO13: MOSI
- GPIO14: SCLK
- GPIO15: CS
PWM Pinleri
ESP8266, GPIO0’dan GPIO16’ya bütün G/Ç (I/O) pinlerinde yazılım desteğiyle PWM’ye izin vermektedir. ESP8266’daki PWM sinyalleri 10 bit çözünürlüğe sahiptir. ESP8266 PWM pinlerini nasıl kullanacağınızı öğrenmek için Arduino IDE ile ESP8266 PWM yazımı okuyabilirsiniz.
Kesme (Interrupt) Pinleri
ESP8266, GPIO16 pini haricinde herhangi bir GPIO’daki kesmeyi (interrupt) destekler. Kesmeleri nasıl kullanacağınızı öğrenmek için “ESP8266 Arduino IDE ile Kesmeler ve Zamanlayıcılar” yazıma göz atabilirsiniz.
Bu yazımda sizlere ESP8266 pinleri ve kullanımları ile ilgili detaylı bilgi vermeye çalıştım. Umarım başarılı olmuşumdur.
Esp-01 ile rgb şerit led yakmak için hangi pini çıkış pini olarak kullanmamızı tavsiye edersiniz?
Merhaba, düz RGB şerit ledi direk ESP-01 ile yakıp söndüremezsiniz, araya HIGH/LOW ile tetiklenebilecek devre kullanmanız gerekir. RGB yerine 5V ile çalışan çipli led (mesela WS2812B Şerit led) kullanmanız daha sağlıklı olacaktır. GPIO0 veya GPIO2 pinleri bu şekilde kullanım için uygundur. Örnek olarak bu linkteki yazıma bakabilirsiniz – https://www.muratdonmez.com.tr/sizi-takip-eden-led-merdiven-aydinlatmasi-yapiyoruz/
Esp-01 kullanılan çoğu projede CH_EN pini ile VCC kısa devre ediliyor. Bunun amacı nedir? Bazen demo olarak kurduğum devrelerde bunu yapmasam da sistem çalışıyor.
Merhaba, CH_PD veya CH_EN pini ‘Chip Power-Down’ veya ‘Chip Enable’ anlamına gelir ve ESP çipini etkinleştirmek için HIGH yapılması veya 3,3 V’a bağlanması gerekir, bu yüzden VCC pinine bağlanmaktadır.
Merhabalar , arduino nano ve uno kullanarak Esp 01 ile birlikte bir çalışma yapıyorum. Ancak aşağıda bulunan hatayı alıyorum.
Executable segment sizes:
IROM : 330872 – code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 27640 / 32768 – code in IRAM (ICACHE_RAM_ATTR, ISRs…)
DATA : 1404 ) – initialized variables (global, static) in RAM/HEAP
RODATA : 2008 ) / 81920 – constants (global, static) in RAM/HEAP
BSS : 25136 ) – zeroed variables (global, static) in RAM/HEAP
Çalışmanız programın 361924 bayt (37 %) saklama alanını kullandı. Maksimum 958448 bayt.
Global değişkenler belleğin 28548 byte kadarını (34%) kullanıyor. Yerel değişkenler için 53372 byte yer kalıyor. En fazla 81920 byte kullanılabilir.
esptool.py v2.8
Serial port COM6
Connecting…….._____….._____….._____….._____….._____….._____…..____Traceback (most recent call last):
File “C:\Users\MUSTAFA\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/upload.py”, line 65, in
esptool.main(cmdline)
File “C:/Users/MUSTAFA/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.7.4/tools/esptool\esptool.py”, line 2890, in main
esp.connect(args.before)
File “C:/Users/MUSTAFA/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.7.4/tools/esptool\esptool.py”, line 483, in connect
raise FatalError(‘Failed to connect to %s: %s’ % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
Bağlantı şeklim şu şekilde;
Esp-01 in Gnd –>Gnd
vcc –>3.3V
En –>3.3V
Tx –>Tx
Rx –>Rx
IO0 –>Gnd
Rst ve IO2 boşta
Bunların haricinden Arduino nun Rst pinini de Gnd ye bağladım.
Arduino üzerinden kullandığım ESP8266 paketi 2.7.4 versiyonunda (en güncel hali ve 2.5.0,2.5.2 gibi sürümlerde de aynı hata ile karşılaştım)
Sizce sorun nerede olabilir? Teşekkür ederim, sağlıklı günler dilerim.
Merhaba, ESP-01 ile iletişim kuramadığı için bu hatayı alıyorsunuz. Bağlantınızda hata var. Aşağıdaki şekilde bağlantıyı değiştirirseniz sorun çözülecektir. Tx -> Data Gönderme, Rx -> Data Alma pinleridir. Dolayısıyla bağlantı yaparken Data Göndermeyi data almaya bağlamalısınız.
Tx –>Tx olan Tx –>Rx olacak
Rx –>Rx olan Rx –>Tx olacak
MERHABA, PAYALAŞIMINIZ İÇİN TEŞEKKÜRLER.
ESP-01S MODELİNDE RÖLE İLE İŞLEMLERİ YAPABİLİYORUM. AYNI ŞEKİLDE TEK CİHAZ ÜZERİNDE ISI-NEM TAKİBİ TAPMAK İÇİN DHT22 SENSÖRÜNÜ DE KULLANABİLİRMİYİM. HANGİ PİNLERİ KULLANMALIYIM.
RÖLE İÇİN BEN 0 NUMARALI PİNİ KULLANIYORUM
Merhaba, DHT22 için de GPIO2 pinini kullanabilirsiniz.