Monitor DCC con ESP32 y TFT 8bits


Monitor DCC con ESP32 y TFT 8bits

Muy buenas a todos y todas!

Este es otro de los proyectos que tenia pendientes de publicar, lo bueno de haber tomado este tiempo es que en un principio lo pensé para utilizar la pantalla con el clásico Arduino UNO pero la cosa se a modernizado con un microcontrolador un más actual.

Después de todo este tiempo ya tenía más o menos el diseño de la interfaz y encontré la manera de conectar mi vieja pantalla TFT de 480x320 con conexión paralela de 8 bits a un ESP32 y así poder hacer uso de las funciones de Wifi y Bluetooth.

Como es un proyecto antiguo las funciones son con la norma original de DCC++ lo que se aplica también a las librerías basadas en DCCpp.



Componentes:

 ESP32 ILI9481 8bits

Otra de las ventajas es que solo hacen falta dos componentes:


  • DOIT ESP32 DEV KIT
  • Display TFT ILI9481 8bits (sin touch)


DOIT ESP32 DEV KIT

Uno de los ESP32 más comunes del mercado. Un hardware sobradamente probado y con una amplia comunidad.

Hace uso de todos los pines analógicos para el control de la pantalla TFT. Incluido el touch en caso de necesitarlo.

El problema con el touch y por lo que solo es un monitor es por que el GPIO2 del touch hace conflicto con la función Wifi.

Display TFT ILI9481 8bits

Si llevas tiempo “jugando” con Arduino es muy probable que tengas una de estas guardada en algún cajón del taller.

Relegadas al olvido por pantallas con mejor comunicación como las SPI, con este programa puedes darle una segunda oportunidad en tu maqueta.

Con un controlador ILI9481, 3.5” pulgadas y una resolución de 480x320, su única pega es tener tener una interfaz de control de 8bits.

Conexiones:

Conexiones TFT ILI9481 8bits con ESP32


Librerías:

Para la pantalla usaremos la librería TFT_eSPI.

Y para la comunicación Wifi usaremos las librerías propias de ESP32 igual que con el proyecto para el controlador con display SH1106, pero con algunas diferencias, las librerías WiFi.h y WiFiClient.h.

Configuración:

Archivo Setup70d_ILI9488_S3_Parallel.h

Es el archivo de configuración de la librería TFT_eSPI ubicado en la carpeta “/Users_Setups” donde pondremos los pines personalizados tanto del ESP32 como de la pantalla con el controlador ILI9481 que hemos dispuesto en la tabla anterior:

#define USER_SETUP_ID 146

#define TFT_PARALLEL_8_BIT

//#define ILI9341_DRIVER
//#define ST7796_DRIVER
#define ILI9481_DRIVER

// ESP32 S3 pins used for the parallel interface TFT
#define TFT_CS    2
#define TFT_DC   32  // Data Command control pin - must use a GPIO in the range 0-31
#define TFT_RST  15

#define TFT_WR   33  // Write strobe control pin - must use a GPIO in the range 0-31
#define TFT_RD    4

#define TFT_D0   12  // Must use GPIO in the range 0-31 for the data bus
#define TFT_D1   13  // so a single register write sets/clears all bits
#define TFT_D2   26
#define TFT_D3   25
#define TFT_D4   17
#define TFT_D5   16
#define TFT_D6   27
#define TFT_D7   14

#define LOAD_GLCD
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define LOAD_GFXFF

#define SMOOTH_FONT


Conexión:

Antes de empezar a utilizar el programa tenemos que configurar las siguientes opciones en el archivo ScreenConfig.h:

  • SSID: Nombre de la red. (Movistar, Vodafone..)
  • WIFIPASS: Contraseña de la red
  • SERVERIP: IP del servidor DCCpp station
  • PORT: puerto del servidor (no modificar)


Podemos configurar las conexiones al principio del programa:

// Configuración WiFi y servidor (modifica según tus necesidades)
#define SSID     "YourSSID"
#define WIFIPASS "YourPass" 
#define SERVERIP "192.168.4.1"
#define PORT     2560


Configurar Sensores:

Tenemos que definir el número de sensores que vamos a utilizar. El número total de sensores se configura en la variable MAX_SENSORES.

#define MAX_SENSORES 16

Por otra parte el programa almacena la ID de cada sensor en el archivo “listaDetectores.h”:

#define SENS00      0    // No definido
#define SENS01      1   // No definido
#define SENS02      2   // No definido
#define SENS03      3   // No definido
#define SENS04      4   // No definido
#define SENS05    5     // No definido
#define SENS06    6   // No definido 
#define SENS07    7   // No definido
#define SENS08    8   // No definido
#define SENS09    9   // No definido

#define SENS10    10    // No definido
#define SENS11    11    // No definido
#define SENS12    12    // No definido
#define SENS13    13    // No definido


El estado inicial del sensor se configura en archivo principal del programa:

uint8_t sensores[MAX_SENSORES] = {  
                                    true, true, true, true, true,
                                    true, true, true, true, true,
                                    true, true, true, true, true
                                 };


Configurar desvíos:

En la variable MAX_DESVIOS podemos modificar e incrementar o disminuir el número de desvíos que vamos a mostrar en la pantalla.

#define MAX_DESVIOS 2


Igual que con los sensores, los desvíos tienen su propia variable llamada desvios[MAX_DESVIOS] donde podemos controlar si los desvíos están activados o no.


uint8_t desvios[MAX_DESVIOS]= {true, false};


uint8_t accesorios[MAX_ACC]= {
                              false, false, false, false, false,
                              false, false, false, false, false
                              };


Secciones de la pantalla:

Diagrama de la maqueta

Esta es la parte más interesante del programa. En este apartado tenemos una representación gráfica de nuestra maqueta.

Una vez dibujada las funciones de detección de sensores cambiarán el color de la pista en función de si esta ocupada libre representado con los siguientes colores:

  • Verde: Libre
  • Rojo: Ocupado

Botones de accesorios

Muestra el estado de los accesorios definidos en el programa.

  • Verde: Encendido
  • Rojo: Apagado

Monitor de comandos

Situado en la parte inferior izquierda de la pantalla nos muestra los comandos recibidos por las comunicaciones serial y wifi.

Monitor de conexión

Situado en la parte inferior derecha de la pantalla nos muestra el estado de la conexión con la red wifi a la que estemos conectado y el estado de la conexión con el servidoer DCC.

En caso de no tener conexión con la red o que la comunicación con el servidor no este disponible, el programa pasará a recepción de datos unicamente con el monitor serial.

Modo de empleo

En este aspecto usar el monitor DCC es realmente sencillo solo tenemos que configurar como hemos visto un poco más arriba y esperar a que se realice la conexión con la central DCCpp LMD.


Conclusión:

Aunque un poco tarde, al final este monitor para DCC cumple con los mínimos exigidos, locomotoras y desvíos y accesorios.

Se puede colocar en cualquier parte de un panel de control o en una parte alejada de la zona de control para poder comprobar el paso de nuestra locomotora en la maqueta.

Al ser solo un prototipo de mi maqueta particular tiene mucho margen de mejora, pero es un buen comienzo para tener en conjunto con una central DCCpp LMD.

Descargar Monitor DCC con ESP32 y TFT 8bits desde Github.

Otros proyectos con pantallas TFT:

Pantalla llegadas de trenes Adif

Pantalla, RF y plan de vías

Saludos a todos y todas!!!