Ir al contenido

Controla tu Ender 3 por la red con OctoPrint en una Raspberry Pi

·3721 palabras·18 mins
Emiliano Fernández Cervantes
Autor
Emiliano Fernández Cervantes
Construyo cosas en la frontera entre el hardware y el software: arquitecturas en Verilog, instrumentación biomédica y un home lab que nunca deja de crecer.
Mejorando la Ender 3 - Este artículo es parte de una serie.
Parte 5: Este artículo

¿Cuántas veces has laminado un modelo, copiado el archivo a una microSD, cruzado el cuarto, metido la tarjeta en la impresora y regresado a la computadora porque se te olvidó revisar la temperatura? Ese pequeño ciclo es invisible hasta que alguien te lo señala, y después ya no lo puedes dejar de ver. OctoPrint en una Raspberry Pi lo elimina: el trabajo va del laminador a la máquina por la red, y la impresora se convierte en algo que puedes ver, controlar y detener desde el cuarto de al lado o desde el otro lado de la ciudad.

Esta es la parte 5 de cinco, y es la que cambia cómo usas la impresora en lugar de cambiar lo que la impresora es. La parte 1 imprimió las mejoras que la máquina se puede hacer sola. La parte 2 cambió la motherboard por una BIGTREETECH SKR Mini E3 V2.0. La parte 3 le puso un sensor BLTouch, y la parte 4 compiló el firmware que amarra a esos dos. Todo lo anterior mejora lo que la impresora hace con un archivo. Esta parte mejora cómo llega el archivo hasta ahí.

Una confesión sobre el orden, porque cambia cómo conviene leer esto: OctoPrint fue de las primeras cosas que le agregué a mi Ender 3, mucho antes de abrir la caja de electrónica. Está al final de la serie por tema, no por fecha. Lo bueno es que no necesitas ninguna de las cuatro partes anteriores para hacer esta. Una Ender 3 completamente de fábrica recibe exactamente el mismo beneficio.

Gráfico de reemplazo que dice que la captura del panel de OctoPrint viene en camino
La interfaz web de OctoPrint durante una impresión, con la gráfica de temperatura y la vista de la cámara.

Qué cambia de verdad cuando la impresora entra a la red
#

La microSD no es nada más una incomodidad. Es una desconexión. Mientras el archivo viaje en una tarjeta, la impresora no tiene idea de lo que sabe tu computadora, y tu computadora no tiene idea de lo que está haciendo la impresora. Todo lo que quieres saber (si sigue avanzando, si pegó la primera capa, cuánto le falta) te obliga a ir físicamente a ver.

Poner una Raspberry Pi entre las dos cierra ese hueco, y cambian cuatro cosas al mismo tiempo:

  1. Los trabajos viajan por la red. Laminas, le das imprimir y listo. Sin tarjeta, sin caminatas y sin el clásico “¿copié la versión nueva o la vieja?”.
  2. Tienes una terminal de verdad. Mandar G-code a mano se vuelve trivial, y eso convierte cada comando de calibración de esta serie (M119, M303, M851, M500) en algo que escribes en vez de algo que peleas con la perilla del LCD.
  3. La puedes ver. Una cámara apuntando a la cama significa revisar una impresión de seis horas sin estar parado junto a ella.
  4. La puedes detener. Esta es la que paga el proyecto completo, y regreso a ella más adelante.

Nada de esto mejora las impresiones por sí solo. Lo que hace es acortar el ciclo alrededor de imprimir, y un ciclo corto es justo lo que hace que te den ganas de iterar.


Qué necesitas
#

  • Una Raspberry Pi. Yo uso una Raspberry Pi 4. OctoPrint no es un software exigente y corre en placas más modestas, pero la Pi 4 deja margen cómodo para la interfaz web y el stream de la cámara al mismo tiempo.
  • Una microSD para la Pi. La mía es de 16 GB. La imagen de OctoPi es chica, así que 16 GB sobran para el sistema y para los G-code que traes a la mano. Antes de decidir la capacidad, lee la sección de timelapse más abajo, porque esa es la función que se come una tarjeta entera, y 16 GB es justo donde a mí se me acabó el espacio.
  • Una fuente de poder decente. Una Pi 4 pide 5 V a 3 A por USB-C. Una Pi mal alimentada lanza advertencias de bajo voltaje y se comporta raro de formas que parecen bugs de software, y eso es una manera miserable de gastar una tarde.
  • Un cable USB de la Pi a la impresora. Revisa qué conector trae tu placa antes de comprarlo, porque cambia entre la placa Creality de fábrica y las placas de 32 bits que se venden aparte.
  • Una webcam USB, opcional pero muy recomendable. La mía es una webcam USB genérica, de una marca que ni recuerdo, y sin ningún soporte fijo. La acomodo donde alcance a ver la cama. Aun así ha sido la parte más útil de todo este armado, lo cual te dice qué tan bajo está el requisito aquí.
  • Resuelto el tema de red. La Pi se puede conectar por Wi-Fi o por cable Ethernet. La mía trabaja por Wi-Fi, que es lo que te deja poner la impresora donde tenga sentido tenerla y no donde está el router, y se configura antes de que la Pi arranque por primera vez. Ethernet queda como la alternativa si tu máquina vive cerca de un switch.

Paso 1: Graba OctoPi en la microSD
#

Hay varias formas de terminar con OctoPrint corriendo. Yo tomé la más simple: OctoPi, la imagen oficial para Raspberry Pi que ya trae OctoPrint instalado y configurado, grabada directo a una microSD. Sin instalación manual de Python, sin containers y sin arqueología de dependencias.

Usa el Raspberry Pi Imager:

  1. Elige tu modelo de Pi.
  2. En Choose OS, entra a Other specific-purpose OS → 3D printing → OctoPi y toma la versión estable.
  3. Elige tu microSD.

Ahora viene el paso que te salva de tener que conectarle teclado y monitor a la Pi. Antes de grabar la imagen, abre las opciones avanzadas del Imager (el ícono del engrane) y configura, como mínimo:

  • El hostname, que es por donde vas a llegar a la máquina.
  • SSH activado, con una contraseña que tú hayas elegido.
  • SSID, contraseña y país del Wi-Fi, para que la Pi entre a tu red desde el primer arranque.

Ese último punto es todo el truco. Una Pi grabada así es un equipo headless: grabas la tarjeta, la metes, la enciendes y dos o tres minutos después ya está en tu red esperándote. Es la misma costumbre de trabajar headless desde el principio que hace agradable, en lugar de tedioso, administrar cualquier servidor casero.

Después conecta la Pi a la impresora por USB, enciende las dos y abre OctoPrint en el navegador. Hay dos maneras de encontrarla:

http://octopi.local     # el nombre mDNS, si tu red lo resuelve
http://192.168.1.50     # o la dirección de la Pi en tu propia LAN

Esa dirección es un ejemplo, no mi red. Para encontrar la tuya, entra a la página de administración de tu router y revisa la lista de clientes DHCP, o corre ipconfig (Windows) o ip addr (Linux) en una máquina ya conectada para ver qué rango usa tu red. Ya que estés ahí, considera darle a la Pi una reservación de DHCP en el router, para que su dirección nunca se mueva y tu marcador siga funcionando.

La primera vez que abres OctoPrint corre un asistente de configuración: creas tu cuenta, defines el perfil de la impresora (tamaño de cama, cama caliente, número de extrusores) y ya estás dentro.

Gráfico de reemplazo que dice que la captura del Raspberry Pi Imager viene en camino
El Raspberry Pi Imager con OctoPi seleccionado y las opciones avanzadas abiertas para Wi-Fi y SSH.

Paso 2: Conecta la impresora por USB
#

En el panel de Connection, del lado izquierdo de la interfaz de OctoPrint, eliges un puerto serial y una velocidad. AUTO en los dos suele funcionar al primer intento, y OctoPrint se acuerda de la combinación que encontró.

Si prefieres ponerlo explícito, el puerto aparece como un nombre de dispositivo de Linux, normalmente /dev/ttyUSB0 o /dev/ttyACM0 según el chip USB-serial de tu placa, y la velocidad para un firmware Marlin estándar es 115200, el mismo valor de BAUDRATE que se documenta en la parte 4.

Hay un ajuste de firmware que decide si el USB sirve o no en la BIGTREETECH SKR Mini E3 V2.0:

#define SERIAL_PORT 2

En esa placa el puerto USB está cableado al segundo periférico serial del STM32, así que el puerto 2 es con el que habla tu computadora (o tu Pi). La parte 4 lo explica en su contexto, mejor que repetirlo aquí.

Vale la pena aclarar la cronología, porque es fácil suponer que estas dos mejoras van juntas: mi impresora corrió OctoPrint con la placa Creality de fábrica durante mucho tiempo antes de que esa placa se cambiara. Son completamente independientes. Cualquier placa que exponga un puerto serial por USB le habla a una Pi, y la pregunta del SERIAL_PORT solo aparece si estás compilando tu propio firmware para una placa que tiene más de uno.

Cuando la conexión se establece, la gráfica de temperatura empieza a moverse y la pestaña de control cobra vida. En ese momento tienes una terminal de G-code completa: escribes M119 y lees el estado de los finales de carrera, corres M303 para un autotune de PID, mandas M500 para guardar. Todo lo que las partes anteriores de esta serie te piden mandar por un monitor serial, ahora lo puedes mandar desde una pestaña del navegador.


Paso 3: De Cura directo a la impresora
#

Esta es la parte que te quita la microSD de encima, y toma como dos minutos.

En Cura, abre el Marketplace e instala el plugin OctoPrint Connection (mantenido por fieldOfView). Reinicia Cura, entra a Preferences → Printers, selecciona tu Ender 3 y da clic en Connect OctoPrint.

Cura necesita un API key para hablarle a OctoPrint. Tienes dos caminos:

  • Presionar el botón “Request…” del plugin y aprobar la solicitud en la interfaz web de OctoPrint. Es el camino que yo recomendaría, porque genera una llave de aplicación acotada a Cura en lugar de entregarle tu llave maestra.
  • O pegar la llave a mano, generándola en los ajustes de OctoPrint.

Trata el API key como una contraseña. Le da control de tu impresora a quien la tenga. No la pegues en un foro cuando andes pidiendo ayuda, no la subas a un repositorio y recórtala de cualquier captura antes de publicarla. En este post no aparece ninguna, ni siquiera una falsa, precisamente porque una llave que se ve creíble es justo lo que la gente copia sin pensar.

Después de escribir o solicitar la llave, presiona Connect. Ese último clic importa: el plugin solo guarda la llave cuando te conectas con ella.

De ahí en adelante, el botón de imprimir de Cura se convierte en Print with OctoPrint, y el trabajo laminado se sube y arranca sin que una tarjeta entre en la ecuación.

Aun así, a veces subo el archivo a mano, y está bien. Cuando lamino en otra computadora, o cuando ya tengo un G-code que no salió de mi Cura de siempre, nada más lo arrastro a la lista de archivos de OctoPrint en la interfaz web y le doy imprimir desde ahí. El plugin es el camino cómodo, no el único, y conviene conocer los dos porque la subida manual funciona desde cualquier dispositivo con navegador, incluido el celular.

Gráfico de reemplazo que dice que la captura del plugin OctoPrint Connection en Cura viene en camino
El plugin OctoPrint Connection en Cura, ya conectado a la impresora, con el campo del API key tapado.

Paso 4: La cámara, y la función que de verdad se gana su lugar
#

Conecta una webcam USB a la Pi y OctoPrint toma el stream solo. La mía, otra vez, es una webcam genérica sin soporte, acomodada donde alcance a ver la cama. Nunca le imprimí un bracket ni compré una mejor, y aun así cambió mi forma de imprimir.

Aquí está el porqué, y no es la razón que la gente espera.

El valor no está en la novedad de ver plástico saliendo de una boquilla. Está en que una impresión que va mal se anuncia visualmente mucho antes de anunciarse de cualquier otra forma. Cuando la pieza se despega y la boquilla empieza a arrastrarla, o cuando la primera capa claramente no pegó, eso lo ves en tres segundos desde el celular. Y entonces puedes hacer lo que de verdad importa: cancelar la impresión a distancia.

Esa combinación, vista en vivo más cancelación remota, es la justificación honesta de la cámara. Una impresión que falla en la hora uno de seis desperdicia cinco horas de filamento y de máquina, o no, y la única diferencia es si alguien pudo asomarse y darle stop. Yo lo he hecho desde fuera de la casa más de una vez, y nunca se ha sentido como un adorno.

Sobre Octolapse
#

OctoPrint puede grabar un timelapse de fábrica. Octolapse es el plugin que lo lleva más lejos: mueve el cabezal fuera del cuadro antes de cada foto, así que el video final muestra el modelo creciendo suavemente desde la cama, sin la boquilla cruzando la toma. Es el efecto detrás de prácticamente todos los timelapses satisfactorios de impresión 3D que has visto.

Aquí voy a ser directo contigo, porque prefiero ser útil que quedar bien: tengo la capacidad y no la uso. La razón es el almacenamiento. Un timelapse implica guardar un cuadro por cada capa y luego renderizar un video con todos ellos, y mi tarjeta de 16 GB simplemente no tiene espacio para los cuadros y los archivos terminados al mismo tiempo. Así que la función está ahí, disponible, sin usarse.

Eso no es una crítica a Octolapse. Es una decisión de dimensionamiento que tomé sin pensarla bien: 16 GB es una tarjeta cómoda para correr OctoPrint y una tarjeta apretada para filmarlo. Y es justo el tipo de cosa que conviene saber antes de comprar la microSD y no después. Si los timelapses son parte de por qué quieres hacer este proyecto, planea el almacenamiento primero.

Gráfico de reemplazo que dice que la captura de la cámara en OctoPrint viene en camino
La vista de la webcam en OctoPrint mostrando una impresión en curso sobre la cama.

Paso 5: Verla desde fuera de la casa
#

Todo lo anterior funciona dentro de tu red local. En cuanto sales, se acaba, y ahí entra el acceso remoto.

Podrías resolverlo con port forwarding y un reverse proxy, y de hecho yo corro justo ese tipo de esquema para otros servicios. Para una impresora 3D en particular lo pensaría dos veces. La propia documentación de OctoPrint es inusualmente tajante con esto, y tiene razón: exponer directo al internet abierto una máquina que le aplica calor al plástico no es un riesgo que valga la pena por comodidad. Un servicio de relay, donde la Pi abre una conexión saliente hacia un proveedor y tú llegas a través de él, evita abrir un solo puerto en tu router.

Actualización, 2026: cambié de herramienta para esto. Cuando armé esta impresora, en octubre de 2020, usé AstroPrint, siguiendo el video de CrossLink “Access OctoPrint from ANYWHERE with AstroPrint” (abril de 2020), que fue la guía con la que realmente trabajé en su momento. Hace unos meses, en 2026, me pasé a OctoEverywhere, y eso es lo que corre hoy en mi Pi. Para ser justos con AstroPrint: sigue existiendo y sigue recibiendo mantenimiento, así que esto fue un cambio de mi parte, no un escape. Los pasos de abajo describen la herramienta que uso actualmente; la ruta de AstroPrint queda registrada aquí como historia, no como instrucción.

El camino actual, si quieres seguir lo que de verdad tengo corriendo:

  1. En OctoPrint, entra a Settings → Plugin Manager → Get More, busca OctoEverywhere e instálalo. Está en el repositorio oficial de plugins de OctoPrint.
  2. Reinicia OctoPrint cuando te lo pida.
  3. Sigue la liga del plugin para crear una cuenta y vincular tu impresora.
  4. Abre el portal desde el celular o desde cualquier navegador, donde estés.

Lo que obtienes, según la descripción del propio proyecto, es acceso remoto a la interfaz completa de OctoPrint (plugins incluidos), streaming de la cámara y notificaciones de impresión, en un plan gratuito y sin nada de port forwarding. Lo que a mí me importa es que la vista remota es la misma interfaz que la local, así que el botón de cancelar está exactamente donde mi pulgar ya lo busca.


Qué no arregla esto
#

Quiero ser honesto con los límites de esta mejora, porque “impresora conectada a la red” suena más transformador de lo que es.

Sigues caminando hasta la impresora. Alguien tiene que despegar la pieza terminada, quitar el skirt, limpiar la superficie y arrancar el siguiente trabajo. OctoPrint elimina el viaje antes de la impresión, no el de después.

Una impresora en red no mejora una primera capa mala. Ni un milímetro. Si tu cama no está nivelada y tu offset de Z está mal, OctoPrint le va a entregar fielmente un archivo hermoso a una máquina que lo va a imprimir mal, y ahora además lo puedes ver en alta definición. Ese problema le toca al BLTouch y al firmware, que es justamente por qué son posts aparte.

Una cámara no es detección de fallas. Solo ayuda cuando alguien se asoma. Te compra la posibilidad de agarrar una falla, no la garantía.

Tener esas fronteras claras es, creo, el hábito de ingeniería más útil que me dejó este proyecto. Cada mejora resuelve bien un problema específico, y la tentación de esperar que una buena herramienta arregle un problema que no le corresponde es de donde salen muchos fines de semana desperdiciados.


Actualización, junio de 2026: la instalación envejeció y tuve que volver a grabarla
#

Lee esto antes de cortarle la corriente a tu Pi. Este post está fechado en 2020, y la instalación que describe corrió sin dar lata durante años. En junio de 2026 se murió. La historia es corta, el arreglo es reproducible, y la lección del final es lo único aquí que te puede salvar un fin de semana.

Qué pasó. Después de un apagón de la Pi, la interfaz web de OctoPrint ya nunca regresó. La causa de fondo fue corrupción del sistema de archivos EXT4 en la microSD, provocada por un apagado sucio que había interrumpido una actualización en caliente meses antes. El daño llevaba ahí todo ese tiempo, callado, esperando un reinicio que lo sacara a la luz.

Lo primero que revivió la impresora fue forzar una revisión del sistema de archivos al arrancar. Eso se hace desde otra computadora, montando la partición de boot de la tarjeta y agregándole un parámetro a /boot/cmdline.txt:

fsck.mode=force

Es un truco que de verdad vale la pena conocer, y funcionó. También es un parche y no una reparación: arregla el daño que alcanza a ver y no te dice nada de lo que aquella escritura interrumpida haya dejado atrás.

Por qué regrabar era la decisión correcta de todos modos. Mi tarjeta original estaba construida sobre Raspberry Pi OS Buster con Python 3.7, y los dos ya habían llegado a su fin de soporte hacía rato. La imagen actual de OctoPi está construida sobre Bookworm con Python 3.11. Una instalación de OctoPi envejece por debajo de ti aunque nada salga mal, así que una tarjeta que además ya se había corrompido no valía la pena mantenerla con respiración artificial. Un detalle que te conviene a ti: este post nunca fijó una versión de OctoPi, te dice que tomes la versión estable del Imager, así que las instrucciones de arriba no se quedaron viejas. La que se quedó vieja fue mi instalación.

Qué implicó la migración de verdad. Esta es la parte que te sirve, y es la diferencia entre una tarde y un fin de semana:

  1. Saca primero un respaldo de OctoPrint. OctoPrint exporta su propio .zip desde la interfaz web, y yo saqué uno de la instalación enferma antes de tocar cualquier otra cosa. Si tu Pi todavía responde aunque sea a medias, haz esto antes de ponerte creativo.
  2. Regraba la misma tarjeta. No tenía otra a la mano, así que la tarjeta que falló es la que corre hoy, escrita de cero con la versión estable actual de OctoPi desde el Imager.
  3. Restaura desde el respaldo. Ajustes, archivos de G-code y plugins regresaron de ese .zip, y la restauración la hice por cable Ethernet en lugar de Wi-Fi.

La lección, dicha sin rodeos: usa siempre el comando Shutdown de OctoPrint antes de cortarle la corriente a la Pi. No el switch, no el enchufe. Una tarjeta SD interrumpida a media escritura es exactamente así como empieza esta falla, y la interrupción que mató a la mía ocurrió meses antes de que apareciera el síntoma. Un respaldo y un clic en Shutdown cuestan segundos; la alternativa me costó una noche de diagnóstico y una reinstalación completa.

Prefiero dejar esto aquí que reescribir el post en silencio como si nada hubiera pasado. Un equipo que corre casi seis años se gana su historia de mantenimiento, y tratar esa historia como una cosa más que aprender es más útil que fingir que el armado salió perfecto.


Hacia dónde sigue esto
#

Tengo dos cosas en la lista, y las dos apuntan hacia afuera de la impresora.

Sacar el almacenamiento del timelapse de la Pi. El límite de espacio que mantiene a Octolapse sin usar no es realmente un problema de la impresora, es un problema de “esta computadora chiquita tiene una tarjeta chiquita”, y yo ya tengo corriendo un servidor casero armado con una laptop vieja cuyo propósito entero es guardar archivos. Apuntar los cuadros y los videos renderizados a un almacenamiento en red en vez de a la tarjeta de la Pi es la solución obvia, y es un buen ejemplo de cómo un home lab se va acumulando: una máquina que armaste por una razón termina resolviendo, sin ruido, un problema que tenías en otro lado.

Home Assistant. Meter la impresora a la misma capa de automatización que el resto de la casa es el siguiente paso natural, y es la pieza que preferiría desarrollar bien en lugar de bosquejarla aquí.

Cinco partes después, la Ender 3 que llegó en kit es más silenciosa, se nivela sola, corre un firmware que yo compilé, trae puestas piezas que ella misma se imprimió y ahora vive en la red. Ninguno de esos pasos requirió una habilidad que yo tuviera al empezar, y ese es realmente el punto. Curiosidad, un par de guías abiertas en la segunda pantalla y la disposición a tratar cada falla como lo siguiente que hay que aprender te llevan a través de todos ellos.

Empieza por donde tu propia impresora te moleste más. Esa siempre es la primera mejora correcta.

Mejorando la Ender 3 - Este artículo es parte de una serie.
Parte 5: Este artículo