Özet: 30 Saniyede CYD
  • 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:

ESP32 Cheap Yellow Display GPIO haritası: HSPI üzerindeki ekran pinleri, XPT2046 dokunmatik pinleri, VSPI üzerindeki microSD pinleri, RGB LED, LDR ve hoparlör pinleri ile P3 ve CN1 konnektörlerindeki boş GPIO'lar
ESP32-2432S028R GPIO haritası, pin verisi: witnessmenow/ESP32-Cheap-Yellow-Display

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.

HatPinler
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ı çıkanIO35 (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.


Reklam

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.

İki ESP32 Cheap Yellow Display sürümünün karşılaştırması: tek mikro USB portlu ILI9341 sürücülü kart ve mikro USB ile USB-C portlu, renkleri ters gelen ST7789 sürücülü CYD2USB kartı
Tek USB'li ve çift USB'li CYD sürümleri

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?

ÖzellikDeğer
İşlemciESP32-WROOM-32, çift çekirdek Xtensa LX6, 240 MHz
Flash4 MB
PSRAMYok
Ekran2,8 inç TFT, 240 x 320, ILI9341 ya da ST7789
DokunmatikXPT2046, rezistif (tırnak ya da kalem ister, kalibrasyon gerekir)
DepolamaKendi SPI hattındaki microSD yuvası
EkstralarRGB LED, LDR ışık sensörü, hoparlör konnektörü, CH340 USB-UART
KonnektörlerP1, P3, CN1 (4 pinli JST)
BeslemeUSB ü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

BelirtiSebep
Arka ışık yanıyor, ekran beyazSürücü tanımı yanlış. Tek USB’de ILI9341, çift USB’de ST7789
Renkler tersST7789 kartında tft.invertDisplay(true) çağrılmamış
USB-C’de hiç açılmıyorC’den C’ye kablo. O portta CC direnci yok, A’dan C’ye kablo kullanın
Ekran çalışıyor, SD kart okunmuyorUser_Setup.h içinde USE_HSPI_PORT eksik
Dokunmatik yanlış yere basıyorPanelinize ait kalibrasyon değerleri girilmemiş
Parmakla dokunmaya cevap vermiyorPanel rezistif, daha sert bastırın ya da kalem kullanın
Kod yüklenmiyorP1’deki IO1/IO3’e bir şey bağlı, ya da BOOT tuşuna basılı tutun
Yazılar ezik görünüyorsetRotation() 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:

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.