En esta ocasión aprenderás a conectar una pantalla TFT LCD Circular GC9A01 a una tarjeta ESP32 DEVKIT V1 30 Pines por medio de comunicación SPI para crear un minijuego muy ad hoc a esta temporada.
Para la programación de este minijuego utilizaremos el entorno de Arduino IDE y una librería optimizada para el uso de pantallas TFT LCD en conjunto con microcontroladores de la familia ESP32, con esta práctica entenderás el funcionamiento básico de las funciones de esta librería.
Materiales
Para esta práctica necesitaremos:
- 1 x TFT Circular GC9A01
- 1 x ESP32 DEVKIT V1 30 Pines
- 1 x Protoboard 400 Puntos
- 2 x Push Button 4 pines MicroSwitch
- 1 x Zumbador Buzzer Pasivo
- 1 x Cable USB a MicroUSB o Cable USB Tipo C 3A 6A*
- 7 x Cables Dupont Hembra-Hembra
- 5 x Cables Dupont Macho-Hembra
- 4 x Cables Dupont Macho-Macho
*Dependiendo que tipo de alimentación requiera tu tarjeta ESP32 DEVKIT V1 30 Pines
Conexiones
Antes de programar el minijuego debes realizar las siguientes conexiones:
Antes de continuar a la sección de Software asegúrate de haber realizado las conexiones de forma correcta.
Software
Para esta práctica utilizaremos las siguientes librerías:
- SPI
- TFT_eSPI*
*La librería TFT_eSPI se adecuó para ser compatible con la pantalla TFT LCD Circular, si requieres la librería sin modificaciones puedes obtenerla en el gestor de Bibliotecas de Arduino IDE.
También será necesaria la instalación del driver CP2102 o CH340C, dependiendo del Chip USB -Serial que utilice tu tarjeta ESP32 DEVKIT V1 30 Pines. Este driver es muy importante para que tu computadora pueda reconocer la tarjeta.
Por último, ya que trabajaremos en el Entorno de Arduino IDE es necesario agregar las tarjetas ESP32, para ello utilizaremos el gestor de Placas que es el segundo icono en el lateral derecho dentro del entorno de Arduino.
En el buscador escribe ESP32 e instala esp32 de Espressif Systems
Código
Una vez que hayas instalado las librerías, placas y drivers necesarios es momento de conectar nuestra placa ESP32 DEVKIT a nuestra PC con ayuda de nuestro cable USB a MicroUSB o USB a USB C.
Ahora hay que revisar que puerto COM está asignado a tu tarjeta ESP32 DEVKIT. Para ello abre el administrador de dispositivos y despliega Puertos (COM y LPT), deberías visualizar algo así para el caso del driver CH340C:
para el caso del driver CP2102 deberías ver algo así:
En nuestro caso la tarjeta ESP32 DEVKIT esta asignada al puerto COM17 de nuestra PC.
Una vez que sepamos que puerto COM está asignado a nuestra tarjeta ESP32 DEVKIT abriremos Arduino IDE y realizaremos el siguiente código:
/* UNIT electronics BLOG Este código sirve para hacer un minijuego con temática de Halloween en el cual la bruja debe desplazarse hacia arriba cuando se presione el botón ButtonUp y hacia abajo cuando de presione el botón ButtonDown para evitar los murciélagos que se atraviesen en su camino. Cada que evite un murciélago se escuchará un beep agudo y la puntuación en la parte superior de la pantalla incrementará, si la bruja choca con el murciélago se escuchará un beep grave y el contador de vidas descenderá. Si las vidas se acaban la pantalla mostrará GAME OVER!, tu puntuación y sonará una pequeña melodía. */ //Librerías #include <SPI.h> #include <TFT_eSPI.h> //Invocación del Setup de la librería TFT_eSPI TFT_eSPI tft = TFT_eSPI(); //Matriz Bruja const unsigned char PROGMEM bruja[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x04, 0xff, 0xe4, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x07, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xfc, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfb, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf3, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf1, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x80, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x3f, 0xff, 0x02, 0x00, 0x03, 0xf8, 0x18, 0x7f, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0x00, 0x1f, 0xfc, 0x7f, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xfe, 0x00, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x80, 0xff, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xe2, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xfc, 0x3f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xe0, 0x3f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x8f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00 }; //Matriz Murciélago const unsigned char PROGMEM murcielago[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x7c, 0x00, 0x00, 0x7e, 0x17, 0x7c, 0x00, 0x01, 0xff, 0xcf, 0xf8, 0x00, 0x03, 0xff, 0xef, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //Matriz Bosque const unsigned char PROGMEM bosque[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe8, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf1, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0xc8, 0x81, 0x80, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf9, 0xf0, 0x81, 0x80, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfd, 0xe0, 0x83, 0x80, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x09, 0xfd, 0xf9, 0x83, 0x80, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x07, 0xf9, 0xe1, 0x83, 0x80, 0x00, 0x01, 0xc0, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x07, 0xf3, 0xe1, 0xc7, 0x80, 0x00, 0x01, 0xc0, 0x00, 0x1c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x0f, 0x80, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf1, 0xc7, 0x80, 0x00, 0x01, 0xe0, 0x00, 0x1c, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x80, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xe0, 0xc3, 0xc0, 0x40, 0x03, 0xe0, 0x00, 0x18, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x07, 0x80, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xfb, 0xe9, 0xc7, 0x80, 0x00, 0x01, 0xe0, 0x00, 0x08, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x0f, 0x08, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x87, 0xff, 0xfb, 0x87, 0x80, 0x40, 0x05, 0xf8, 0x00, 0x18, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x1f, 0x08, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x01, 0x83, 0xff, 0xf3, 0xef, 0x80, 0x40, 0x03, 0xf0, 0x00, 0x1e, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x1f, 0xd8, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x9f, 0xff, 0xfd, 0xc7, 0xc0, 0x00, 0x07, 0xf0, 0x00, 0x3f, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x0f, 0x9c, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x01, 0x8f, 0xff, 0xf9, 0x8f, 0xcc, 0x40, 0x07, 0xf2, 0x00, 0x3f, 0x00, 0x70, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x00, 0x0f, 0xfc, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x01, 0x8f, 0xff, 0xf3, 0xcf, 0x87, 0xf0, 0x03, 0xf2, 0x00, 0x1f, 0x00, 0x7c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x3c, 0x00, 0x1b, 0xfe, 0x20, 0x03, 0xe0, 0x00, 0x00, 0x03, 0x87, 0xff, 0xf7, 0xc7, 0xbc, 0xc0, 0x03, 0xe6, 0x00, 0x5f, 0x00, 0x78, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xfe, 0x00, 0x3f, 0xfe, 0x30, 0x03, 0xc0, 0x00, 0x00, 0x01, 0xb7, 0xff, 0xff, 0xdf, 0xe6, 0xc0, 0x1b, 0xee, 0x00, 0x3f, 0x00, 0x78, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0xfc, 0x90, 0x3f, 0xfc, 0x30, 0x87, 0xc0, 0x00, 0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xf5, 0xc0, 0x0f, 0xfe, 0x00, 0x9f, 0x00, 0xf8, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x67, 0x7f, 0x18, 0x1f, 0xfc, 0x70, 0x8f, 0xc0, 0x00, 0x00, 0x01, 0xdf, 0xff, 0xff, 0xef, 0xfc, 0xf8, 0x07, 0xf6, 0x00, 0xff, 0x00, 0xf8, 0x80, 0x07, 0x00, 0x08, 0x00, 0x00, 0x04, 0xef, 0xfe, 0x18, 0x7f, 0xfc, 0x70, 0x87, 0xe0, 0x10, 0x00, 0x03, 0xef, 0xff, 0xf3, 0xff, 0xfc, 0xfc, 0x01, 0xf6, 0x04, 0xff, 0x00, 0x78, 0x80, 0x03, 0x00, 0x08, 0x00, 0x00, 0x04, 0xff, 0xf8, 0x38, 0x7f, 0xfc, 0x70, 0x87, 0xe0, 0x10, 0x00, 0x0f, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0x04, 0x7f, 0x00, 0xfc, 0x80, 0x07, 0x00, 0x08, 0x00, 0x00, 0x04, 0xff, 0xfc, 0x38, 0x5f, 0xfe, 0x71, 0xc7, 0xf8, 0x10, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xfd, 0x07, 0xff, 0x04, 0xff, 0x00, 0xf9, 0x80, 0x1f, 0x00, 0x18, 0x00, 0x04, 0x05, 0xff, 0xfe, 0x38, 0x4f, 0xfe, 0x7b, 0x8f, 0xf8, 0x30, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xfd, 0xa3, 0xff, 0x04, 0x7f, 0x88, 0xfd, 0x80, 0x17, 0x80, 0x1c, 0x00, 0x04, 0x05, 0xff, 0xfe, 0x38, 0xff, 0xfe, 0x7f, 0x8f, 0xf0, 0x38, 0x00, 0x0f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xbf, 0xff, 0x06, 0x3f, 0xc8, 0xf9, 0xc0, 0x1f, 0x80, 0x1e, 0x00, 0x04, 0x0f, 0xff, 0xfc, 0x3c, 0xff, 0xfe, 0xff, 0xcf, 0xe0, 0x3c, 0x20, 0x1b, 0xdf, 0xff, 0xff, 0xef, 0xff, 0xfd, 0xbf, 0xff, 0x07, 0x1f, 0x08, 0xff, 0xc4, 0x1f, 0x80, 0x1e, 0x00, 0x04, 0x0f, 0xff, 0xff, 0x3c, 0xff, 0xff, 0xff, 0x8f, 0xf8, 0x3c, 0x20, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xaf, 0xff, 0x0d, 0xff, 0x48, 0xfd, 0xce, 0x37, 0x20, 0x1e, 0x00, 0x04, 0x0f, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xf0, 0x3c, 0x30, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xa7, 0xfe, 0x2e, 0xff, 0xfc, 0xff, 0xcc, 0x3f, 0xc0, 0x3e, 0x00, 0x06, 0x2f, 0xff, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xf0, 0x7c, 0x30, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xf9, 0xff, 0xc6, 0x1f, 0x80, 0x7e, 0x00, 0x6e, 0x2f, 0xff, 0xfe, 0x7f, 0xff, 0xfe, 0xff, 0xc7, 0xfe, 0xfc, 0x30, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xfd, 0xff, 0xe7, 0x7f, 0xc1, 0x7e, 0x00, 0x6e, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xfe, 0x7c, 0x70, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xef, 0xff, 0xfd, 0xff, 0xcf, 0xff, 0xc1, 0xfe, 0x00, 0xee, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7c, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xef, 0xff, 0xc1, 0x3f, 0x00, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3e, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xcc, 0xff, 0xc1, 0x9e, 0x00, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xc1, 0xfe, 0x80, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0x80, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; //Notas musicales const int e7 = 2637; const int g6 = 1568; const int d6 = 1175; const int a6 = 1760; const int b6 = 1975; const int g5 = 784; const int e6 = 1318; const int c7 = 2093; const int g7 = 3136; // Notas de la canción int notas[] = { e7,g6,d6,a6,b6,g5,e6,a6, b6,c7,e7,g7 }; // Duración de cada nota (en milisegundos) int duraciones[] = { 2,4,8,8,4,4,1,4,4,4,4,2 }; //Pin del Buzzer #define Buzz 14 //Pines de los botones #define ButtonUp 13 #define ButtonDown 12 //Posición inicial de la bruja {x,y} int witchPos[] = { 10, 90 }; //Posición inicial del murcielago {x,y} int batPos[] = { 190, 50 }; int vidas = 5; int puntuacion = 0; int witchStep = 3; int batStep = 5; int espera = 200; // void IRAM_ATTR arriba() { void arriba() { tft.fillRect(witchPos[0], witchPos[1], 80, 57, TFT_BLACK); witchPos[1] -= witchStep; tft.drawBitmap(witchPos[0], witchPos[1], bruja, 80, 57, TFT_WHITE); } // void IRAM_ATTR abajo() { void abajo() { tft.fillRect(witchPos[0], witchPos[1], 80, 57, TFT_BLACK); witchPos[1] += witchStep; tft.drawBitmap(witchPos[0], witchPos[1], bruja, 80, 57, TFT_WHITE); } void setup() { Serial.begin(115200); pinMode(ButtonUp, INPUT_PULLUP); // attachInterrupt(digitalPinToInterrupt(ButtonUp),arriba, FALLING); pinMode(ButtonDown, INPUT_PULLUP); // attachInterrupt(digitalPinToInterrupt(ButtonDown),abajo, FALLING); pinMode(Buzz, OUTPUT); // Inicailización de la pantalla TFT Circular GC9A01 tft.init(); tft.fillScreen(TFT_BLACK); tft.drawBitmap(witchPos[0], witchPos[1], bruja, 80, 57, TFT_WHITE); tft.drawBitmap(batPos[0], batPos[1], murcielago, 40, 40, TFT_WHITE); } void loop() { draw(); batMov(); if (digitalRead(ButtonUp) == 0 && witchPos[1] > 36) { arriba(); } if (digitalRead(ButtonDown) == 0 && witchPos[1] < 130) { abajo(); } } void draw() { tft.setCursor(80, 5, 2); tft.setTextColor(TFT_WHITE); tft.println("Score:"); tft.fillRect(120, 5, 15, 15, TFT_BLACK); tft.setCursor(120, 5, 2); tft.println(puntuacion); tft.drawBitmap(10, 160, bosque, 240, 78, TFT_WHITE); tft.setCursor(85, 220, 2); tft.setTextColor(TFT_BLACK); tft.println("Vidas:"); tft.setCursor(120, 220, 2); tft.println(vidas); tft.drawBitmap(batPos[0], batPos[1], murcielago, 40, 40, TFT_WHITE); } void batMov() { if (batPos[0] > 0) { tft.fillRect(batPos[0], batPos[1], 40, 40, TFT_BLACK); batPos[0] -= batStep; tft.drawBitmap(batPos[0], batPos[1], murcielago, 40, 40, TFT_WHITE); delay(espera); if (batPos[0] >= witchPos[0] && batPos[0] <= (witchPos[0] + 80) && batPos[1] >= witchPos[1] - 40 && batPos[1] <= (witchPos[1] + 40)) { tft.fillRect(batPos[0], batPos[1], 40, 40, TFT_BLACK); batPos[1] = random(37, 129); batPos[0] = 190; tft.drawBitmap(batPos[0], batPos[1], murcielago, 40, 40, TFT_WHITE); vidas -= 1; tone(Buzz, g5, 100); if (vidas < 0) { vidas = 0; gameover(); } } if (batPos[0] == 0) { tft.fillRect(batPos[0], batPos[1], 40, 40, TFT_BLACK); batPos[1] = random(37, 129); batPos[0] = 190; tft.drawBitmap(batPos[0], batPos[1], murcielago, 40, 40, TFT_WHITE); puntuacion += 1; tone(Buzz, e7, 100); } } } void gameover() { tft.fillScreen(TFT_BLACK); tft.setCursor(80, 60, 2); tft.setTextColor(TFT_BLUE); tft.println("GAME OVER!"); tft.setTextColor(TFT_WHITE); tft.setCursor(70, 120, 1); tft.println("Puntuacion: "); tft.setCursor(140, 120, 1); tft.println(puntuacion); song(); vidas = 5; puntuacion = 0; tft.fillScreen(TFT_BLACK); tft.drawBitmap(witchPos[0], witchPos[1], bruja, 80, 57, TFT_WHITE); } void song() { // Reproducimos la canción for (int i = 0; i < 12; i++) { int noteDuration = 1000 / duraciones[i]; tone(Buzz, notas[i], noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(Buzz); } }
Para hacer la carga del programa, en da clic en Herramientas y sigue la siguiente ruta: Placa >> esp32 >>ESP32 Dev Module
Ahora debes seleccionar el Puerto COM al que esta asignada tu placa, para ello nuevamente da clic en Herramientas y selecciona Puerto, posteriormente el puerto COM de tu placa.
Finalmente asegúrate que la configuración de tu entorno sea la siguiente:
Ahora puedes cargar el código a tu tarjeta como lo harías normalmente con una tarjeta Arduino.
Conclusiones
En esta práctica realizamos un minijuego un poco más complejo que el de nuestra Práctica anterior de ESP32, utilizamos una nueva librería y la ESP32 sin embargo, como puedes ver las librerías de TFT (Adafruit ST7735 y TFT eSPI) comparten funciones muy similares para realizar acciones básicas (como dibujar formas geométricas o generación de texto).
En el caso de las librerías Adafruit , se tendrá que hacer hincapié en el modelo de pantalla que se estará utilizando. En cambio, para la TFT eSPI es de uso general en la mayoría de las pantallas TFT que queramos usar con los controladores de la familia ESP32. Te invitamos a que revises la documentación de las librerías, específicamente el archivo User_Setup.h para TFT eSPI.
Te invitamos a visualizar el funcionamiento de esta práctica en nuestro canal de TikTok.