Crea tu propio logotipo personalizado de inicio en Marlin 2.0.x

Desde la aparición de la versión v1.1.0 es relativamente sencillo añadir logotipos personalizados a nuestro firmware Marlin. Para ello deberás disponer de una pantalla LCD gráfica, generar y preparar el archivo (o imagen deseada) y modificar algunas cosillas dentro del mismo firmware.

Como siempre utilizaré mi impresora como conejillo de indias, a la que colocaré el logotipo actual de nuestra página web. Yo dispongo de un LCD gráfico bastante común, una pantalla MKS_MINI_12864, así que si tienes la misma te funcionará sin problema alguno.

Si te surge alguna duda por el camino, puedes unirte a nuestra comunidad y compartirla en nuestro canal de whatsapp. Seguro que estaré yo o algún compañero más que dispuesto a echarte un cable.

 

Creando logotipo para Marlin personalizado

Lo primero que tienes que hacer es diseñar el logotipo, imagen o texto a mostrar en pantalla. Tén en cuenta que este logotipo después lo convertiremos a una resolución muy pequeña.

Te recomiendo que seas conciso en el mensaje y no añadas demasiados detalles, ya que muchos se perderán por el camino debido a la baja resolución. Yo por ejemplo, me he limitado a poner mi logotipo y debajo la URL de la página web 3DWork.io, como puedes ver en la imagen superior.

Para crear este logotipo, y las posteriores modificaciones de tamaño y color, utilizaremos algún software de diseño gráfico como Photoshop o GIMP (este último gratuito y muy potente).

Tras definir el logotipo que has elegido añadir a tu firmware Marlin, deberás redimensionar la imagen a una resolución de 128×64 pixels. Tiene que ser este mismo tamaño, de lo contrario nos dará errores durante el proceso y no funcionará.

 

Convertir logotipo a texto con LCDAssistant

Ahora toca convertir esta misma imagen a monocromo (solo blanco y negro). Una vez tengamos la imagen a color monocromo (blanco y negro) y con resolución de 128×64 pixels ya podremos guardarla para convertirla a texto.

Para tal fin vamos a descargar un software específico denominado LCDAssistant, el cual podrás encontrar en el siguiente enlace.

Ejecutaremos el software y procederemos a efectuar las siguientes operaciones que paso a enumerar en este mismo orden:

  1. Seleccionaremos el archivo a cargar (File -> Load image)
  2. Seleccionaremos en Byte orientation la orientación Horizontal
  3. En Size configuraremos Width a 128 bytes y Height a 64 pixels, para respetar la resolución de nuestro display
  4. Exportaremos la imagen a texto (File -> Save output)

 

Generando el archivo _Bootscreen.h

Una vez que has exportado la imagen a texto deberás editarla. Te recomiendo como siempre utilizar un editor de textos decente, y olvidarte del Notepad.exe de Windows. Yo siempre suelo trabajar en mi día a día con Sublime, el cual puedes utilizar sin restricción alguna y descargar directamente desde su página web en el siguiente enlace.

 

Tras editarlo te debería aparecer lo siguiente:

//------------------------------------------------------------------------------
// File generated by LCD Assistant
// http://en.radzio.dxp.pl/bitmap_converter/
//------------------------------------------------------------------------------

const unsigned char 3DW_mono(original) [] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x73, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x73, 0xFF, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xE1, 0xFF, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x01, 0xC0, 0x7F, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0F, 0x80, 0x3F, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0xFF, 0xF8, 0x1F, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x0F, 0xFF, 0xFE, 0x0F, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x0F, 0xFF, 0xFF, 0x07, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x0F, 0xFF, 0xFF, 0x87, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x0F, 0xFF, 0xFF, 0xC3, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x0F, 0xFF, 0xFF, 0xC1, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0x0F, 0xFF, 0xFF, 0xE1, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x0F, 0xFF, 0xFF, 0xE1, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x0F, 0xFF, 0xFF, 0xF1, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0x0F, 0xFF, 0xFF, 0xF0, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x0F, 0xFF, 0xFF, 0xF0, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x0F, 0xFF, 0xFF, 0xF0, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x0F, 0xFF, 0xFF, 0xF0, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0xFF, 0xFF, 0xF0, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x0F, 0xFF, 0xFF, 0xF0, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x0F, 0xFF, 0xFF, 0xF1, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x0F, 0xFF, 0xFF, 0xE1, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x0F, 0xFF, 0xFF, 0xE1, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x0F, 0xFF, 0xFF, 0xC3, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x0F, 0xFF, 0xFF, 0x83, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0x0F, 0xFF, 0xFF, 0x07, 0xC3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x0F, 0xFF, 0xFE, 0x0F, 0xE3, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x0F, 0xFF, 0xF8, 0x1F, 0xF1, 0xFE, 0x07, 0xF8, 0x7F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0x0F, 0xFF, 0xC0, 0x3F, 0xF0, 0x78, 0x01, 0xE0, 0x7F, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x20, 0x00, 0xFF, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x70, 0x01, 0xFF, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x01, 0xF8, 0x07, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE0, 0x70, 0x3C, 0xC6, 0x7F, 0xFF, 0xE7, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE0, 0x30, 0x1C, 0xC6, 0x7F, 0xFF, 0xE7, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x13, 0x8C, 0xC6, 0x78, 0xFF, 0xE7, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x13, 0xC4, 0xC6, 0x70, 0x30, 0x66, 0x1F, 0x38, 0x1F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xF0, 0x33, 0xE4, 0xC6, 0x62, 0x30, 0x66, 0x7F, 0x31, 0x1F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xF0, 0x33, 0xE4, 0xC6, 0x67, 0x13, 0xE4, 0xFF, 0x33, 0x8F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xF0, 0x33, 0xE4, 0xC6, 0x47, 0x93, 0xE0, 0xFF, 0x23, 0xCF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x13, 0xC4, 0xC6, 0x47, 0x93, 0xE0, 0x7F, 0x23, 0xCF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x13, 0x8C, 0xC6, 0x67, 0x13, 0xE2, 0x7F, 0x33, 0x8F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE0, 0x30, 0x1C, 0x00, 0x60, 0x33, 0xE6, 0x33, 0x30, 0x1F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE0, 0x70, 0x3E, 0x10, 0xF0, 0x73, 0xE7, 0x13, 0x38, 0x3F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};

 

Esto significa que has convertido correctamente tu imagen a valores hexadecimales, los cuales se encuentran delimitados entre los dos corchetes const unsigned char Pulsar [] = { DATOS DE LA IMAGEN}. Y estos datos son los que vamos a utilizar e insertar en nuestro firmware Marlin 2.

Ahora deberíamos generar un archivo denominado _Bootscreen.h. Como es bastante extenso y no sería difícil cometer algún error escribiendo todo por nuestra cuenta, os dejo por aquí la copia del mío. De esta forma, solo tendrás que descargarlo. Lo tienes disponible en el siguiente enlace.

Tras abrirlo podrás ver como existe también una estructura similar, que encapsula esos mismos datos dentro de dos corchetes. Simplemente deberás sustituirlos (copia y pega), manteniendo la misma estructura y los mismos corchetes intactos. Si no lo haces, y subes este mismo archivo a tu impresora sin modificar, disfrutarás de mi logotipo en tu impresora, queda a tu elección 🙂

Además, en este mismo archivo _Bootscreen.h encontraremos 3 parámetros configurables:

  • CUSTOM_BOOTSCREEN_TIMEOUT:   Tiempo que se mostrará el logotipo (en milisegundos)
  • CUSTOM_BOOTSCREEN_BMPWIDTH:   Anchura de la imagen (debe establecerse en 128)
  • CUSTOM_BOOTSCREEN_BMPHEIGHT:   Altura de la imagen (debe establecerse en 64)

 

Modificaciones en firmware Marlin y compilación

Editaremos el archivo Configuration.h del source de nuestro firmware Marlin y nos aseguraremos que estos dos parámetros se encuentran activos:

// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION **
#define SHOW_BOOTSCREEN

// Show the bitmap in Marlin/_Bootscreen.h on startup.
#define SHOW_CUSTOM_BOOTSCREEN

 

Y para finalizar, copiaremos el archivo que hemos generado _Bootloader.h dentro de los sources de Marlin. Concretamente en la ruta /Marlin/, la cual es la misma donde se encuentran los archivos básicos de configuración (Configuration.h y Configuration_adv.h).

Así que nada más, todo listo para compilar. No debería dar ningún error durante el proceso de compilación. Si así fuera, por favor, revisa todos y cada uno de los pasos.

Si no sabes como se compila el firmware de Marlin, te recomiendo que leas la parte de compilación en el extenso y muy completo artículo que dedicamos hace unas semanas Guía completa: Configurar Marlin 2.0.x desde cero y no morir en el intento.

 

Observaciones finales

Si bien esta mini-guía sobre Crear tu propio logotipo personalizado de inicio en Marlin 2.0.x me ha funcionado perfectamente, desconozco el tipo de display que pueda utilizar tu impresora. Así que podría no funcionar del mismo modo en tu máquina, simplemente tenlo en cuenta.

La modificación está enfocada a displays LCD gráficos, así que si dispones de uno no gráfico (modo texto), no te será de mucha utilidad.

Otra observación es que tras activar tu logotipo personalizado y mostrarse durante el tiempo que hayas configurado, se seguirá mostrando después el logotipo original de Marlin. No existe una forma sencilla de desactivarlo con los archivos de configuración generales, así que de momento y hasta que descubra cómo inhabilitarlos, aparecerá justo después del tuyo durante otro breve periodo de tiempo. Esto es algo que ha preferido dejar así el equipo de desarrollo de Marlin.

 

 

Espero que os haya parecido interesante esta pequeña mini-guía Crea tu propio logotipo personalizado de inicio en Marlin 2.0.x. Como siempre, os dejamos otros artículos que quizá puedan ser de vuestro interés: