viernes, 24 de abril de 2026

ESP32 STEAMakers AI y pantalla TFT

La idea de este proyecto es hacer un montaje que disponga de una placa ESP32 STEAMakers AI como microcontrolador, una pantalla TFT de 240×240 píxeles SPI ST7789 y tres botones. Las piezas para imprimir en 3D se pueden descargar de Thingiverse.

Con los tres botones se puede interactuar en un juego de preguntas y respuestas. Con dos de ellos nos podremos desplazar por la pantalla y con el tercero se validará la opción seleccionada. 

La caja también incorpora un interruptor para encender y apagar la placa.

La placa dispone de un zócalo para la conexión de la pantalla TFT. La lista de pines que van conectados a la placa son los siguientes.

GND

VCC

SCL    20

SDA    21

RST    38

DC      40

CS      41

BL      42

Programa de prueba

Vamos a programa esta placa desde el IDE de Arduino. Para ello seleccionaremos la placa ESP32S3 Dev Module.

Este es el primer programa que haremos para probar la pantalla TFT.

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>

double i;

#define COL_BLACK 0x0000
#define COL_BLUE 0x001F
#define COL_RED 0xF800
#define COL_GREEN 0x07E0
#define COL_CYAN 0x07FF
#define COL_MAGENTA 0xF81F
#define COL_YELLOW 0xFFE0
#define COL_WHITE 0xFFFF
#define COL_DARKGREY 0x39E7

SPIClass spi_TFT(HSPI);
Adafruit_ST7789 tft = Adafruit_ST7789(&spi_TFT, 41, 40, 38);

static inline void TFT_Backlight(uint8_t state) {
  digitalWrite(42, state ? HIGH : LOW); //inverted
}


void setup()
{
    pinMode(42, OUTPUT); digitalWrite(42, HIGH);

  spi_TFT.begin(20, -1, 21, -1);

  pinMode(41, OUTPUT);
  digitalWrite(41, HIGH);
  pinMode(40, OUTPUT);

  tft.init(240, 240);
  tft.setRotation(0);
  tft.fillScreen(COL_BLACK);

  TFT_Backlight(1);
  tft.fillScreen(0xF81F);

}


void loop()
{

    for (i = 1; i <= 3; i=i+1) { //Circulos
      tft.drawCircle(64, 32, (i * 10), COL_BLACK);
    }
    tft.drawRect(100, 100, 50, 30, COL_BLACK); //Rectangulo
    tft.setFont(NULL); //Texto
    tft.setTextSize(2);
    tft.setTextColor(0xFFE0);
    tft.setCursor(10, 10);
    tft.print(String("Hola"));
}

Esto es lo que se puede ver en la pantalla.

Utilizando los pulsadores


#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>

double i;

#define COL_BLACK 0x0000
#define COL_BLUE 0x001F
#define COL_RED 0xF800
#define COL_GREEN 0x07E0
#define COL_CYAN 0x07FF
#define COL_MAGENTA 0xF81F
#define COL_YELLOW 0xFFE0
#define COL_WHITE 0xFFFF
#define COL_DARKGREY 0x39E7

SPIClass spi_TFT(HSPI);
Adafruit_ST7789 tft = Adafruit_ST7789(&spi_TFT, 41, 40, 38);

static inline void TFT_Backlight(uint8_t state) {
  digitalWrite(42, state ? HIGH : LOW); //inverted
}


void setup()
{
    pinMode(42, OUTPUT); digitalWrite(42, HIGH);

  spi_TFT.begin(20, -1, 21, -1);

  pinMode(41, OUTPUT);
  digitalWrite(41, HIGH);
  pinMode(40, OUTPUT);

  tft.init(240, 240);
  tft.setRotation(0);
  tft.fillScreen(COL_BLACK);

  TFT_Backlight(1);
  tft.fillScreen(0xF81F);

}


void loop()
{
tft.fillScreen(0xF81F);

    for (i = 1; i <= 3; i=i+1) {
      tft.drawCircle(64, 32, (i * 10), COL_BLACK);
    }
    tft.drawRect(100, 100, 50, 30, COL_BLACK);
tft.setFont(NULL);
    tft.setTextSize(2);
    tft.setTextColor(0xFFE0);
    tft.setCursor(10, 10);
    tft.print(String("Hola"));

    if (digitalRead(12) == HIGH) {
      tft.print(String("Adios"));
  }

}



No hay comentarios: