Modul TFT 2,4 inci 240 × 320 berbasis ILI9341 cocok dipasangkan dengan ESP32-S3 karena display controller tersebut menyediakan interface serial SPI. Modul itu belum tentu hanya berisi satu perangkat: sebuah board dapat memuat ILI9341 untuk pixel, resistive-touch controller terpisah, dan kadang socket microSD.

Perbedaan ini menentukan wiring. Beberapa perangkat dapat berbagi jalur clock dan data SPI, sementara setiap peripheral mempertahankan sinyal chip-select masing-masing.

SPI adalah bus serial dengan clock

SPI memindahkan bit mengikuti clock yang dihasilkan controller. Dalam sistem ESP32-S3, microcontroller biasanya mengendalikan transaksi dan display bertindak sebagai peripheral.

Sinyal Arah relatif terhadap ESP32-S3 Fungsi
SCLK / SCK / CLK output memberi clock untuk setiap bit yang ditransfer
MOSI output mengirim command dan data pixel ke display
MISO input menerima data dari peripheral yang mendukung operasi read
CS / SS output memilih satu peripheral untuk sebuah transaksi

SPI tidak memberi alamat seperti I²C. Pemilihan perangkat biasanya dilakukan secara elektrik: ESP32-S3 mengaktifkan jalur CS milik peripheral yang akan diakses.

Modul ILI9341 juga memerlukan sinyal kontrol khusus display. \x60DC\x60 menentukan apakah byte yang dikirim merupakan command atau data display, sedangkan \x60RST\x60 mereset controller. Backlight dapat terhubung permanen pada modul atau tersedia sebagai pin tersendiri.

\x60\x60\x60text ESP32-S3 modul TFT


3.3 V / supply modul ——> VCC GND ———————–> GND SPI SCLK ——————> SCK SPI MOSI ——————> MOSI SPI MISO <—————– MISO (jika digunakan) GPIO ———————-> TFT_CS GPIO ———————-> DC GPIO ———————-> RST \x60\x60\x60

Nama pin berbeda antar-board, sehingga schematic atau dokumentasi modul tetap lebih otoritatif daripada tabel pin generik.

ILI9341 mengubah byte SPI menjadi pixel

ESP32-S3 tidak mengirim sinyal video lengkap ke ILI9341. Firmware mengirim command untuk mengatur controller dan menentukan drawing window, kemudian mengirim data pixel untuk area tersebut.

Untuk display 240 × 320 dengan RGB565, satu frame mentah penuh berisi:

\x60\x60\x60text 240 * 320 * 2 bytes = 153,600 bytes \x60\x60\x60

Angka ini penting karena bandwidth SPI terbatas. Repaint seluruh layar memindahkan data jauh lebih banyak dibanding memperbarui sebuah tombol, teks, gauge, atau bagian sempit grafik. Interface yang sebagian besar statis dapat mengurangi traffic bus secara signifikan dengan menggambar ulang hanya rectangle yang berubah.

ILI9341 mempunyai display memory sendiri. Karena itu, ESP32-S3 tidak harus menyediakan framebuffer 153.600 byte hanya agar gambar tetap terlihat. Pemakaian framebuffer ditentukan kebutuhan aplikasi dan graphics library.

Touch biasanya merupakan peripheral kedua

Kata “touch” pada modul ILI9341 dapat menimbulkan salah pengertian. ILI9341 adalah display controller; banyak modul resistive touch murah memakai controller terpisah seperti XPT2046.

Jika touch controller juga menggunakan SPI, topologinya dapat berupa:

\x60\x60\x60text +–> ILI9341 | CS = TFT_CS ESP32-S3 SPI —–+ | +–> XPT2046 CS = TOUCH_CS \x60\x60\x60

SCLK, MOSI, dan MISO dapat digunakan bersama jika desain modul memang mendukungnya. \x60TFT_CS\x60 dan \x60TOUCH_CS\x60 tetap terpisah. Firmware hanya mengaktifkan CS perangkat yang sedang dituju selama transaksi.

Socket microSD dapat menambah peripheral SPI ketiga:

\x60\x60\x60text shared SCLK/MOSI/MISO | +– TFT_CS —- ILI9341 +– TOUCH_CS – XPT2046 +– SD_CS —– microSD \x60\x60\x60

Berbagi kabel fisik tidak berarti transaksi dapat berlangsung bersamaan. Software harus menserialisasi akses bus dan memastikan perangkat yang tidak aktif tetap deselected.

Koordinat touch bukan koordinat display

Resistive touch controller mengukur posisi elektrik dari tekanan pada panel. Nilai X dan Y mentahnya tidak otomatis sama dengan koordinat pixel TFT 0–239 dan 0–319.

Kalibrasi membentuk pemetaan antara rentang touch mentah dan rectangle display yang terlihat. Rotation membuat pemetaan lebih rumit karena perubahan orientasi dapat menukar axis serta membalik salah satu atau keduanya.

\x60\x60\x60text raw touch X/Y | v calibration bounds | v axis swap / inversion | v display pixel X/Y \x60\x60\x60

Transformasi ini sebaiknya eksplisit di firmware. Tanpanya, UI dapat terlihat benar pada mode portrait tetapi menghasilkan posisi sentuhan terbalik atau bergeser setelah display diubah ke landscape.

Kompatibilitas tegangan harus diperiksa pada level modul

GPIO ESP32-S3 menggunakan logika 3,3 V. Bare controller dan breakout board bukan produk elektrik yang sama: modul breakout dapat menambahkan regulator, resistor, level shifting, atau rangkaian backlight.

Board yang menerima supply 5 V tidak otomatis berarti input SPI-nya harus diberi logika 5 V, dan bare ILI9341 tidak boleh dianggap sebagai perangkat logika 5 V. Periksa schematic, deskripsi pin, dan spesifikasi elektrik modul yang benar-benar digunakan sebelum menghubungkan power maupun sinyal.

Pertanyaan yang relevan adalah tegangan yang diharapkan pada \x60VCC\x60, level tegangan yang valid pada pin SPI dan kontrol, apakah breakout sudah memiliki level conversion, dan bagaimana backlight diberi daya. Jawabannya bergantung pada implementasi board, bukan resolusi display.

SPI clock dibatasi signal integrity

SPI clock yang lebih tinggi mengurangi waktu transfer teoritis, tetapi clock yang dikonfigurasi bukan jaminan throughput yang andal. Jumper wire panjang, breadboard, distribusi power yang buruk, level shifter, dan layout modul dapat membuat frekuensi yang bekerja pada satu setup gagal pada setup lain.

Mulai dari clock konservatif yang didukung display stack, lalu naikkan hanya setelah display bekerja benar. Area gambar rusak, initialization yang kadang gagal, atau error yang hanya muncul pada clock tinggi merupakan alasan untuk memeriksa wiring dan signal integrity sebelum menyalahkan graphics code.

Throughput juga dipengaruhi transaction overhead. Mengatur drawing window, mengubah \x60DC\x60, mengaktifkan chip select, dan mengirim banyak write kecil dapat memakan cukup banyak waktu sehingga batching transfer pixel menjadi penting.

Library membagi masalah menjadi beberapa layer

Software stack biasanya memiliki tanggung jawab berbeda:

\x60\x60\x60text application / UI | graphics primitives | ILI9341 + touch drivers | SPI and GPIO driver | ESP32-S3 hardware \x60\x60\x60

Project Arduino umumnya menggunakan graphics library yang mendukung ILI9341 serta driver XPT2046 terpisah atau terintegrasi. Ekosistem ESP-IDF dan Rust mengekspos hardware yang sama melalui API berbeda, tetapi model elektriknya tetap sama.

Display driver membutuhkan bus SPI ditambah \x60CS\x60, \x60DC\x60, dan biasanya \x60RST\x60. Touch driver membutuhkan akses ke bus yang sama dan \x60CS\x60 sendiri, kemudian kalibrasi mengubah hasil baca menjadi koordinat layar.

Mempertahankan batas ini secara eksplisit memudahkan diagnosis. Display kosong bukan masalah kalibrasi touch; grafik yang benar dengan lokasi tap yang salah biasanya bukan masalah initialization ILI9341.

Kepemilikan bus semakin penting saat peripheral bertambah

Display dapat mendominasi bus SPI karena transfer pixel relatif besar. Touch read berukuran kecil, sementara transaksi microSD memiliki karakteristik latency tersendiri. Jika beberapa task atau komponen dapat mengakses peripheral SPI yang sama, program membutuhkan satu strategi ownership atau locking agar transaksi tidak saling menyisip.

Ini bukan sekadar preferensi arsitektur software. Transaksi untuk TFT dapat menjadi data yang tidak bermakna bagi peripheral lain jika penanganan chip-select salah.

Untuk interface yang responsif, write display berukuran besar juga dapat dipecah menjadi operasi yang terbatas agar sampling touch tidak tertunda terlalu lama. Granularitas yang tepat bergantung pada graphics workload dan driver.

Kompatibilitas adalah sifat seluruh sistem

ESP32-S3 dan panel SPI ILI9341 kompatibel pada level interface, tetapi sistem yang andal bergantung pada modul lengkap, bukan hanya nama controller yang tertulis pada listing produk.

Display memerlukan wiring SPI dan pin kontrol yang benar. Lapisan resistive touch biasanya menambah controller serta jalur chip-select lain. Peripheral yang berbagi bus memerlukan akses terserialisasi. Touch membutuhkan kalibrasi koordinat, sedangkan rangkaian power dan level logika pada modul menentukan apakah perangkat dapat langsung dihubungkan ke GPIO 3,3 V.

Memisahkan semua constraint tersebut menghasilkan desain yang lebih tepat daripada memperlakukan “ILI9341 touch display” sebagai satu black box.