dasdasdadasdasdasdas

Iniciar una granja de impresoras 3D

Creación de multiples instancias en Octoprint

Fernando Vargas

Octoprint: La interfaz web para tu impresora 3D.

Controla tu impresora 3D remotamente con Raspberry Pi y OctoPi

Astrum • Image and Text
El alma de tu fábrica remota de impresiones.
Octoprint es un software gratuito de código abierto que puede ser instalado en una Raspberry Pi, Windows, Mac y Linux, éste permite monitorear y controlar de manera remota tu impresora 3D. Pueden cargarse archivos para impresión, revisar el estatus de la impresión actual, monitorear la temperatura del extrusor, ver el progreso de la impresión en vivo con una Raspberry Cam o Webcam, y mucho más gracias a la basta librería de plugins con los que cuenta.

Estas características lo hacen perfecto para poder llevar a cabo la granja de impresoras que queremos realizar, además de que es posible controlar varias impresoras 3D al mismo tiempo creando varias instancias de Octoprint.

Antes de ir más a fondo debemos cerciorarnos de que nuestra impresora 3D es soportada por Octoprint (y muy probablemente lo sea ya que Octoprint es compatible con una gran cantidad de impresoras que hay en el mercado). Aquí puedes revisar la lista completa de impresoras soportadas.


¿Dónde instalarlo?

Es posible descargarlo y posteriormente instalarlo en una computadora con Windows, Mac o Linux o incluso en una Raspberry Pi, pero dado a que para impresiones que tomen mucho tiempo tendríamos que mantener encendida la computadora (lo cual significaría un gasto energético), lo más recomendable es hacer la instalación en una Raspberry Pi, ya que su precio y consumo energético es más bajo en comparación.

Dicho esto la Raspberry Pi 3B+ es la más recomendada para controlar la impresora 3D, aunque los demás modelos también son compatibles y pueden hacer la misma tarea. Nota: No es recomendable utilizar la Raspberry Zero ya que puede tener interferencias por medio de Wi-Fi o al querer hacer streaming mientras se está imprimiendo una pieza, impactando negativamente en la impresión que se esté realizando en el momento.

Considerando que para este caso usaremos una Raspberry Pi 3B+, ésta es la lista de componentes necesarios:

  • Raspberry Pi 3B+.

  • Tarjeta Micro SD de 8GB o más.

  • Fuente de alimentación de 5V (preferentemente al menos 2.5A).

  • Cable Mini USB a USB (puede variar dependiendo la impresora a ocupar).

  • Webcam o Raspberry Pi Camera (opcional, en caso de que se quiera seguir el estado actual de la impresión).

Instalando y Configurando Octoprint en la Raspberry.

El primer paso a realizar es instalar la imagen de OctoPi en la tarjeta Micro SD, y para hacerlo podemos ocupar Win32 Disk Imager o Etcher, ambos son bastante intuitivos y similares de utilizar; simplemente cargar el archivo .img, seleccionar el destino (dirección de la SD) y click en Write o Flash, dependiendo de la herramienta de nuestra elección.

El siguiente paso es configurar la red WiFi de la Raspberry, esto se puede hacer desde nuestra computadora, a través del archivo "octopi-wpa-supplicant.txt" (se puede editar desde Bloc de Notas, Notepad++, Atom, etc.). Para cuidar el formato del archivo, no es recomendable usar WordPad o Word. Una vez dentro del archivo se procede a descomentar o redactar las siguientes lineas de texto y agregar los datos de la red WiFi a la que nos queramos conectar.


## WPA/WPA2 secured 

network={ 

ssid="Nombre de la red WiFi"     

psk="Contraseña" 

} 

Una vez hecho esto se guardan los cambios, se inserta la Micro SD en la Raspberry y se enciende.

Para averiguar que IP ha tomado la Raspberry (sin la necesidad de conectar una pantalla y teclado), se puede descargar una app llamada Fingla cual está disponible tanto para Android como iOS; y desde ahí escanear la red y ver la IP de la Raspberry, esta deberá aparecer con el nombre de octopi.

Astrum • Text and Image

Ahora solo queda acceder a la interfaz web de Octoprint (debemos estar conectados a la misma red). Desde cualquier navegador web ingresamos la dirección IP de la Raspberry o simplemente con http://octopi.local (en caso de que ya se tengan otras Raspberries con Octoprint no acceder mediante esta opción ya que no es factible escoger a cuál de ellas ingresamos), la primera vez tendremos que configurar algunos parámetros de la impresora que tengamos a través del Setup Wizard, además de crear un usuario y contraseña para acceder a nuestro Octoprint.

Después de los pasos anteriores ya es posible conectar y controlar nuestra impresora desde esta interfaz, pero para ello dirigirse al apartado de Connection y seleccionar:

Serial Port: /dev/...    #Seleccionar el puerto en el que esté conectada la impresora.
Baudrate: 115200
Printer Profile: #Seleccionar el perfil de la impresora creado durante el Setup Wizard.

La primera vez hacer clic en los dos recuadros que aparecen, Save Connection Settings, Auto-connect on server startup y clic en el botón de Connect, una vez hecho esto ya es posible subir los archivos en extensión ".gcode", imprimirlos y en caso de haber conectado una webcam visualizar el estado actual de la impresión, todo esto de manera remota.

Astrum • A picture with a caption
Impresión finalizada desde Octoprint.

Y así se concluye la instalación de Octoprint.

Hasta aquí consiste el tutorial para configurar la interfaz de impresión remota con el cual ya se puede tener lista y corriendo para antender nuestras impresiones. Al final de esta entrada se encontrarán más enlaces relacionados que podrían elevar la utilidad de la interfaz aún más para quienes quieran seguir explorando el mundo de Octoprint.

En la siguiente sección se puede revisar cómo correr múltiples interfaces de Octoprint en una misma máquina para múltiples impresoras.






Controlando varias impresoras desde una misma Raspberry.

Para hacer esto es necesario crear múltiples instancias de Octoprint dentro de nuestra Raspberry (una instancia por cada impresora a controlar), para ello debemos conectarnos mediante un cliente ssh, los recomendados son Putty (Windows) o la Terminal (macOS), para iniciar sesión necesitamos del usuario y contraseña, normalmente por defecto el usuario es "pi" y la contraseña "raspberry" (aunque posteriormente se puede cambiar la contraseña a través del comando "passwd"). Los pasos que se describirán fueron probados para la versión 0.17.0 de OctoPi.

Los 4 pasos principales para la creación de las instancias son:

  • Copiar el directorio de Octoprint.

  • Copiar y modificar el script de configuración de Octoprint2.

  • Copiar y modificar el script init de Octoprint2.

  • Agregar el init de Octoprint2 para que inicie de arranque.

Ahora procederemos a copiar el directorio de Octoprint:

cp -R /home/pi/.octoprint /home/pi/.octoprint2

Copiamos el script de configuración de Octoprint:

sudo cp /etc/default/octoprint /etc/default/octoprint2

Abrimos el archivo creado:

sudo nano /etc/default/octoprint2 

Y modificamos las lineas PORT y DAEMON_ARGS como se muestra a continuación:

PORT=5001 
DAEMON_ARGS="--host=$HOST --port=$PORT --config /home/pi/.octoprint2/config.yaml --basedir /home/pi/.octoprint2/"

Para el archivo original (/etc/default/octoprint) dejar el PORT en 5000 y solamente cambiar la línea:

DAEMON_ARGS="--host=$HOST --port=$PORT --config /home/pi/.octoprint/config.yaml --basedir /home/pi/.octoprint/"

Copiamos el script init para que la segunda instancia se ejecute automáticamente después del arranque:

sudo cp /etc/init.d/octoprint /etc/init.d/octoprint2 

Modificamos el nuevo archivo generado:

sudo nano /etc/init.d/octoprint2 

 

Ya dentro del archivo, se le harán unos pequeños cambios, cambiaremos todo lo que contenga "octoprint" a "octoprint2", y así también de "OctoPrint" a "OctoPrint2"excepto por la línea:

DAEMON=/usr/bin/octoprint 

Con las modificaciones hechas al archivo debería verse como lo siguiente:

Astrum • Text and Image

OctoPi usa systemctl, por lo que es importante actualizar la lista de daemon después de que un nuevo script init ha sido añadido:

sudo systemctl daemon-reload

Actualizaremos el rc.d para que inicie automáticamente al arranque:

sudo update-rc.d octoprint2 defaults 

Para iniciar la segunda instancia manualmente ingresamos:

sudo /etc/init.d/octoprint2 start 

Y para comprobar que octoprint2.service se está ejecutando correctamente usamos el siguiente comando:

systemctl status octoprint2.service

Si todo se hizo correctamente el estado de la instancia debería verse así:

Astrum • A picture with a caption

Si no se obtiene ningún error, el segundo servicio fue creado correctamente y ya está activo. Nota: hasta este punto aún no se puede acceder a la nueva instancia, para ello se debe configurar primero HaProxy. 

  • Configuración de HaProxy.

Para poder ingresar a las instancias creadas con anterioridad a través de un nombre en lugar de usar los puertos, se debe hacer utilizando HaProxy. 

Primero haremos una copia de seguridad del archivo:

sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.old 

Abrimos el archivo original y haremos varias modificaciones. Nota: tener especial cuidado al escribir, ya que algún error podría ocasionar que al tratar de ingresar a la segunda instancia no se muestre como debe y en su lugar aparezca Error 503. Service Unavailable.

sudo nano /etc/haproxy/haproxy.cfg global 
Nos podemos basar en el siguiente script que es completamente funcional:
         maxconn 4096
         user haproxy
         group haproxy
         log 127.0.0.1 local1 debug  

defaults
         log     global
         mode    http
         option  httplog
         option  dontlognull
         retries 3
         option redispatch
         option http-server-close
         option forwardfor
         maxconn 2000
         timeout connect 5s
         timeout client  15min
         timeout server  15min

frontend public
         bind *:80
         option forwardfor except 127.0.0.1
         bind 0.0.0.0:443 ssl crt /etc/ssl/snakeoil.pem
         use_backend webcam if { path_beg /webcam/ }
         use_backend ender-3 if { path_beg /ender-3/ }
         use_backend makerbot if { path_beg /makerbot/ }
         default_backend webcam

backend ender-3
         reqrep ^([^\ :]*)\ /ender-3/(.*) \1\ /\2
         option forwardfor
         server octoprint1 127.0.0.1:5000
         acl needs_scheme req.hdr_cnt(X-Scheme) eq 0
         reqadd X-Scheme:\ https if needs_scheme { ssl_fc }
         reqadd X-Scheme:\ http if needs_scheme !{ ssl_fc }
         reqadd X-Script-Name:\ /ender-3

backend makerbot
         reqrep ^([^\ :]*)\ /makerbot/(.*) \1\ /\2
         option forwardfor
         server octoprint1 127.0.0.1:5001
         acl needs_scheme req.hdr_cnt(X-Scheme) eq 0
         reqadd X-Scheme:\ https if needs_scheme { ssl_fc }
         reqadd X-Scheme:\ http if needs_scheme !{ ssl_fc }
         reqadd X-Script-Name:\ /makerbot

backend webcam
         reqrep ^([^\ :]*)\ /webcam/(.*)     \1\ /\2
         server webcam1  127.0.0.1:8080
         errorfile 503 /etc/haproxy/errors/503-no-webcam.http

Si se usa como base el ejemplo anterior, se debe cambiar todo “ender-3” por el nombre que se le quiera dar a la primera instancia y lo mismo para “makerbot”, con el nombre que tengan los backend (excepto webcam) es como se ingresará desde el navegador a las diferentes instancias. 

Pero antes debemos modificar otro archivo usando el siguiente comando, esto para que que sea posible reiniciar la instancia desde la interfaz web: 

nano /home/pi/.octoprint2/config.yaml 
Se procede a cambiar el nombre del servicio a octoprint2, buscando la línea que contiene "serverRestartCommand", quedando como: 
serverRestartCommand: sudo service octoprint2 restart 
Después de guardar los cambios, reiniciamos la raspberry:
sudo reboot

Terminado esto ya es posible acceder a nuestras 2 instancias de Octoprint con la IP y los nombres que asignamos en HaProxy, por ejemplo: http://192.168.1.7/ender-3/ y http://192.168.1.7/makerbot/. Por lo que ya podremos controlar e imprimir (para este caso) 2 impresoras al mismo tiempo.

En caso de querer más de 2 instancias de Octoprint, se siguen los mismos pasos anteriores, creando así "octoprint3" en el puerto 5002, etc., y además agregando un nuevo backend en HaProxy por cada instancia creada. Como comentario final para la Raspberry Pi 3b+, el máximo de instancias recomendadas es de 3 y una webcam, o 4 sin webcam, ya que más de esas podría ocasionar errores de impresión si se están controlando todas las impresoras al mismo tiempo.

Y esto es todo lo necesario para comenzar con tu propia granja de impresoras 3D controladas desde Octoprint en una Raspberry Pi 3b+, si lo deseas puedes complementar las funcionalidades de Octoprint gracias al gran número de plugins que están disponibles en el Repositorio de Plugins.


Enlaces Relevantes:



Referencias: