ESP32- con TFT- ili9341

Buen día:

Estoy intentando familiarizarme con las pantallas TFT, y para empezar he comprado una tft ili9341.
Me he leido el manual, superinteresante que hizo

TFTLCDCyg

. Para quien le interese, este es elace:
https://forum.arduino.cc/index.php?topic=346755.0

Las librerías que descargué son las de Ardufruit, y lo estoy conectando con una ESP32, ya que al tener Wifi, pretendo, más adelante, enviar el dato a un portal en internet.

La cuestión es:

1.- Declaro perfectamente la variable char:

char TX[25];

2.- Luego en el loop, pongo el código que indican:

int T = random(90,110); //simula los datos del sensor
     sprintf(TX,"%3d C", T);
     tft.setCursor(137, 50);
     tft.setTextColor(YELLOW, BLACK);  tft.setTextSize(3);
     tft.println(TX);

Hasta aquí todo perfecto, peeeero, si lo compilas para un Arduino
En cuanto lo haces para una ESP, aparece un error.
Lo cierto es que no se manera de solucionarlo

Este es el error:

static const uint8_t TX = (uint8_t)'\001'
un argumento de tipo "uint8_t" no es compatible con un parámetro de tipo "char *"C/C++(167)

No creo que esta manera de escribir las variables, tan cómoda, solo valga para placas del tipo Arduino.

Bueno, ya me direis, si alguien tambien tuvo este problema.

Gracias.

coloca todo el código para poder reproducir el error.
Si pones algo parcial nosotros completamos con muchas dudas de lo que has o no has hecho.
Una verificación de tu problema obliga a disponer de lo que a ti te da error.

Gracias.

NOTA:
Los enlaces van con etiquetas de enlaces, no como códigos.
Editado.

Ok. Tienes toda la razón.
¡Comos si fuera la primera vez que pongo un post en este foro! :smiling_imp: :smiling_imp:
Sorry!

Venga va!.
He intentado reducirlo lo máximo posible

#include <Arduino.h>
#include <SPI.h>
#include <Adafruit_ILI9341.h>

//********************************
//***   CONFIGURACION DISPLAY  ***
//********************************
#define TFT_DC 10
#define TFT_CS  9

//***********************************************/
//***   TAMAÑO DISPLAY  Eje X=240   Eje Y=320 ***/
//***********************************************/

//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
Adafruit_ILI9341 tft = Adafruit_ILI9341(    5,      22,      23,      18,      4,        19);

//********************************
//***  DECLARAMOS LAS VARIABLES ***
//********************************
int variable=0;
char TX[50];


//********************************
//***  DECLARAMOS LAS FUNCIONES ***
//********************************


void setup() {
  Serial.begin(115200);


  //Iniciamos display LCD
  tft.begin();
  tft.setRotation(3);
  tft.fillScreen(ILI9341_BLACK);

  /* setRotation 0=Posicion original, 1=Rotado 90 grados, 2=Rotado 180° y 3=Rotado 270° */
  tft.setRotation(3); //Horizontal
  // fillScreen color de pantalla
  tft.fillScreen(ILI9341_ORANGE); //ILI9341_RED);
  tft.setTextColor(ILI9341_BLACK);
  
  /***** PANTALLA PRESENTACION *****/
  tft.setCursor(30,30); tft.setTextSize(3);
  tft.println("HOLA");  
}

void loop() {
 
  int T = random(90,110); //simula los datos del sensor
     sprintf(TX,"%3d C", T);
     tft.setCursor(137, 50);
     tft.setTextColor(ILI9341_YELLOW);  tft.setTextSize(3);
     tft.println(TX);   
}

Si lo compilo para Arduino uno, como el que está usando

TFTLCDCyg

funciona.
Pero si lo hago para una ESP32 DEV MODULE da error.
GEnera un conflicto la variable char..

Seguiré investigando el porque.

1 Like

Revisé tu código. Tengo tres observaciones.

Primera:
Procura utilizar la librería TFT_eSPI para ESP32, es mucho más rápida que las versiones convencionales para ILI9341.

Segunda:
La variable que te da error

char TX [50]

Está ligada a alguna rutina interna en las librerías de control de las pantallas ILI9341 basadas en el core de adafruit. Sustitúyela por esta variable para que quites ese error de compilación:

char TXT [50]

Tercera
Procura colocar una mascara de fondo al texto, para que los caracteres no se superpongan en la pantalla, esto lo consigues con esta línea:

tft.setTextColor(ILI9341_YELLOW, ILI9341_ORANGE);

PD: en la libreria TFT_eSPI, debes utilizar el configurador User_Setup.h para ESP32 + ILI9341, estos son los pines que se deben habilitar

//#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS   15  // Chip select control pin
#define TFT_DC    2  // Data Command control pin
#define TFT_RST   4  // Reset pin (could connect to RST pin)

Hardware: DOIT ESP32 DEVKIT V1 + ILI9341 3.2"

Así queda tu proyecto con TFT_eSPI

//#include <Arduino.h>
//#include <SPI.h>
//#include <Adafruit_ILI9341.h>

#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();       // Invoke custom library

//********************************
//***   CONFIGURACION DISPLAY  ***
//********************************
//#define TFT_DC 10
//#define TFT_CS  9

//***********************************************/
//***   TAMAÑO DISPLAY  Eje X=240   Eje Y=320 ***/
//***********************************************/

//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
//Adafruit_ILI9341 tft = Adafruit_ILI9341(    5,      22,      23,      18,      4,        19);
//Adafruit_ILI9341 tft = Adafruit_ILI9341(    15,      2,      23,      18,      4,        19);   //ESP32 DevKit V1

//********************************
//***  DECLARAMOS LAS VARIABLES ***
//********************************
int variable=0;
char TXT[50];


//********************************
//***  DECLARAMOS LAS FUNCIONES ***
//********************************


void setup() {
  Serial.begin(115200);


  //Iniciamos display LCD
  tft.init();
  //tft.begin();
  tft.setRotation(3);
  tft.fillScreen(ILI9341_BLACK);

  /* setRotation 0=Posicion original, 1=Rotado 90 grados, 2=Rotado 180° y 3=Rotado 270° */
  tft.setRotation(3); //Horizontal
  // fillScreen color de pantalla
  tft.fillScreen(ILI9341_ORANGE); //ILI9341_RED);
  tft.setTextColor(ILI9341_BLACK);
  
  /***** PANTALLA PRESENTACION *****/
  tft.setCursor(30,30); tft.setTextSize(3);
  tft.println("HOLA");  
}

void loop() {
 
  int T = random(90,110); //simula los datos del sensor
     sprintf(TXT,"%3d C", T);
     tft.setCursor(137, 50);
     tft.setTextColor(ILI9341_YELLOW, ILI9341_ORANGE);  tft.setTextSize(3);
     tft.println(TXT);  
}

Un apunte final: la librería TFT_eSPI tiene la capacidad de gestionar imágenes JPG desde un lector microSD externo

1 Like

Hola a todos, estoy tratando de conectar mi ILI9341 de 3.2" de 320x240, pero lo único que logro es que quede todo blanco.
Lo tengo conectado así a mi NodeMCU ESP8266:
CS-D8
RST-D5
RS/DC-D3
MOSI-D7
CLS/SCK-D5
MISO-D6
VDD-3.3V
GND-GND
BL/LED-3.3V

Tengo la versión TFT de 34 pines: https://es.aliexpress.com/i/32808968215.html

Solamente quiero hacerlo funcionar, después veré el tema del touch y/o SD.

Alguna idea?

Muchas Gracias

Perdón, quise decir

RST - D4