5

DCC++ con pantalla OLED SSD1306 i2C

Muy buenas a todos los amigos del hobby!!! y a los que no… ya caeréis… Esta vez traigo una adaptación para la central DCC++ con una pequeña pantalla Oled de 0.96″ conectada al protocol i2C.

Esta pequeña pantalla nos mostrará datos actualizados de los comandos que entran por el monitor serial, ya sea conectado directamente al Pc o a un transmisor Bluetooth HC-06 (para mi la mejor manera de conectarlo tanto a Pc como por Android con DCCpp Cab).

¿Como conectamos la pantalla Oled a la central DCC++?

Las pantallas que he visto por internet funcionan en su mayoría a 5V aunque también creo que pueden funcionar a 3.3V ¡¡¡Revisa bien la información de la pantalla antes de realizar las conexiones!!! Una vez tenemos esto claro, y al estar comunicada con el protocolo i2C solo tenemos que conectar los pines SDA y SCL situados en los pines 20 y 21 respectivamente. La placa Mega tiene dos de estos conectores, uno situado justo al USB y otro, en la misma linea de pines, junto a Serial 1.

Que ofrece esta adaptación?

Con esta adaptación la central mostrará en la pantalla la información que recibe la central DCC++ en cada momento. Como indica el titulo, esta es una pantalla i2C de 0.96″ en blanco y negro. Esta estará conectada a la placa MEGA de Arduino. Si, me temo que su hermano pequeño UNO no es capaz de tirar en condiciones de esta pantalla o al menos no con la librería de Adafruit. Tengo mis dudas sobre si por culpa de la librería o por la memoria, sea como fuere, UNO, solo carga la pantalla inicial, cuando enciende, su funcionamiento deja de ser el deseado.

El código añadido a son las dos paginas llamadas Oled.h y Oled.cpp de las cuales haré un resumen mas adelante. Para configurar la pantalla también se han añadido unos parámetros de configuración en el archivo Config.h.

Estos se encuentran al final de la pagina y son estos:

#define OLED_ADDRESS 0x3C //Dirección de la pantalla

#define OLED_NAME «SDD1306» //Nombre de la pantalla

La dirección de la pantalla (0x3C) es la que puede variar según la pantalla. Muchas veces viene escrito en algún lugar de la pantalla y otras no, si tu caso es el último hay software que te puede ayudar con eso. Conectando la pantalla y corriendo este sencillo sketch el cual te informara en el monitor serial la dirección de la pantalla.

El archivo Oled.cpp:

define ACTUALIZA_INFO 250 es la linea encargada del refresco de la pantalla que sera cada 250ms. Es decir la pantalla tiene un refresco de 4fps.

define PAUSA_ 24 es la siguiente linea que se puede modificar y bueno esta pausa no es una pausa en si, son las repeticiones que harán las pantalla que no sean la principal. Como tenemos 4fps y queremos que la pausa sea de 6 segundos 6*4 = 24 repeticiones.

Una vez que pasa la pequeña animación de scroll, entra la pantalla inicial:

Esta pantalla nos indica el estado de la central, la versión de DCC++, el tipo de comunicación y el número de desvíos, sensores y salidas definidas en la central. Aparecerá siempre que apaguemos la central con el comando < 0 >.

Cuando encendamos la central con el comando < 1 > da paso a la pantalla de encendido:

La etiqueta «Throttle» muestra la dirección DCC de la locomotora, así como su velocidad y sentido de la marcha. << >>

«Accessor» muestra la dirección, subdirección y el estado del último accesorio/desvío que se haya activado o desactivado

En «Sensores» y «Salidas» primero muestra el identificador (id) luego el pin asociado a ese sensor o salida y el estado 1 o 0.

Si intentamos activar un desvío que no esté definido aparecerá el siguiente mensaje…

Hay algunas pantallas más las cuales iré subiré dentro de poco.

Por lo demás la central sigue siendo la misma que la original, como digo solo he añadido la posibilidad de conectar una pantalla i2C, Si tu pantalla no es la misma que la definida lamentablemente no funcionará o lo escrito en la pantalla no corresponderá con la que he descrito aquí.

Recuerda que también puedes añadir a la central DCC++ un modulo bluetooth para poder usarlo de una manera más cómoda. Aquí te explico como.

En actualizaciones próximas quiero añadir un sistema de recepción IR para comunicar los diferentes sensores con la central de una manera inalámbrica , pero por el momento es solo una idea.

También sigo trabajando en DCCpp Cab que próximamente contara con diferentes pantallas para crear, editar o borrar los desvíos sensores y salidas directamente desde la central.

He subido el proyecto a GitHub y también lo puedes descargar aquí y en la sección de descargas de esta misma web.

Un saludo a todos y gracias por vuestra paciencia!!!

(Visitado 216 veces, 1 visitas hoy)

5 comentarios

  1. Buenas noches,
    Pues ahora estoy en este apartado. Como verás, estoy aprovechando al máximo tu magnífica página.
    Bien, pues voy a jugar con tu montaje con la pantalla (me encantan las pantallitas, son mi debilidad). El caso es que yo hace tiempo que dejé el DCCpp_uno.ino y me pasé a la biblioteca DCCpp.h de Locoduino, una maravilla, me imagino que ya la conocerás. Entonces estoy tratando de incorporar lo relativo a la pantalla oled en la biblioteca DCCpp, pero dados mis pococs conocimientos en el asunto, no lo logro.
    Por eso te pido tu ayuda, si puedes. Y te hago la sugerencia de implementar tus diversos montajes en la biblioteca DCCpp, que es mucho mñas sencilla de manejar.
    Un saludo,
    Juan.

    • Buenas Juan!! conozco la librería, y la verdad es que cuando empece ya estaba, y me decante por la original. Quería entenderlo bien antes de empezar con las variantes, pero si que es verdad que la original hace bastante tiempo que no se actualiza (por lo menos la versión de github) y creo que eso puede ser un problema.
      Ya me he descargado la ultima versión de la librería (1.3.7) voy a echar un ojo a ver que tal es y haré unas pruebas con ella próximamente. Seguramente no sea muy complicado añadir los archivos de la pantalla, lo mismo con la librería hago funcionar correctamente la pantalla con el UNO, con el original se come toda la memoria y solo se puede usar en MEGA. También los diferentes sonidos, cosa que empece y no llegué a terminar del todo. Gracias por tu sugerencia voy a investigar la librería y publicare la experiencia/resultados,
      Saludos!!

  2. Qué alegría. Ya estaba esperando ue publicaras esto. Lo voy a probar. Y con gusto de descargar el nuevo CAB, cuando lo tengas disponible. Y claro que suena interesante agregar la comunicación IR. Suerte y a la espera.
    Una pregunta: ¿Ésta carpeta descargable (DCCpp_MEGA_Screen), la debo de pegar en la carpeta de BaseStation? Saludos.

    • Buenas Benigno!!!
      No hace falta copiarlo en la misma carpeta, son dos programas distintos. Recuerda cambiar la dirección i2C de la pantalla en caso de que no coincidan, se cambia en la pestaña Config.h en la parte inferior:
      #define OLED_ADDRESS 0x3C //Dirección i2C de la pantalla oled

      Pues CAB esta en el horno pero aun le queda un poco, le estoy haciendo muchos cambios, por no decir que estoy cambiando casi todo, he añadido los sensores y salidas a la base de datos y ahora me toca programar las rutas… Por cierto le he añadido sonido para el encendido y apagado, subiré los archivos esta semana los archivos.
      Saludos!!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *