Controlador DCC con ESP32 3C mini y display SH1106

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:
- 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:
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
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.
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.
Información del sistema:
En esta sección tenemos información del sistema como:
- Temperatura interna del 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!!!
