- CYD (Cheap Yellow Display), ESP32-2432S028R kartının takma adı: sarı bir PCB üzerine lehimlenmiş ESP32-WROOM-32 artı 2,8 inç 240x320 dokunmatik ekran, microSD yuvası, RGB LED ve ışık sensörü.
- Aynı model numarasıyla iki farklı kart satılıyor. Tek USB’li olanda ILI9341, çift USB’li (CYD2USB) olanda ST7789 var ve ikincisinde renkler ters geliyor.
- Ekran, dokunmatik panel ve SD kart ayrı ayrı pin kullandığı için GPIO’ların neredeyse tamamı doluyor.
- Elinizde kalan: IO22, IO27, sadece giriş olan IO35 ve arka ışıktan vazgeçerseniz IO21. Hepsi bu.
- Arduino IDE’de seçilecek kart ESP32 Dev Module. Asıl ayar sketch’te değil, User_Setup.h dosyasında.
- Beyaz ekran gördüyseniz kart bozuk değil, sürücü tanımı yanlış.
ESP32, 2,8 inçlik bir TFT, dokunmatik denetleyici ve SD yuvasını ayrı ayrı almak bu kartın tamamından pahalıya geliyor, üstüne bir de kablolamanız gerekiyor. Cheap Yellow Display‘in “ESP32’ye ekran takacağım” sorusunun varsayılan cevabı hâline gelmesinin sebebi tam olarak bu.
İşin püf noktası şu: her şey hazır bağlı olduğu için pin tercihleri sizin yerinize yapılmış, hem de bazıları epey talihsiz. Bu yazıda pinout şemasını, elinizdeki kartın hangi sürüm olduğunu, ekranı çalıştıran User_Setup.h ayarlarını ve ilk gün herkesin takıldığı hataları sırayla geçeceğiz. 👇🏻
ESP32 CYD Pinout Şeması
Aradığınız şey muhtemelen buysa, en başa koyalım:

Görsel mobilde küçük kalıyor, üstüne tıklayıp büyütebilirsiniz. Özeti şu: siz tek satır kod yazmadan önce kart, ESP32’nin 20 GPIO’sunu çoktan kullanmış oluyor.
| Hat | Pinler |
|---|---|
| Ekran (HSPI) | IO15 CS, IO2 DC, IO13 MOSI, IO12 MISO, IO14 SCLK, IO21 arka ışık |
| Dokunmatik (XPT2046) | IO33 CS, IO32 MOSI, IO39 MISO, IO25 CLK, IO36 IRQ |
| microSD (VSPI) | IO5 CS, IO23 MOSI, IO19 MISO, IO18 SCK |
| Kart üstü | IO4 kırmızı, IO16 yeşil, IO17 mavi, IO34 LDR, IO26 hoparlör |
| Dışarı çıkan | IO35 (sadece giriş), IO22, IO27, ve P1 üzerinde IO1/IO3 |
ESP32’de kullanılabilir iki donanım SPI hattı var, CYD’nin ise üçe ihtiyacı var. Ekran HSPI’yı, SD kart VSPI’yı alıyor, dokunmatik ise kendi pinleri üzerinden ayrıca sürülüyor. Bu karttaki dokunmatik kodunun normal bir SPI çevre biriminden farklı görünmesinin sebebi bu.
Elinizdeki Hangi CYD?
“Ekranım beyaz” şikayetlerinin bir numaralı sebebi burası. ESP32-2432S028R adıyla iki farklı kart satılıyor ve farkı uzaktan görebilirsiniz: USB portlarını sayın.

Tek mikro USB varsa elinizde orijinal sürüm ve ILI9341 var. Renkler kutudan çıktığı gibi doğru.
Bir mikro USB ve bir USB-C varsa yeni CYD2USB sürümü ve ST7789 var. İki şey değişiyor: ST7789 sürücü tanımını kullanmanız ve panel ters olduğu için tft.invertDisplay(true) çağırmanız gerekiyor. Burada bir de donanım tuzağı var. O USB-C portunda CC direnci yok, yani USB-C’den USB-C’ye kablo kartı hiç beslemiyor. A’dan C’ye kablo kullanın ya da mikro USB portuna takın.
Ekran beyaz kalıyorsa ve kabloyu zaten kontrol ettiyseniz, sürücü tanımı sürümünüzle uyuşmuyor demektir.
Kartın Üstünde Ne Var?
| Özellik | Değer |
|---|---|
| İşlemci | ESP32-WROOM-32, çift çekirdek Xtensa LX6, 240 MHz |
| Flash | 4 MB |
| PSRAM | Yok |
| Ekran | 2,8 inç TFT, 240 x 320, ILI9341 ya da ST7789 |
| Dokunmatik | XPT2046, rezistif (tırnak ya da kalem ister, kalibrasyon gerekir) |
| Depolama | Kendi SPI hattındaki microSD yuvası |
| Ekstralar | RGB LED, LDR ışık sensörü, hoparlör konnektörü, CH340 USB-UART |
| Konnektörler | P1, P3, CN1 (4 pinli JST) |
| Besleme | USB üzerinden 5 V |
Bunlardan ikisinin altını çizmek gerekiyor. PSRAM yok, dolayısıyla tam ekran 16 bit bir çerçeve tamponu (240 x 320 x 2 = 150 KB) RAM’e rahatça sığmıyor. Bu kartta LVGL, tam ekran tampon yerine kısmi tamponlarla çalışır. Dokunmatik panel de rezistif, kapasitif değil: telefondaki gibi hafif bir parmak dokunuşuna cevap vermez ve kalibrasyon ister.
Boş Pin Meselesi
CYD’nin dürüst sınırı burası ve projeyi tasarlamadan önce bilmekte fayda var.
P3 konnektöründen GND, IO35, IO22 ve IO21 çıkıyor. CN1 konnektöründen GND, IO22, IO27 ve 3,3 V çıkıyor. P1 konnektöründen VIN, IO1, IO3 ve GND çıkıyor.
Yani elinizde:
- Gerçekten serbest iki pin olarak IO22 ve IO27. IO22 hem P3’te hem CN1’de görünüyor ama bu iki ayrı pin değil, aynı pinin iki yere çekilmiş hâli.
- Sadece giriş olarak IO35. Çıkış veremez, dahili pull-up’ı da yoktur.
- Arka ışık kontrolünden vazgeçmeye razıysanız IO21.
- IO1 ve IO3 kod yükleme UART’ı. Bunlara bağladığınız her şey yüklemeyi bozabilir.
Özet: iki serbest pin, artı bir giriş. Projeniz bir sıcaklık sensörü ve bir röle istiyorsa sorun yok. Altı şey istiyorsa ya başka bir kart alın ya da IO22 ile IO27 üzerine bir I2C port genişletici koyun.
Açıkça söylenmesi gereken bir tuzak daha: IO34 boş bir ADC pini değil. Kart üstündeki ışık sensörüne bağlı, yani oradan okuduğunuz şey bağladığınız sensör değil, odanın aydınlığı olur.
Güç, Pil ve Kasa
Kartta pil şarj devresi yok. CYD 5 volt bekliyor ve bunu normalde USB’den alıyor; üzerinde ne bir TP4056 ne de bir LiPo konnektörü var. Bu yüzden “CYD’ye pil nasıl takılır” sorusunun cevabı bir ayar değil, küçük bir donanım eklemesi.
Topluluğun izlediği yol şu: LiPo hücreyi bir TP4056 şarj modülüne bağlayıp çıkışı bir 5 V yükselticiden (boost) geçirmek ve sonucu P1 konnektöründeki VIN ile GND bacaklarına vermek. P1 aynı zamanda IO1/IO3 yani yükleme UART’ı olduğu için oraya lehim yaparken bu iki pini boşta bırakın.
İki uyarı:
- Konnektörler 1,25 mm adımlı (çoğu satıcı JST diyor, doğrusu Molex PicoBlade). Standart 2,54 mm jumper kabloları takılmaz, hazır kablo alın.
- USB-C’li CYD2USB sürümünde C portunda CC direnci yok. C’den C’ye kablo kartı hiç beslemez, A’dan C’ye kablo kullanın.
Kasa tarafında üreticinin sunduğu bir muhafaza yok, ama Printables ve Thingiverse’te bu karta özel çok sayıda 3D baskı kasa dosyası var. Masaüstü stand, duvar paneli ve pil bölmeli sürümleri mevcut; ararken kart adını ESP32-2432S028R diye yazmak CYD yazmaktan daha isabetli sonuç veriyor.
Arduino IDE Kurulumu
ESP32 kart paketini kurun, ardından Araçlar > Kart > ESP32 Arduino > ESP32 Dev Module seçin. Varsayılanlara dokunmayın; flash boyutu 4 MB, bölüm şeması Default kalsın. Kart listesinde CYD diye ayrı bir giriş yok, olmasına da gerek yok.
Ekran tamamen TFT_eSPI kütüphanesinin içindeki User_Setup.h dosyasından yapılandırılıyor. Kütüphane dosyası düzenlemek yanlış hissettirdiği için burada çok kişi takılıyor ama TFT_eSPI böyle çalışıyor.
TFT_eSPI’yi Kütüphane Yöneticisi’nden kurun, sonra Belgeler/Arduino/libraries/TFT_eSPI/User_Setup.h dosyasını açıp içeriğini şununla değiştirin:
// --- ESP32 Cheap Yellow Display (ESP32-2432S028R) ---
// Tek USB'li kart:
#define ILI9341_2_DRIVER
// Cift USB'li (CYD2USB) kart: ustteki satiri yoruma alip bunu kullanin
// #define ST7789_DRIVER
#define TFT_WIDTH 240
#define TFT_HEIGHT 320
#define TFT_MISO 12
#define TFT_MOSI 13
#define TFT_SCLK 14
#define TFT_CS 15
#define TFT_DC 2
#define TFT_RST -1
#define TFT_BL 21
#define TFT_BACKLIGHT_ON HIGH
#define LOAD_GLCD
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define LOAD_GFXFF
#define SMOOTH_FONT
#define SPI_FREQUENCY 55000000
#define SPI_READ_FREQUENCY 20000000
#define SPI_TOUCH_FREQUENCY 2500000
#define USE_HSPI_PORT
USE_HSPI_PORT tercihe bağlı değil. Bu satır olmadan TFT_eSPI VSPI’yı kapıyor ve SD kartla çakışıyor.
İlk kod
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup() {
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH); // arka isik acik
tft.init();
tft.setRotation(1); // 1 = yatay
// Cift USB'li ST7789 kartta bu satiri acin:
// tft.invertDisplay(true);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_YELLOW, TFT_BLACK);
tft.setTextSize(2);
tft.setCursor(20, 20);
tft.println("Merhaba CYD");
}
void loop() {}
Arka ışık yanıyor ama görüntü yoksa sürücü tanımı yanlıştır. Görüntü var ama renkler tuhafsa çift USB’li ST7789 kartındasınız ve invertDisplay(true) gerekiyor.
Dokunmatik Ekran
Dokunmatik, XPT2046 üzerinden kendi pinleriyle çalıştığı için varsayılan SPI yerine ona ayrı bir SPI örneği vermeniz gerekiyor. XPT2046_Touchscreen kütüphanesini kurun:
#include <SPI.h>
#include <XPT2046_Touchscreen.h>
#define XPT2046_IRQ 36
#define XPT2046_MOSI 32
#define XPT2046_MISO 39
#define XPT2046_CLK 25
#define XPT2046_CS 33
SPIClass touchSpi = SPIClass(VSPI);
XPT2046_Touchscreen ts(XPT2046_CS, XPT2046_IRQ);
void setup() {
Serial.begin(115200);
touchSpi.begin(XPT2046_CLK, XPT2046_MISO, XPT2046_MOSI, XPT2046_CS);
ts.begin(touchSpi);
ts.setRotation(1);
}
void loop() {
if (ts.tirqTouched() && ts.touched()) {
TS_Point p = ts.getPoint();
// ham degerler, iki eksende de kabaca 200..3700
int x = map(p.x, 200, 3700, 0, 320);
int y = map(p.y, 240, 3800, 0, 240);
Serial.printf("ham %d,%d -> ekran %d,%d\n", p.x, p.y, x, y);
delay(100);
}
}
Bu map() sınırları başlangıç noktası, kutsal değil. Her panel farklı çıkıyor. Ham değerleri yazdırın, dört köşeye tek tek dokunun, gerçekte ne okuduğunuzu not edin ve kendi sayılarınızı yazın. Kalibrasyon dediğimiz adım bu ve atlandığı için pek çok kişide dokunmatik kaymış gibi çalışıyor.
Bir de şuna dikkat: dokunmatik de SD kart da VSPI çevre birimini, üstelik farklı pinlerle istiyor. İkisini aynı sketch’te kullanmak mümkün ama geçiş yaparken hattı yeniden başlatmanız gerekiyor.
SD Kart, RGB LED ve Işık Sensörü
SD yuvası VSPI üzerinde ve CS pini varsayılan değil:
#include <SPI.h>
#include <SD.h>
#define SD_CS 5
SPIClass sdSpi = SPIClass(VSPI);
void setup() {
Serial.begin(115200);
sdSpi.begin(18, 19, 23, SD_CS); // SCK, MISO, MOSI, CS
if (!SD.begin(SD_CS, sdSpi)) {
Serial.println("SD baglanamadi");
return;
}
Serial.printf("Kart boyutu: %llu MB\n", SD.cardSize() / (1024 * 1024));
}
void loop() {}
RGB LED ters mantıkla çalışıyor, yani LOW yakıyor. Herkes bir kez buna takılıyor:
#define LED_RED 4
#define LED_GREEN 16
#define LED_BLUE 17
void setup() {
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
digitalWrite(LED_RED, LOW); // LOW = YANIK
digitalWrite(LED_GREEN, HIGH); // HIGH = SONUK
digitalWrite(LED_BLUE, HIGH);
}
Işık sensörü ise IO34’ten düz bir analog okuma. Arka ışığı ortama göre kısmak için işe yarıyor:
int isik = analogRead(34); // 0..4095, cogu kartta buyuk deger daha karanlik demek
Sık Karşılaşılan Sorunlar
| Belirti | Sebep |
|---|---|
| Arka ışık yanıyor, ekran beyaz | Sürücü tanımı yanlış. Tek USB’de ILI9341, çift USB’de ST7789 |
| Renkler ters | ST7789 kartında tft.invertDisplay(true) çağrılmamış |
| USB-C’de hiç açılmıyor | C’den C’ye kablo. O portta CC direnci yok, A’dan C’ye kablo kullanın |
| Ekran çalışıyor, SD kart okunmuyor | User_Setup.h içinde USE_HSPI_PORT eksik |
| Dokunmatik yanlış yere basıyor | Panelinize ait kalibrasyon değerleri girilmemiş |
| Parmakla dokunmaya cevap vermiyor | Panel rezistif, daha sert bastırın ya da kalem kullanın |
| Kod yüklenmiyor | P1’deki IO1/IO3’e bir şey bağlı, ya da BOOT tuşuna basılı tutun |
| Yazılar ezik görünüyor | setRotation() yanlış. 0/2 dikey, 1/3 yatay |
Bu Kartla Ne Yapılır?
Arama verisi bu kartla ne yapıldığını açıkça söylüyor: Home Assistant paneli, masa saati ve alarm, hava durumu ekranı, uçuş takip ekranı, internet radyosu, bilgisayar için stream deck tarzı kısayol paneli ve küçük kontrol arayüzleri. Hepsi aynı kalıp: Wi-Fi’dan bir değer çeken ve onu büyük puntoyla çizen bir cihaz.
Kod yazmadan başlamak isterseniz hazır yol da var. Topluluk, tek tek örnekleri kartın flash’ına yazan launcher tarzı derlemeler hazırlamış durumda; çoğu tarayıcı üzerinden çalışan bir web flasher ile kuruluyor, sonra ekrandaki menüden uygulama seçiyorsunuz. Kartın ne yapabildiğini görmek için hızlı bir başlangıç, ama kalıcı bir proje için kendi kodunuzu yazmak daha temiz.
Kart ESPHome ve LVGL ile sorunsuz çalışıyor, yukarıdaki PSRAM notunu akılda tutmak kaydıyla. Arayüzü elle TFT_eSPI ile yazacaksanız araçlarımızdan üçü sıkıcı kısmı hallediyor:
- LVGL Görsel Çevirici bir PNG’yi LVGL C dizisine çeviriyor
- RGB565 Renk Çevirici TFT_eSPI’nin beklediği 16 bit renk değerlerini veriyor
- LCD Assistant / image2cpp bitmap’leri
pushImage()için hazırlıyor
CYD’nin mantıklı olmaktan çıktığı yer ise sensör yoğun projeler. İki boş pin, iki boş pindir. Onun için ayrı ekranlı bir ESP32-S3 kartı daha doğru bir seçim olur, kartları ESP32 pinout aracımızda karşılaştırabilirsiniz.
Almaya Değer mi?
Ne olduğunu bilerek alırsanız evet. Sıfır kablolamayla ESP32’ye çalışan bir dokunmatik ekran koymanın en ucuz yolu ve markasız bir kart için topluluk dokümantasyonu şaşırtıcı derecede iyi. Genel amaçlı bir geliştirme kartı değil, dokunmatik rezistif, ve pek genişletemezsiniz.
Ekran projenin kendisiyse alın. Ekran büyük bir işin sadece bir parçasıysa başka karta bakın.
Sık Sorulan Sorular
CYD ne demek? Cheap Yellow Display, yani “ucuz sarı ekran”. ESP32-2432S028R kartına topluluk tarafından verilen, sarı PCB’sinden gelen bir takma ad. Üretici bu terimi kullanmıyor.
CYD hangi ekran sürücüsünü kullanıyor? Tek mikro USB’li sürümde ILI9341, mikro USB ve USB-C’li yeni CYD2USB sürümünde ST7789. Ayırt etmenin en hızlı yolu USB portlarını saymak.
CYD’de kaç boş GPIO pini var? Gerçekten kullanılabilir iki pin (IO22, IO27) ve sadece giriş olan IO35. Arka ışık kontrolünden vazgeçerseniz IO21 de eklenir.
CYD’de PSRAM var mı? Yok. Kartta 4 MB flash var, PSRAM yok. Bu yüzden tam ekran çerçeve tamponu RAM’e sığmıyor, LVGL kısmi tamponlarla çalışıyor.
CYD ekranım neden beyaz? Neredeyse her zaman TFT_eSPI’nin User_Setup.h dosyasındaki sürücü tanımı kart sürümüyle uyuşmuyordur. Önce USB portlarını sayın, sonra ILI9341_2_DRIVER ya da ST7789_DRIVER seçin.
Arduino IDE’de hangi kartı seçmeliyim? ESP32 Dev Module, varsayılan flash ve bölüm ayarlarıyla. Listede CYD diye ayrı bir seçenek yok, gerek de yok.
CYD ile Home Assistant paneli yapılır mı? Evet. Kart ESPHome ve LVGL tabanlı panel yazılımlarıyla çalışıyor, zaten en yaygın kullanım alanlarından biri bu.
CYD’ye pil takılabilir mi? Kartta şarj devresi yok, doğrudan pil bağlanmıyor. Yaygın çözüm bir LiPo hücreyi TP4056 şarj modülü ve 5 V yükseltici üzerinden P1 konnektöründeki VIN ve GND bacaklarına vermek. Konnektörler 1,25 mm adımlı olduğu için hazır kablo almanız gerekir.
CYD’nin dokunmatiği kapasitif mi? Bu modelde değil. ESP32-2432S028R’de XPT2046 sürücülü rezistif panel var; tırnak ya da kalem ister ve kalibrasyon gerekir. Kapasitif dokunmatik isteyen için farklı model numaralı CYD kartları satılıyor, ama pinout ve sürücü ayarları bu yazıdakinden farklıdır.
USB-C kablom kartı neden beslemiyor? CYD2USB sürümündeki USB-C portunda CC direnci yok, bu yüzden C’den C’ye kablo hiç güç aktarmıyor. USB-A’dan USB-C’ye bir kablo kullanın ya da mikro USB portuna takın.
