Monitoriza tu impresora 3D con un display OLED, Wemos D1 y Octoprint

Revisar el estado de tu impresora 3D es algo más que recomendable si sueles dedicar mucho tiempo a imprimir piezas. Hoy deseamos mostraros una curiosa forma de Monitorizar tu impresora 3D con un display OLED, una placa de desarrollo Wemos D1 Mini y Octoprint.

Si eres asiduo a nuestro blog y echaste un ojo a nuestro reciente artículo Como instalar Octoprint en tu impresora 3D sabrás que es posible controlar tu impresora 3D remotamente, simplemente accediendo desde una IP o la dirección URL por defecto (http://octopi.local).

Vale, me dirás que con Octoprint puedes controlarla vía web, pero… ¿Qué te parecería poder monitorizar el tiempo de impresión actual, el que resta para su finalización y las temperaturas de cama y Nozzle con un display OLED que puedas llevarte a cualquier lugar de tu casa?

Y como extra, cuando tu impresora no se encuentre en pleno funcionamiento, el display OLED mostrará la hora actual y temperatura en tu ciudad, ¿Qué más puedes pedir?

 

Introducción al Monitor OLED

Esta aplicación la desarrolló y publicó David Payne (también conocido como Qrome) en su cuenta de GitHub para todos los Makers que la desearan utilizar. Además no solo publicó el código, sino que añadió los ficheros de impresión en Thingiverse donde puedes descargarlos fácilmente.

Si eres un trastornado de la impresión 3D como nosotros y te encanta cacharrear con electrónica estás de enhorabuena. Continúa leyendo este artículo hasta el final y descubrirás cómo hacerlo muy fácilmente. Y por supuesto, no olvides dejarnos tus comentarios al final del mismo. ¡Vamos a ello!

 

Componentes necesarios

Antes de comenzar este proyecto debo informarte que precisas tener ya instalado en tu impresora un servidor de Octoprint. De esta manera, nuestro display OLED (con su placa Wemos D1 Mini) conectará al servidor Octoprint, extraerá los datos en tiempo real y nos los mostrará en pantalla.

Si no sabes lo que es un servidor Octoprint para una impresora 3D, te recomiendo encarecidamente que eches un vistazo al artículo Como instalar Octoprint en tu impresora 3D. Allí encontrarás instrucciones muy detalladas de todo el proceso de instalación y configuración.

Precisamos de los siguientes componentes para desarrollar nuestro monitor OLED:

Wemos D1 Mini ESP8266 x 1
Oled LCD 0,96 I2C 128×64 x 1
Raspberry Pi 3/4 x 1
Tarjeta MicroSD + Lector x 1

 

Conexión Display OLED al Wemos D1

Las placas Wemos D1 Mini no llevan de serie ningún tipo de display integrado, así que deberemos conectarle (o mejor dicho soldar) uno propio para nuestro propósito. Wemos D1 Mini soporta dos tipos de display I2C (SSD1306 y SSH1106).

La forma de conectarlos es muy fácil, así que no te preocupes. Solamente has de soldar los cables tal y como puedes comprobar en la imagen superior.

En nuestro ejemplo hemos utilizado un display SSD1306, que viene por defecto en el software ya configurado. Si desearas utilizar un display SH1106, simplemente debes descomentar la siguiente línea en el código del firmware:

//#define DISPLAY_SH1106 // Uncomment this line to use the SH1106 display -- SSD1306 is used by default and is most common

 

IMPORTANTE!! Según el fabricante puedes encontrarte con pantallas OLED donde la posición de SDA, SCL, GND y VCC es diferente. Verificar siempre cómo se encuentran dispuestas en tu LCD y guíate por los nombres. Después verificalo completamente para evitar imprevistos desagradables.

 

Piezas impresión 3D (Thingiverse)

Los enlaces de las piezas en formato STL para impresión están disponibles como siempre en la plataforma Thingiverse.

 

Software necesario (Arduino IDE + drivers)

Guía completa para configurar Marlin 2.0.x desde cero y no morir en el intento

Para instalar el firmware del Monitor OLED en la placa Wemos D1 Mini precisamos como es lógico de un compilador. Utilizaremos el Arduino IDE que ya es conocido por muchos de nosotros si has compilado Marlin previamente. Es completamente gratuito.

Se puede descargar de la web oficial de arduino. Accede a la sección Software -> Downloads, selecciona Windows Installer y apreta Just Download para hacerte con él.

Por último, necesitaremos instalar unos drivers USB necesarios para conectar con nuestro ordenador. Descárgalo del siguiente enlace: http://sparks.gogo.co.nz/ch340.html

 

Configurando nuestro compilador

Por defecto nuestro compilador no soporta las placas Wemos D1 Mini, así que deberemos configurar el Arduino IDE para que pueda reconocer este tipo de electrónica. Es tan sencillo como ir al menú principal Archivo -> Preferencias y buscar la opción Gestor de URLs adicionales de tarjetas.

Allí buscaremos Gestor de URLs Adicionales de Tarjetas e incluiremos la siguiente URL:

https://arduino.esp8266.com/stable/package_esp8266com_index.json

 

De esta forma añadiremos soporte para las placas Wemos D1 Mini y muchas otras ESP82xx existentes en el mercado. Después tenemos que ir al menú Herramientas y en la opción Placa seleccionaremos «LOLIN(WEMOS) D1 R2 & Mini«.

Ya teniendo la placa seleccionada, configuraremos el tamaño de la flash. Usando otras opciones yo obtuve pantallazo negro en el display, así que os recomiendo utilizar el tamaño de 1MB seleccionando esta opción -> 4MB (FS:1MB OTA:~1019KB)

Con esto nuestro compilador ya está listo. Ahora tocan las librerías que debemos instalar ahora para poder habilitar la compilación del firmware sin errores.

 

Librerías necesarias

El código fuente de David precisa de 3 librerías para poder compilarse correctamente, así que previamente procederemos a instalarlas. Podremos obtenerlas online desde el mismo compilador fácilmente. Busca la sección Herramientas y después haz clic en Administrar bibliotecas.

Introduce ahora el nombre de todas y cada una de ellas (son 3 en total) y presiona el botón INTRO de tu teclado. Ahora deberían aparecer las librerías online disponibles con este parámetro de búsqueda.

Asegúrate de que las librerías que vas a instalar son las correctas. Aveces salen por un mismo parámetro de búsqueda varias con nombre similares. Compara el nombre y el autor antes de instalarlas, aquí tenéis las librerías en cuestión:

  • WiFiManager (by Tzapu)
  • Arduino OTA Library
  • ESP8266 and ESP32 OLED driver for SSD1306 displays (by ThingPulse)

 

Descargando el Firmware (Monitor OLED)

El firmware para el Monitor OLED lo podemos descargar directamente desde su repositorio en GitHub. Simplemente debemos hacer clic en el siguiente enlace:  https://github.com/Qrome/printer-monitor

Ahora buscar un botón llamado Clone or download (ubicado arriba a la izquierda), pincha en él, y selecciona la opción Download ZIP. Una vez descargado, descomprimelo en tu escritorio.

Se  creará una carpeta llamada /printer-monitor-master, donde se encontrarán todos los archivos disponibles del proyecto, y dentro de ella otra  denominada /printermonitor.

Accede a esta última carpeta y haz clic dos veces encima del nombre del proyecto, denominado printermonitor.ino

 

Compilando y subiendo el Firmware

Una vez abierto nuestro proyecto habiendo efectuado dos veces clic en el archivo printermonitor.ino, tendremos que seleccionar el puerto correcto. Iremos a Herramientas -> Puerto  y seleccionaremos el que se ha creado automáticamente al conectar nuestro Wemos D1 Mini.

Previamente a la compilación, existe un archivo llamado Settings.h donde configuraremos todos los parámetros del firmware. Os dejo por aquí las líneas que modifiqué para configurarlo correctamente.

// OctoPrint Monitoring -- Monitor your 3D printer OctoPrint Server
String OctoPrintApiKey = "5C0A62FE1A7122469530A15E7C555172";   // ApiKey from your User Account on OctoPrint
String OctoPrintHostName = "octopi";// Default 'octopi' -- or hostname if different (optional if your IP changes)
String OctoPrintServer = "octopi.local";   // IP or Address of your OctoPrint Server (DO NOT include http://)
int OctoPrintPort = 80;        // the port you are running your OctoPrint server on (usually 80);
String OctoAuthUser = "3dwork";      // only used if you have haproxy or basic athentintication turned on (not default)
String OctoAuthPass = "12345678";      // only used with haproxy or basic auth (only needed if you must authenticate)

// Weather Configuration
boolean DISPLAYWEATHER = true; // true = show weather when not printing / false = no weather
String WeatherApiKey = "323d748925849b0895f6ac3df946686d"; // Your API Key from http://openweathermap.org/
// Default City Location (use http://openweathermap.org/find to find city ID)
int CityIDs[] = { 3117735 }; //Only USE ONE for weather marquee
boolean IS_METRIC = true; // false = Imperial and true = Metric
// Languages: ar, bg, ca, cz, de, el, en, fa, fi, fr, gl, hr, hu, it, ja, kr, la, lt, mk, nl, pl, pt, ro, ru, se, sk, sl, es, tr, ua, vi, zh_cn, zh_tw
String WeatherLanguage = "es";  //Default (en) English

 

En la primera sección «OctoPrint Monitoring» hemos rellenado el parámetro OctoPrintApiKey con la key que hemos extraído de nuestro servidor. Con esta Key y con el usuario y contraseña (OctoAuthUser y OctoAuthPass) dotaremos al Monitor OLED de acceso para consultar los parámetros de nuestra impresora desde OctoPrint. No olvides también configurar la IP o la dirección (address) de tu servidor OctoPrint, en este caso sería «octopi.local».

En la segunda sección «Weather Configuration» configuraremos el parámetro WeatherApiKey con una Key que debemos obtener en la página web https://openweathermap.org. Para ello, tendrás que acceder a su web y efectuar el registro correspondiente. Después en el panel de control de usuario la Key te aparecerá disponible.

Además, también necesitarás indicar el ID de tu ciudad en el parámetro CityIDs[]. Abre la siguiente URL https://openweathermap.org/find, introduce el nombre de tu ciudad y haz clic en ella. Cuando te aparezcan los datos de la misma, en la URL de tu navegador podrás ver el ID (será un número de 7 cifras). Por último, configuraremos el lenguaje en WeatherLanguage, en nuestro caso introduciremos simplemente «es«.

Pues ya debería estar todo listo, así que vamos a proceder a la compilación. Si todo va bien, el proceso de compilado finalizará rápidamente y lo subirá a la Wemos D1 Mini.

Para ello, iremos al menú Programa y después presionaremos la opción Verificar/Compilar (control+R). De esta forma compilará el firmware y verificaremos que está correcto. Si el proceso finaliza sin problema alguno, presionaremos Subir (control+U) y listo. Cuando el compilador acabe de subir el firmware a nuestra placa automáticamente la reiniciará.

Tras este reinicio, el módulo Wemos D1 Mini habrá creado un Access Point (AP). Deberás acceder a él vía WiFi con tu móvil y proceder a su configuración para que conecte a tu red WiFi local.

Una vez accedido mediante su Access Point, busca la opción de configurar la WiFi, selecciona el nombre de tu red (SSID) e introduce la contraseña correcta para que pueda conectar al Router sin problema alguno.

Una vez configurado, el mismo detectará las estadísticas disponibles (siempre y cuando nuestro servidor OctoPrint esté correctamente instalado y en funcionamiento). Y en el caso de que nuestro servidor no lo esté (impresora parada), nos mostrará datos sobre la hora y temperatura local.

 

Observaciones finales

En principio todo esto sería más que necesario para configurar tu Monitor OLED. Creo que no me he dejado nada en el tintero pero si así fuera, no dudes en indicarlo en los comentarios al final del artículo.

Espero que el artículo haya sido de tu agrado y que despierte vuestro interés por este tipo de placas de desarrollo tan de moda últimamente que son las Wemos D1 Mini.

Para finalizar os recordamos que podéis encontrarnos en nuestro canal de Telegram. No dudéis en uniros a nosotros en el siguiente enlace, seréis bienvenidos a nuestra comunidad 🙂

 

Otros artículos que pueden interesarte en 3DWork.io: