Introducción
¿Tienes una placa ESP32 CYD y al intentar usar la pantalla, el touch y la microSD a la vez todo se cae? No es tu código: es el bus SPI peleándose consigo mismo. En esta guía vas a resolver ese conflicto de raíz y dejar las tres funciones operando en paralelo.
La placa ESP32 CYD (Cheap Yellow Display), también conocida por su código ESP32-2432S028R, integra en un solo módulo un ESP32 WROOM, una pantalla TFT de 2.8" con resolución 240x320, un touchscreen resistivo y una ranura para tarjeta microSD. El problema aparece cuando quieres las tres cosas a la vez: todas hablan por SPI y se disputan los mismos pines.
El ejemplo que vas a montar muestra en pantalla las coordenadas del punto que tocas y, al mismo tiempo, las guarda en un archivo dentro de la microSD. Es la base perfecta para construir después loggers de datos con interfaz, paneles que recuerden su configuración o juegos que guarden el puntaje.
Probado en: ESP32-2432S028R 2.8" 240x320 con touchscreen resistivo. Si recién partes con esta placa, te conviene revisar primero un tutorial introductorio del CYD antes de seguir.
Por qué se produce el conflicto SPI
El ESP32 cuenta con dos buses SPI por hardware: VSPI y HSPI. Los pines por defecto son:
| SPI | MOSI | MISO | SCLK | CS |
|---|---|---|---|---|
| VSPI | GPIO 23 | GPIO 19 | GPIO 18 | GPIO 5 |
| HSPI | GPIO 13 | GPIO 12 | GPIO 14 | GPIO 15 |
En el CYD la microSD usa los pines por defecto de VSPI (MOSI 23, MISO 19, SCLK 18, CS 5). En los ejemplos típicos la pantalla se configura en HSPI y el touchscreen queda también en VSPI. Ahí está el nudo: el touchscreen escucha eventos de toque de forma continua, así que no es buena idea desactivarlo cada vez que escribes en la microSD. Y aunque en teoría varios dispositivos pueden compartir un mismo bus SPI usando distintos pines CS, en la práctica ese enfoque falla seguido.

La solución: Software SPI para el touchscreen
El truco es sacar al touchscreen del bus VSPI por hardware y hacer que se comunique vía Software SPI (SoftSPI) sobre pines libres. Para eso usamos una versión modificada de la librería XPT2046_Touchscreen, que se llama XPT2046_TouchscreenSOFTSPI, junto con una librería auxiliar SoftSPI.
De esa forma cada periférico queda aislado:
- La pantalla sigue en HSPI.
- La microSD se queda con los pines hardware de VSPI.
- El touchscreen corre por software, sin tocar ningún bus por hardware.
En el código, la microSD se declara explícitamente sobre VSPI y el touch se mueve a sus propios pines. Así se ve el bloque de defines en el Arduino IDE:

Prerrequisitos
Antes de avanzar, deja todo listo:
- Arduino IDE 2.x instalado.
- Placas ESP32 agregadas al Arduino IDE (vía Board Manager).
- Librería TFT_eSPI instalada y configurada con el
User_Setup.hcorrecto para el CYD. No uses los User_Setup que circulan por internet: usa el de la guía oficial de Random Nerd Tutorials. - Librería LVGL 9.x de kisvegabor instalada, con su
lv_conf.hadaptado. - Librerías XPT2046_TouchscreenSOFTSPI y SoftSPI: descarga el .zip con los 4 archivos (.cpp y .h de ambas librerías) desde el repositorio que dejamos en la sección Recursos.
Paso 1: preparar la carpeta del sketch
Las librerías SoftSPI y la versión modificada del touchscreen las vamos a instalar localmente en la carpeta del sketch, no de forma global.
- Abre el Arduino IDE y guarda un sketch nuevo (
Archivo > Guardar como…) en la ubicación que prefieras. - Ve a
Programa > Mostrar carpeta del programapara abrirla en el explorador. - Copia ahí los 4 archivos:
XPT2046_TouchscreenSOFTSPI.cppXPT2046_TouchscreenSOFTSPI.hSoftSPI.cppSoftSPI.h
- Reinicia el Arduino IDE. Los archivos deberían aparecer como pestañas adicionales del proyecto.

Paso 2: conexiones físicas
En la placa CYD no necesitas cablear nada externo: pantalla, touchscreen y lector microSD ya vienen integrados en el PCB. Solo necesitas:
- CYD conectada al PC con un cable USB (micro USB o tipo C según versión).
- Tarjeta microSD formateada en FAT32 insertada en la ranura trasera de la placa.
Los pines internos quedan así:
| Función | Pin GPIO | Notas |
|---|---|---|
| MicroSD MOSI | 23 | VSPI hardware |
| MicroSD MISO | 19 | VSPI hardware |
| MicroSD SCLK | 18 | VSPI hardware |
| MicroSD CS | 5 | VSPI hardware |
| Touch T_DIN | 32 | SoftSPI MOSI |
| Touch T_OUT | 39 | SoftSPI MISO |
| Touch T_CLK | 25 | SoftSPI CLK |
| Touch T_CS | 33 | Chip Select |
| Touch T_IRQ | 36 | Interrupción touch |
Paso 3: subir el sketch
Con todo en su lugar, sube el código a la placa CYD. El sketch hace tres cosas:
- Inicializa la microSD en VSPI y crea un archivo
/touch_points.txtcon encabezadox,y,zsi todavía no existe. - Inicializa el touchscreen con SoftSPI usando los pines T_DIN, T_OUT y T_CLK.
- Inicializa la pantalla TFT vía TFT_eSPI más LVGL para mostrar una etiqueta con la posición tocada.
Cada vez que tocas el touchscreen, el callback touchscreen_read() lee las coordenadas calibradas, las muestra en pantalla y las agrega como una nueva línea al archivo de la microSD.
Paso 4: probar
Después de subir el código:
- Abre el Monitor Serial a 115200 baudios para ver el log de inicialización (tipo de tarjeta, capacidad y archivos existentes).
- Toca varios puntos en la pantalla. Verás las coordenadas X, Y y la presión Z actualizándose en vivo.
- Apaga la placa, extrae la microSD e insértala en tu PC.
- Abre
touch_points.txt: deberías ver todas las coordenadas guardadas en formato CSV.

Al revisar la tarjeta en el PC, el archivo de texto contiene cada toque registrado como una fila CSV, listo para procesar después en una planilla o un script:

¿Cuándo NO necesitas la librería modificada?
Solo necesitas usar XPT2046_TouchscreenSOFTSPI cuando vas a operar las tres funciones a la vez (pantalla, touch y microSD). Si tu proyecto solo combina pantalla con touchscreen, o pantalla con microSD, puedes seguir usando la librería estándar XPT2046_Touchscreen sin problemas.
Variantes y mejoras
Una vez que tengas el ejemplo base funcionando, puedes llevarlo más lejos:
- Logger con marca de tiempo: agrega un módulo RTC DS3231 por I2C y guarda cada toque con su fecha y hora exactas. Ideal si quieres registrar interacciones a lo largo del día.
- Pantalla de inicio desde la microSD: carga una imagen o un logo guardado en la tarjeta y muéstralo al arrancar, así personalizas la interfaz sin recompilar el firmware.
- Calibración guardada en la tarjeta: en vez de hardcodear los valores de calibración del touch, guárdalos en un archivo de la microSD y léelos al inicio. Así cada placa conserva su propia calibración aunque cambies de equipo.
Personalización para Chile
En Chile puedes conseguir todo lo necesario en MechatronicStore:
- ESP32 WROOM con pantalla LCD táctil 2.8" LVGL (CYD) (SKU D-517): la misma placa ESP32-2432S028R del tutorial, con pantalla, touch y ranura microSD integrados.
- Tarjeta microSD Kingston Clase 10 (SKU B-450V1): cualquier capacidad de 8GB en adelante sirve; formatéala en FAT32 antes de usarla.
- Cable USB tipo C a USB tipo A 1m (SKU B-101): para alimentar y programar la placa desde el PC (revisa si tu versión del CYD usa micro USB o tipo C).
Recursos
- Tutorial original (inglés): ESP32 CYD: Use Display, Touchscreen and MicroSD Card Simultaneously
- Repositorio GitHub (librería XPT2046 modificada + SoftSPI + sketch): RuiSantosdotme/ESP32-TFT-Touchscreen
- Archivos del proyecto (.zip): ESP32_CYD_Micro_SD_Card_Display_Touchscreen.zip
Versión chilena con componentes en stock local en MechatronicStore. Tutorial inspirado en el trabajo de Random Nerd Tutorials.







