Controlador DCC con ESP32 3C mini y display SH1106


Pantalla Module OLED SH110x ESP32 C3 Mini

Muy buenas a todos y todas!

Le estoy dando otra oportunidad a la librería DCCpp LMD para las viejitas placas MEGA.

Como se arreglo la comunicación Wifi en la librería ahora puedo comunicar diferentes dispositivos como este controlador DCC con ESP32 3C Mini y display SH110x.

Para usar de manera sencilla con la Central DCCpp LMD y portable a otras como DCCEX.

Hace uso de los comandos básicos “t” y “a”, para el control de locomotoras y accesorios.

Componentes:

Pantalla Module OLED SH110x ESP32 C3 Mini

  • ESP32 C3 Mini
  • Modulo display SH110x 1.3" i2C + 2 pulsadores


El ESP32 C3 Mini

Es el más pequeño de la familia ESP32 con una dimensiones súper reducidas de 25mm * 18mm, no así su potencia.

Con este microcontrolador tenemos las lineas suficientes para controlar la pantalla i2C y los botones.

También gestionaremos las conexiones tanto a la red Wifi como al servidor de nuestra estación DCCpp LMD.

Módulo display SH110x 1.3” i2C + 2 pulsadores

Este módulo tiene 2 versiones una que monta el controlador SSD1306 y la que traigo a la web que es la versión con el controlador SH1106.

Esta bastante bien y usa una pantalla un poco más grande de 1.3”, pero con la misma resolución, 128x64 pixeles.

También cuenta con un encoder rotatorio con pulsador y dos pulsadores extras llamados “CONFIRM” y “BACK”.

Conexiones:

Conexiones ESP32-C3 y OLED 1.3' SH1106


Conexiones ESP32-C3 y OLED 1.3' SH1106

Función Pin GPIO
SDA (I²C Data) GPIO8
SCL (I²C Clock) GPIO9
Encoder A GPIO2
Encoder B GPIO3
BTN Encoder GPIO4
BTN Back GPIO5
BTN Conf GPIO20
Tabla de asignación de funciones a pines GPIO

Librerías:

Para la pantalla usaremos las librería Adafruit_GFX.h y Adafruit_SH110X.h.

Y para la comunicación Wifi usaremos las librerías propias de ESP32 WiFi.h y WiFiClient.h.

Configuración:

Conexión:

Antes de empezar a utilizar el programa tenemos que configurar las siguientes opciones:

  • ssid: Nombre de la red. (Movistar, Vodafone..)
  • password:Contraseña de la red
  • serverIP:IP del servidor DCCpp station
  • serverPort:puerto del servidor (no modificar)


Podemos configurar las conexiones al principio del programa:

// Configuración WiFi y servidor (modifica según tus necesidades)
const char* ssid = "YourSSID";
const char* password = "YourPass";
const char* serverIP = "192.168.1.5";
const int serverPort = 2560;


Configurar locomotoras:

Para utilizar las locomotoras tenemos que rellenar la tabla teniendo en cuenta que:

{ID, Dirección DCC, velocidad, Dirección de la marcha}” son los siguientes datos:

  • ID: Identificador interno DCC.
  • Dirección DCC: Dirección DCC de la locomotora.
  • velocidad 0 para iniciar en parada.
  • Dirección de la marcha: 1=avance, 0= retroceso.


Locomotora locomotoras[numIDs] = {
  {1, 3, 0, 1},   // ID 1, Dirección DCC 3, velocidad 0, adelante
  {5, 5, 0, 1},   // ID 2, Dirección DCC 5, velocidad 0, adelante
  {3, 7, 0, 1},   // ID 3, Dirección DCC 7, velocidad 0, adelante
  {4, 9, 0, 1},   // ID 4, Dirección DCC 9, velocidad 0, adelante
  {5, 11, 0, 1},  // ID 5, Dirección DCC 11, velocidad 0, adelante
  {6, 13, 0, 1},  // ID 6, Dirección DCC 13, velocidad 0, adelante
  {7, 15, 0, 1},  // ID 7, Dirección DCC 15, velocidad 0, adelante
  {8, 17, 0, 1},  // ID 8, Dirección DCC 17, velocidad 0, adelante
  {9, 19, 0, 1},  // ID 9, Dirección DCC 19, velocidad 0, adelante
  {10, 21, 0, 1}  // ID 10, Dirección DCC 21, velocidad 0, adelante
};


Configurar desvíos:

En la variable numDesvios la podemos modificar e incrementar o disminuir el número de desvíos que vamos a operar.

const int numDesvios = 12;


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

  • Dirección: Dirección entre 0 y 512.
  • Sub: Sub Dirección entre 0 y 3.
  • Estado: Abierto=1, cerrado=0
  • Nombre: Descripción 8 caracteres máx.


Desvio desvios[numDesvios] = 
{
  {0, 0, 0, "Desvio 1"},   // Dirección 0, Sub 0
  {0, 1, 0, "Desvio 2"},   // Dirección 0, Sub 1
  {0, 2, 0, "Desvio 3"},   // Dirección 0, Sub 2
  {0, 3, 0, "Desvio 4"},   // Dirección 0, Sub 3
  {1, 0, 0, "Desvio 5"},   // Dirección 1, Sub 0
  {1, 1, 0, "Desvio 6"},   // Dirección 1, Sub 1
  {1, 2, 0, "Desvio 7"},   // Dirección 1, Sub 2
  {1, 3, 0, "Desvio 8"},   // Dirección 1, Sub 3
  {2, 0, 0, "Desvio 9"},   // Dirección 2, Sub 0
  {2, 1, 0, "Desvio 10"},  // Dirección 2, Sub 1
  {2, 2, 0, "Desvio 11"},  // Dirección 2, Sub 2
  {2, 3, 0, "Desvio 12"}   // Dirección 2, Sub 3
};


Modo de empleo

Menú principal

Desde aquí tenemos acceso al encendido y apagado de la central DCC y las funciones que controlan las locomotoras y los desvíos.

La última opción es para visualizar alguna información del sistema

Pantalla Module OLED SH110x ESP32 C3 Mini


Encendido y apagado de la central DCC (Start)

Al seleccionar con el botón del encoder enviará el comando de encendido “<1>” o de apagado “<0>“.


Programa principal (Main)

Desde aquí controlamos las diferente locomotoras que hemos almacenado en la variable locomotoras[numIDs].

  • Encoder: Subir o bajar velocidad de locomotora seleccionada.
  • Pulsador encoder: Cambia dirección de locomotora seleccionada
  • Pulsador Confirm: Cambia de locomotora.
  • Pulsador Back: Vuelve al menú principal.
Pantalla Module OLED SH110x ESP32 C3 Mini


Programa secundario (Turnouts)

Este apartado controla los desvíos, en este caso configurados como accesorios es decir, tienen Dirección y SubDirección.

  • Encoder: Seleccionar entre los diferentes desvíos de la lista.
  • Pulsador encoder: No se usa.
  • Pulsador Confirm: Cambia el estado del desvío seleccionado.
  • Pulsador Back: Vuelve al menú principal.
Pantalla Module OLED SH110x ESP32 C3 Mini


Información del sistema:

En esta sección tenemos información del sistema como:

  • Temperatura interna del ESP32 C3 Mini.
  • Pantalla Module OLED SH110x ESP32 C3 Mini
  • Estado del la conexión wifi.
  • Nombre de la red.
  • IP asignada por el router.
  • Intensidad de la señal.
  • Calidad de la señal.


Conclusión:

El proyecto cumple con los objetivos planteados, proporcionando una solución fácil de usar para el control de maquetas ferroviarias mediante WiFi y en conjunto con la central DCCpp LMD.

La combinación del ESP32-C3 con pantalla OLED SH1106 y encoder rotatorio ofrece una experiencia de usuario que, aunque lejana a la de equipos comerciales, ofrece la flexibilidad y personalización del desarrollo propio.

Permite futuras ampliaciones y mejoras de manera sencilla. La comunicación WiFi garantiza una respuesta rápida a las acciones del usuario, mientras que la pantalla OLED nos mantiene información en todo momento.

Este sistema demuestra cómo la combinación de microcontroladores modernos como el ESP32-C3 con la conectividad WiFi y una interfaz de usuario bien diseñada puede crear soluciones profesionales para el modelismo ferroviario a un coste reducido y con grandes posibilidades de personalización.

Descargar SH1106-DCCpp-Wifi-controller desde Github.

Saludos a todos y todas!!!