Hace tiempo que tenía ganas de aprender un nuevo lenguaje de
programación para usar en mis proyectos, ya que desde el 2003 no estudiaba nada
de programación. Después de averiguar sobre la infinidad de lenguajes que están
de moda me decidí por Python, me pareció que es el que mas se adapta a lo que
yo estaba buscando. Durante la semana pasada leí algunos manuales y para
practicar me pareció un buena idea hacer un host multiplataforma para
impresoras 3d, se que no es nada nuevo, pero resultó ser un proyecto de fin de
semana apasionante.
Por ahora funciona por la consola, y solamente tiene las
características indispensables:
1)
Hace un escaneo de los puertos disponibles
2)
Abre el puerto elegido y permite definir el
baudrate
3)
Permite enviar Gcodes y Mcodes por la consola
(ejemplo: send M105)
4)
Abre archivos Gcodes (ejemplo: open
archivo.gcode)
5)
Manda a imprimir (print)
6)
Archivo de ayuda (help)
7)
Cierra el archivo Gcode (close)
8)
Salir del programa (exit)
La idea es tener un algoritmo sencillo y robusto para a
futuro ir agregándole más funcionalidades como ser, una interface gráfica
multiplataforma (con wxPython o algo similar), visor de Gcodes 2D, seguirdor
del GCode mientras imprime, un algoritmo de estimación de tiempo de impresión,
visor de Gcode 3D, integración con slicers, visor de STL, etc.
Por ahora es todo un éxito,
funciona perfectamente tanto en Windows (XP) y Linux (Raspbian), el Gcode lo
generé con Slic3r y por ahora solamente lo probé con el firmware TeaCup. Más
adelante voy a probar con más sistemas operativos, slicers y firmwares.
Para los que estén
interesados les dejo el código fuente, solamente son 293 y está lleno de
comentarios para que cualquiera lo pueda entender (sin comentarios ni espacio
entre líneas son 173 líneas de código) en un solo archivo.
HostSinapTec10.py
HostSinapTec10.py
Para que funcione
obviamente tienen que tener Python (yo uso la versión 2.7)
y pySerial que es el
módulo que se encarga de la comunicación por puerto serie (yo tengo instalada
la versión 2.5)
Ejemplo Windows:
Ejemplo Raspbian: