Ingenieria inversa con Cura


Cura  de Ultimaker  actualmente  es  el software mas usado en laminado en 3d(slicing ) pudiendo traducir  archivos  de objetos en  3D  de tipo STL, OBJ o 3MF a un formato que la impresora puede entender: es decir en código G-CODE permitiendo por tanto  convertir los ficheros de objetos virtuales creados por software 3d en objetos reales  físicos  gracias a la tecnologia de la impresión 3d 

Muy resumidamente  g-code son  instrucciones para que una  impresora 3D   pueden realizar movimientos sobre los eje x x,y o z ,ajustar temperaturas   del fusor o de la cama, activar el extrusor ,etc: es decir  un conjunto de códigos para el gobernar el cabezal de impresión  y todo el hw  adicional codificados en RS274NGC , es decir en código G estándar.  Tal es la aceptación de este sw que sólo hay un puñado de impresoras 3D que no son soportadas por Cura pero  aun  así, puede incluso añadirse la impresora por  uno mismo. Además los Firmwares RepRap  también son bastante utilizables para el fresado CNC y aplicaciones similares.

 

Como cada impresora tiene una configuración, área de impresión, placa de construcción y tamaño de boquilla diferentes, el software de corte Cura necesita conocer estos detalles de hardware en un perfil de impresora de modo que una vez se  que tenga los detalles necesarios, se pueden especificar ajustes como la altura y el grosor de la capa . Basándose en importantes estadísticas de la impresora y en su configuración, Cura calculará la ruta que debe tomar el cabezal de impresión para imprimir su modelo  produciendo una lista de instrucciones para la impresora,instrucciones  que como sabemos se guardaran en ese archivo G-Code , el cual lo mas normal es que guardaremos en una tarjeta SD  (o enviarse directamente desde Cura a la impresora de modo inalámbrico o por cable, dependiendo de la impresora).

 

 

¿Porque  estamos hablando de g-code cuando en realidad  todo el trabajo  el sw de Cura?  Pues básicamente porque para cada pieza se suelen hacer muchos ajustes   en Cura que quedan guardados ,  al menos parcialmente, en estos ficheros ( y quizas no recordemos ) ,  por lo que es posible con los  g-code deducir  que ajustes se usaron   en la obtención de esa pieza   y con ello extrapolar la configuración usada.

Si conoce versiones anteriores de Cura , en efecto esta exportación de ajustes era posible  a través del fichero g-code  pero desgraciadamente en las versiones  mas actuales ya  NO es posible,  pero  no se preocupe, porque vamos a  ver como podemos deducir  mucha información de ajustes  de   Cura  desde los ficheros .gcode  sin instalar nada

 

 

 

Pues en efecto para deducir  los ajustes de  nos  apoyaremos de  gCodeViewer , sw  en linea que es un visualizador y analizador visual de GCode  que podemos usar en nuestro propio navegador funcionando por tanto  en cualquier sistema operativo y en casi cualquier navegador moderno (chrome, ff, safari 6, opera, ie10 ).

Todo lo que necesitamos  pues hacer es arrastrar su archivo * .gcode a la zona designada y podemos ya estudiar fácilmente el gcode.

Las características actuales incluyen:

    • Visualización  GCode en 2D, capa por capa
    • Mostrar retractaciones y reinicios
    • Mostrar velocidades de impresión / movimiento / retracción
    • Mostrar solo parte de la capa, secuencia animada de impresión de capa
    • Muestra dos capas simultáneamente para que pueda verificar los voladizos
    • Ajuste el ancho de línea para simular la impresión más de cerca

Una vez  cargado el fichero , el visor de Gcode intentará analizar los diámetros de boquilla y filamento de gcode, pero puede que no lo haga por lo que en ese caso, deberá configurarlo manualmente en la pestaña ‘Información de la impresora’

Este   programa pues nos permite analizar GCode: Tiempo de impresión, cantidad de plástico utilizado, altura de capa, etc. para todo el archivo y para una sola capa

Una funcionalidad interesante de este sw es que podemos hacer referencia a una  parte visualizada en el archivo GCode :es decir, seleccionamos una parte determinada de la visualización 2D, cambiamos a la vista GCode y  resaltará la lista de líneas responsables de la pieza visualizada

Este sw   Multiplataforma, disponible en línea , también funciona sin conexión localmente  no carga el código g en ningún lado ni descarga nada excepto la aplicación en sí por lo que es una herramienta muy interesante para nuestro cometido

 

EJEMPLO INGENIERÍA INVERSA DE FICHEROS GCODE

 

Veamos  como ejemplo analizar 4 ficheros g-code de 4 objetos diferentes laminados con diferentes versiones de Cura (Cura_SteamEngine 4.6.0,Cura_SteamEngine 4.6.1 y Cura_SteamEngine 4.4.1.)

Para ver mas fácilmente las diferencias  del código gcode    copiaremos  en columnas diferentes    de excel las primeras  lineas  obtenidas con el gcode analyzer

Como  la impresora  3d (una Geetech Prusa I3  pro w)   es la misma , a grandes rasgos la información  hasta la linea  12  no deberia ser  demasiado relevante para este análisis ya que hace referencia a los movimientos máximos  y mínimos de  x, y , z, pero podemos en el código que hay grandes diferencias:

;MINX:9.648   ;MINX:18.574   ;MINX:17.054   ;MINX:11.993
;MINY:11.059   ;MINY:85.061   ;MINY:9.375   ;MINY:5.508
;MINZ:0.3   ;MINZ:0.3   ;MINZ:0.3   ;MINZ:0.3
;MAXX:182.112   ;MAXX:181.424   ;MAXX:180.006   ;MAXX:188.007
;MAXY:198.228   ;MAXY:114.941   ;MAXY:190.625   ;MAXY:194.492
;MAXZ:1.42   ;MAXZ:1.42   ;MAXZ:15.98   ;MAXZ:20.9

Estos   parámetros como el lector  conoce definen los desplazamientos maximos  y minimos de los tres ejes , por lo que deberian coincidir en los cuatro casos , lo cual evidencia que  podria haber errores en los dos primeros ejemplos  

 

Especialmente interesante   es  tambien la linea 12  qeu nos diece con diferentes versiones de Cura (Cura_SteamEngine 4.6.0,Cura_SteamEngine 4.6.1 y Cura_SteamEngine 4.4.1.)

 

Bien  y ahora desde la linea 12 ( versi9on de Cura )  hasta la linea 34  si veremos un bloque común  , que  es preciosamente el que definimos en cura para iniciar la impresora  y que por tanto debería coincidir en las diferentes versiones:

M140 S50
M105
M190 S50
M104 S220
M105
M109 S220
M82 ;absolute extrusion mode
G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F9000 ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F9000
;Put printing message on LCD screen
M117 Printing…
G92 E0
G92 E0

Bueno este es un bloque comun ( el definido en cura como bloque inicial)  ,pero a partir de esta linea  segun la version  puede haber diferencias 

 

;LAYER_COUNT:5   G1 F1500 E-6.5   G1 F1500 E-7   G1 F1500 E-7
;LAYER:0   ;LAYER_COUNT:5   ;LAYER_COUNT:57   ;LAYER_COUNT:71
M107   ;LAYER:0   ;LAYER:0   ;LAYER:0
G0 F3600 X17.865 Y16.327 Z0.3   M107   M107   M107
;TYPE:SKIRT   G0 F3600 X22.667 Y89.806 Z0.3   G1 F600 Z1.3   G1 F600 Z1.3
    ;TYPE:SKIRT   G0 F3600 X39.412 Y37.756 Z1.3 G0 F3600 X65.981 Y65.476 Z1.3
        ;TYPE:SKIRT   ;TYPE:SKIRT
             

En este caso claramente se ha configurado el tipo de adherencia a la placa de impresion como skirt ( falda)

Y a  partir de este bloque   ya deberían localizarse los movimientos x,y, z  según la pieza elegida   y que por tanto dependerá de cada modelo

 

 

Bueno  y ahora vamos al bloque final, que también es definido por Cura  y por tanto debiera ser común en todas las versiones ;

 

M140 S0
M107
M104 S0 ;extruder heater off
M140 S0 ;heated bed heater off (if you have it)
G91 ;relative positioning
G1 E-1 F300  ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more
G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way
M84 ;steppers off
G90 ;absolute positioning
M82 ;absolute extrusion mode
M104 S0
;End of Gcode

 

 

Finalmente finalizado este bloque  y esto es lo interesante esta comentado en metadatos  todos los ajustes importantes realizados en cura ;

End of Gcode
;SETTING_3 {"global_quality": "[general]\\nversion = 4\\nname = Fine #2\\ndefini
;SETTING_3 tion = prusa_i3\\n\\n[metadata]\\nquality_type = normal\\ntype = qual
;SETTING_3 ity_changes\\n\\n[values]\\nlayer_height = 0.28\\nmaterial_bed_temper
;SETTING_3 ature = 70\\n\\n", "extruder_quality": ["[general]\\nversion = 4\\nna
;SETTING_3 me = Fine #2\\ndefinition = prusa_i3\\n\\n[metadata]\\nquality_type =
;SETTING_3 normal\\nposition = 0\\ntype = quality_changes\\n\\n[values]\\ninfil
;SETTING_3 l_pattern = grid\\ninfill_sparse_density = 50\\nmaterial_flow = 80\\n
;SETTING_3 material_print_temperature = 220\\noptimize_wall_printing_order = Tru
;SETTING_3 e\\nretraction_amount = 7\\nretraction_hop_enabled = True\\nroofing_l
;SETTING_3 ayer_count = 1\\nspeed_print = 50\\ntop_bottom_thickness = 1.2\\nwall
;SETTING_3 _thickness = 1.2\\n\\n"]}

 

Por desgracia no siguen el mismo orden en las diferentes versiones de cura, asi que tendremos que extraer de aqui el valor de lo diferentes campos despreciando la cadena SETTING_3    asi como eliminano los retornos de linea

{"global_quality": "[general]\\nversion = 4\\nname = Fine #2\\ndefinition = prusa_i3\\n\\n[metadata]\\nquality_type = normal\\ntype = quality_changes\\n\\n[values]\\nlayer_height = 0.28\\nmaterial_bed_temperature = 70\\n\\n", "extruder_quality": ["[general]\\nversion = 4\\nname = Fine #2\\ndefinition = prusa_i3\\n\\n[metadata]\\nquality_type =normal\\nposition = 0\\ntype = quality_changes\\n\\n[values]\\ninfill_pattern = grid\\ninfill_sparse_density = 50\\nmaterial_flow = 80\\nmaterial_print_temperature = 220\\noptimize_wall_printing_order = Tru
e\\nretraction_amount = 7\\nretraction_hop_enabled = True\\nroofing_layer_count = 1\\nspeed_print = 50\\ntop_bottom_thickness = 1.2\\nwall_thickness = 1.2\\n\\n"]}

 

De esto  ya finalmente si los ordenamos en campos  deducimos los parámetros ajustados:

 

nversion = 4
nname =  Fine #2
ndefinition =  prusa_i3
ntype =  quality_changes
nquality_type =  normal
nlayer_height =  0.28
nmaterial_bed_temperature =  50
nposition =  0
nbottom_layers = 4
nbrim_line_count =  1
nbrim_outside_only =  False
nbrim_width   
   
ninfill_pattern =   grid
ninfill_sparse_density =  50
nmaterial_flow =  50
 nmaterial_print_temperature =  220
 nretraction_enable =  False
 nskirt_brim_minimal_length =  25
 nspeed_print =  40
 nspeed_topbottom =  speed_print / 2
 ntop_layers = 4
 nwall_thickness   1.2

 

 

Con esto claramente  podemos pues deducir   cuales fueron los parámetros   que se ajustaron con esa pieza, así como  si deseamos comparar con otros gcodes de otras piezas:

nversion = 4   4   4   4
nname =  Fine #2   Fine #2   Fine #2   Fine #2
ndefinition =  prusa_i3   prusa_i3   prusa_i3   prusa_i3
ntype =  quality_changes   quality_changes   quality_changes   quality_changes
nquality_type =  normal   normal   normal   normal
nlayer_height =  0.28   0,28   0,28   0,28
nmaterial_bed_temperature =  50   50   70   ?70
nposition =  0   0   0   0
nbottom_layers = 4   4        
nbrim_line_count =  1   1        
nbrim_outside_only =  False   False        
nbrim_width              2
               
ninfill_pattern =   grid    grid   grid   grid
ninfill_sparse_density =  50   50   50   50
nmaterial_flow =  50   50   80   80
 nmaterial_print_temperature =  220   220   220   220
 nretraction_enable =  False            
 nskirt_brim_minimal_length =  25   25       25
 nspeed_print =  40   40   50   50
 nspeed_topbottom =  speed_print / 2   speed_print / 2        
 ntop_layers = 4   4        
 nwall_thickness   1.2   1,2   1,2   1,2
ntop_bottom_thickness             1,2
               
noptimize_wall_printing_order          true   true
nretraction_amount          7   7
nretraction_hop_enabled          True   true
nroofing_layer_count          1   1
               
nadhesion_type              brim

Como  vemos , no todos los parámetros en  Cura  se ajustaron , lo cual queda muy evidenciado  precisamente en esos valores claramente diferentes  en las 4 columnas  y que están en  algunas piezas  y en otras no

Por cierto  para terminar este caso , los datos  correspondientes a los dos primeros ejemplos la piezas delatan   que no se pudieron imprimir correctamente por esa incorrecta parametrización de Cura

.

Campos de G Code RepRap

En esta sección se explican los campos que van precedidos por una letra. Los números en los campos son representados por nnn . Los Números de Ser pueden Enteros (enteros) (128) o Números racionales (12,42), dependiendo del contexto. Por ejemplo, la coordenada X puede ser entera ( X175 ) o racional ( X17.62 ), pero seleccione el extrusor número 2.76 sin sentido sentido.

Letra SIGNIFICADO
Gnnn Comando GCodelo estándar, como moverse hasta un punto
Mnnn Comando definido por RepRap, como activar un ventilador
Tnnn Seleccionar la herramienta nnn. En RepRap, las herramientas son extrusores
Snnn Parámetro de comando, como la tensión enviada a un motor
Pnnn Parámetro de comando, como el tiempo en milisegundos
Xnnn Una coordenada X, normalmente para moverse a ella. Puede ser un número entero o racional.
Ynnn Una coordenada Y, normalmente para moverse a ella. Puede ser un número entero o racional.
Znnn Una coordenada Z, normalmente para moverse a ella. Puede ser un número entero o racional.
Innn Parámetro – Actualmente no utilizado
Jnnn Parámetro – Actualmente no utilizado
Fnnn Avance en mm por minuto. (Velocidad de movimiento del cabezal de impresión)
Rnnn Parámetro – usado para temperaturas
Qnnn Parámetro – Actualmente no utilizado
Ennn Longitud a extrusión en mm. Ex exactamente como X, Y y Z, pero para la cantidad de filamento a extrusión. Mejor: Skeinforge 40 y siguientes interpretan esto como la longitud absuluta de filamento insertado, no como la longitud de la extrusión que sale.
Nnnn Número de línea. Utilizado para pedir la repetición de la transmisión en caso de errores de comunicación.
* nnn Suma de comprobación. Usado para verificar errores de comunicación.

Comentarios

Los comentarios en Gcode comienzan con punto y coma y terminan al final de la línea:

N3 T0 * 57; Esto es un comentario
N4 G92 E0 * 67
; Esto también lo es
N5 G28 * 22

Los comentarios y espacios en blanco serán ignorados por su impresora RepRap. Es mejor quitarlos en el ordenador portátil antes de enviar el Gcode a tu impresora, ya que así se ahorra ancho de banda.

Comandos individuales

Comprobación

N y *

Ejemplo: N123 [… Código G aquí …] * 71

Estos son el número de línea y la suma de verificación. El firmware RepRap comprueba la suma de comprobación con un valor calculado localmente y, si difieren, solicita una transmisión repetida de la línea del número dado.

Puede omitir ambos: RepRap seguirá funcionando, pero no hará la comprobación. Sin embargo, debes tener ambos o ninguno.

La suma de comprobación «cs» para una cadena de GCode «cmd» (incluido su número de línea) se calcula exorbitando los bytes en la cadena hasta y sin incluir el carácter * de la siguiente manera:

int cs = 0;
para (i = 0; cmd [i]! = '*' && cmd [i]! = NULL; i ++)
   cs = cs ^ cmd [i];
cs & = 0xff; // Programación defensiva ...

y el valor se agrega como un entero decimal al comando después del carácter *.

El firmware RepRap espera que los números de línea aumenten en 1 cada línea, y si eso no sucede, se marca como un error. Pero puede restablecer el recuento utilizando M110 (ver más abajo).

Comandos G almacenados

El firmware RepRap almacena estos comandos en un buffer de anillo internamente para su ejecución. Esto significa que no hay retraso (apreciable) mientras se reconoce un comando y se transmite el siguiente. A su vez, esto significa que las secuencias de segmentos de línea se pueden trazar sin pausa entre uno y el siguiente. Tan pronto como se recibe uno de estos comandos almacenados, se reconoce y almacena localmente. Si el búfer local está lleno, el reconocimiento se retrasa hasta que haya espacio para el almacenamiento en el búfer disponible. Así es como se logra el control de flujo.

G0 y G1: mover

Uso
G0 Xnnn Ynnn Znnn Ennn Fnnn Snnn
G1 Xnnn Ynnn Znnn Ennn Fnnn Snnn
Variables
No todas las variables deben usarse, pero al menos una debe usarse
Xnnn La posición para moverse en el eje X
Ynnn La posición para moverse en el eje Y
Znnn La posición para moverse en el eje Z
Ennn La cantidad a extruir entre el punto inicial y el punto final
Fnnn La velocidad de avance por minuto del movimiento entre el punto inicial y el punto final (si se proporciona)
Snnn Flag para verificar si se tocó un tope S1 para verificar, S0 para ignorar, S2 ver nota, el valor predeterminado es S0 ) 1
Ejemplos
G0 X12 (mover a 12 mm en el eje X)
G0 F1500 (Ajuste la velocidad de avance a 1500 mm / minuto)
G1 X90.6 Y13.8 E22.4 (Mover a 90.6 mm en el eje X y 13.8 mm en el eje Y mientras extruye 22.4 mm de material)

La especificación de firmware RepRap trata a G0 y G1 como el mismo comando, ya que es tan eficiente como no hacerlo. 2

La mayoría de los firmwares RepRap hacen cosas sutiles con los avances.

1. G1 F1500
2. G1 X50 Y25.3 E22.4

En el ejemplo anterior, establecemos el avance a 1500 mm / minuto en la línea 1, luego nos movemos a 50 mm en el eje X y a 25,3 mm en el eje Y mientras extruimos 22,4 mm de filamento entre los dos puntos.

1. G1 F1500
2. G1 X50 Y25.3 E22.4 F3000

Sin embargo, en el ejemplo anterior, establecemos una velocidad de avance de 1500 mm / minuto en la línea 1, luego hacemos el movimiento descrito anteriormente acelerando a una velocidad de avance de 3000 mm / minuto mientras lo hace. La extrusión se acelerará junto con el movimiento X e Y, por lo que todo permanecerá sincronizado.

La especificación RepRap trata el avance como simplemente otra variable (como X, Y, Z y E) para ser interpolada linealmente. Esto proporciona un control completo sobre la aceleración y desaceleración del cabezal de la impresora de tal manera que se garantiza que todo se mueva suavemente y que se extruya el volumen correcto de material en todos los puntos. 3

Para invertir la extrusora en una cantidad dada (por ejemplo, para reducir su presión interna mientras realiza un movimiento en el aire para que no gotee) simplemente use G0 o G1 para enviar un valor E que sea menor que la longitud extruida actualmente .

Notas
  •  Algunos firmwares permiten que RepRap active o desactive la «detección» de paradas finales durante un movimiento. Verifique con el firmware que esté utilizando para ver si son compatibles con la variable S de esta manera, ya que puede dañarse si asume incorrectamente. En el firmware Duet-dc42, el uso del parámetro S1 o S2 en una impresora delta hace que los parámetros XYZ se refieran a las posiciones individuales del motor de la torre en lugar de la posición del cabezal, y también permitan la detección de tope final si el parámetro es S1.
  •  En la especificación RS274NGC, G0 es Movimiento rápido , que se utilizó para moverse entre el punto actual en el espacio y el nuevo punto de la manera más rápida y eficiente posible, y G1 es Movimiento controlado , que se utilizó para moverse entre el punto actual en el espacio y el nuevo punto lo más preciso posible
  • Es posible algunos firmwares no admitan establecer el avance en línea con un movimiento.
  • La bifurcación  zpl del firmware Duet implementa un parámetro adicional ‘R1’ para indicarle a la máquina que regrese a las coordenadas en las que originalmente se detuvo la impresión.

Algunas máquinas antiguas, CNC o de otro tipo, solían moverse más rápido si no se movían en línea recta. Esto también es cierto para algunas impresoras no cartesianas, como las impresoras delta o polares, que se mueven más fácil y más rápido en una curva.

G2 y G3: movimiento de arco controlado

Uso
G2 Xnnn Ynnn Innn Jnnn Ennn (Arco horario)
G3 Xnnn Ynnn Innn Jnnn Ennn (Arco en sentido antihorario )
Variables
Xnnn La posición para moverse en el eje X
Ynnn La posición para moverse en el eje Y
Innn El punto en el espacio X desde la posición X actual para mantener una distancia constante de
Jnnn El punto en el espacio Y desde la posición Y actual para mantener una distancia constante de
Ennn La cantidad a extruir entre el punto inicial y el punto final
Ejemplos
G2 X90.6 Y13.8 I5 J10 E22.4 (Mover en un arco en sentido horario desde el punto actual a punto (X = 90.6, Y = 13.8), con un punto central en (X = current_X + 5, Y = current_Y + 10), extruyendo 22,4 mm de material entre el inicio y la detención)
G3 X90.6 Y13.8 I5 J10 E22.4 (Moverse en un arco en sentido antihorario desde el punto actual a punto (X = 90.6, Y = 13.8), con un punto central en (X = current_X + 5, Y = current_Y + 10), extruyendo 22,4 mm de material entre el inicio y la detención)
Notas

1 El firmware Marlin puede alternar el soporte para estos Gcodes. Para habilitar el soporte, asegúrese de definir SCARA en el momento de la compilación, de lo contrario, se ignorarán los Gcodes.

G28: Mover al origen (Inicio)

Uso
G28
Variables
Este Gcode se puede usar sin ninguna variable adicional suministrada
X Flag para volver al origen del eje X
Indicador Y para volver al origen del eje Y
Z Flag para volver al origen del eje Z
Ejemplos
G28 (Ir al origen en todos los ejes)
G28 XZ (Ir al origen solo en los ejes X y Z)

Cuando el firmware RepRap recibe este comando, mueve todos los ejes (o los suministrados) de regreso a los topes extremos cero tan rápido como puede, luego retrocede un milímetro y lentamente retrocede a los puntos de activación del tope final cero para aumentar la precisión de la posición. Este proceso también se conoce como » Homing «.

Si agrega coordenadas, estas coordenadas se ignoran. Por ejemplo, G28 Z0.00da como resultado el mismo comportamiento que G28 Z.

Cuando se utiliza el firmware Duet-dc42 para controlar una impresora delta, cualquier comando G28 alojará las tres torres, independientemente de las letras XYZ.

G29: Sonda Z detallada

Sondea la cama en 3 o más puntos.

G30: Sonda Single Z

En su forma más simple, las sondas se acuestan en la ubicación XY actual.

Algunas implementaciones permiten un comportamiento más general: si se especifica un campo Pn, los valores sondeados X, Y y Z se guardan como punto n en la cama para calcular el plano de desplazamiento. Generalmente n es 0, 1 o 2. Si se especifican valores X, Y, o Z (por ejemplo, G30 P1 X20 Y50 Z0.3), esos valores se utilizan en lugar de las coordenadas actuales de la máquina. Un valor Z tonto (menor que -9999.0) hace que la máquina pruebe en el punto actual para obtener Z, en lugar de usar el valor dado. Si se especifica un campo S (por ejemplo, G30 P1 Z0.3 S), el plano del lecho se calcula para compensación y se almacena. La combinación de estas opciones permite que la máquina se mueva a puntos usando comandos G1, y luego sondee la cama, o que el usuario coloque la boquilla de manera interactiva y use esas coordenadas.El usuario también puede registrar esos valores y colocarlos en un archivo GCode de configuración para su ejecución automática.

La variante dc42 de RepRapFirmware utiliza el valor del parámetro S para especificar qué cálculo realizar. Si el valor es cero o no hay ningún valor después de la letra S, el plano de la cama se calcula y almacena como de costumbre. En una impresora delta, si el parámetro es 4, se realiza la autocalibración para determinar el radio delta, las correcciones de tope final y la altura de referencia. El número de coordenadas sondeadas debe ser 4, de las cuales las tres primeras deben estar frente a las torres X, Y y Z, respectivamente, y la cuarta debe estar en el centro de la cama.

G31: Informar el estado actual de la sonda

Cuando se usa por sí solo, esto informa si la sonda Z se activa o da el valor de la sonda Z en algunas unidades si la sonda genera valores de altura. Si se combina con un campo Z y P (ejemplo: G31 P312 Z0.7), esto establecerá la altura Z en 0.7 mm cuando el valor de la sonda Z alcance 312 cuando se envíe un comando G28 Z0 (cero eje Z). Luego, la máquina se moverá otros -0.7 mm en Z para colocarse en Z = 0. Esto permite que las sondas de medición sin contacto se acerquen pero no toquen la cama, y ​​que se permita el espacio restante. Si la sonda es una sonda táctil y genera una señal simple de 0/1 apagado / encendido, entonces G31 Z0.7 le dirá a la máquina RepRap que está a una altura de 0.7 mm cuando se activa la sonda.

En el firmware Duet-dc42, se pueden definir parámetros G31 separados para los tipos de sonda 0, 1/2 y 3 (los tipos de sonda 1 y 2 comparten el mismo conjunto de parámetros). Para especificar para qué sonda está configurando los parámetros, envíe un comando M558 para seleccionar el tipo de sonda antes de enviar el comando G31.

El firmware Duet-dc42 admite parámetros adicionales S (temperatura del lecho en ° C a la cual el parámetro Z especificado es correcto, el valor predeterminado es la temperatura actual del lecho) y C (coeficiente de temperatura del parámetro Z en mm / ° C, cero predeterminado). Esto es útil para sondas ultrasónicas y otras que se ven afectadas por la temperatura.

Las versiones de firmware Duet-dc42 1.00b en adelante también permiten especificar los desplazamientos X e Y de la sonda Z en relación con el cabezal de impresión (es decir, la posición cuando se selecciona la herramienta vacía), agregando los parámetros X e Y. Esto le permite calcule las coordenadas de su sonda M557 en función de la geometría de la cama, sin tener que corregirlas para el desplazamiento de la sonda Z X e Y. También proporciona una compensación de cama más precisa.

G32: sondee Z y calcule el plano Z

Sondea el lecho en 3 o más puntos predefinidos (ver M557) y actualiza la matriz de transformación para la compensación de nivelación del lecho. Las versiones posteriores de RepRapFirmware ejecutan el archivo de macro bed.g si está presente en lugar de usar las coordenadas M557.

Comandos G sin búfer

Los siguientes comandos no están almacenados. Cuando se recibe uno, se almacena, pero no se reconoce al host hasta que se agota el búfer y luego se ejecuta el comando. Por lo tanto, el host hará una pausa en uno de estos comandos hasta que se haya completado. Las pausas breves entre estos comandos y cualquiera que pueda seguirlos no afectan el rendimiento de la máquina.

 

G4: morar

Ejemplo: G4 P200

En este caso, siéntate sin hacer nada durante 200 milisegundos. Durante los retrasos, el estado de la máquina (por ejemplo, las temperaturas de sus extrusoras) aún se conservará y controlará.

En Marlin y Smoothie, el parámetro «S» esperará unos segundos, mientras que el parámetro «P» esperará milisegundos. «G4 S2» y «G4 P2000» son equivalentes.

G10: Desplazamiento de herramienta


Ejemplo: G10 P3 X17.8 Y-19.3 Z0.0 R140 S205

Esto establece el desplazamiento de la herramienta (o en implementaciones anteriores de extrusión de cabeza) 3 (desde el P3) a los valores X e Y especificados. También puede poner un valor Z distinto de cero, pero esto generalmente es una mala idea a menos que las herramientas sean cargadas y descargadas por algún tipo de cambiador de herramientas. Cuando todas las herramientas están en la máquina a la vez, todas deben configurarse a la misma altura Z.

Recuerde que cualquier parámetro que no especifique se establecerá automáticamente en el último valor para ese parámetro. Eso generalmente significa que desea establecer explícitamente Z0.0.

El valor R es la temperatura de espera en o C que se utilizará para la herramienta, y el valor S es su temperatura de funcionamiento. Si no desea que la herramienta tenga una temperatura diferente cuando no esté en uso, configure ambos valores de la misma manera. Vea el código T (herramienta de selección) a continuación. En herramientas con múltiples calentadores, las temperaturas para todos ellos se especifican así: R100.0: 90.0: 20.0 S185.0: 200.0: 150.0.

El estándar NIST G-code menciona un parámetro L adicional, que se ignora.

Este comando está sujeto a discusión .

Tenga en cuenta que Marlin y Smoothie usan G10 / G11 para ejecutar un movimiento de retracción / no retracción. La versión RepRapPro de Marlin admite G10 para el desplazamiento de la herramienta.

G20: Establecer unidades en pulgadas

Ejemplo: G20

Las unidades de ahora en adelante están en pulgadas.

G21: establecer unidades en milímetros

Ejemplo: G21

Las unidades de ahora en adelante están en milímetros. (Este es el valor predeterminado de RepRap).

G90: Establecer en posicionamiento absoluto

Ejemplo: G90

Todas las coordenadas a partir de ahora son absolutas en relación con el origen de la máquina. (Este es el valor predeterminado de RepRap).

G91: Establecer en posicionamiento relativo

Ejemplo: G91

Todas las coordenadas a partir de ahora son relativas a la última posición.

G92: Establecer posición

Ejemplo: G92 X10 E90

Permite la programación del punto cero absoluto, restableciendo la posición actual a los valores especificados. Esto establecería la coordenada X de la máquina en 10 y la coordenada de extrusión en 90. No se producirá movimiento físico.

Un G92 sin coordenadas restablecerá todos los ejes a cero.

Comandos M y T sin búfer

M0: parada

Ejemplo: M0

La máquina RepRap finaliza los movimientos que quedan en su búfer, luego se apaga. Todos los motores y calentadores están apagados. Se puede volver a iniciar presionando el botón de reinicio en el microcontrolador maestro. Ver también M1, M112.

M1: sueño

Ejemplo: M1

La máquina RepRap finaliza los movimientos que quedan en su búfer, luego se apaga. Todos los motores y calentadores están apagados. Todavía se pueden enviar códigos G y M, el primero de los cuales lo despertará nuevamente. Ver también M0, M112.

M3: Husillo encendido, en sentido horario (CNC específico)

Ejemplo: M3 S4000

El husillo se enciende con una velocidad de 4000 RPM.

M4: Husillo encendido, en sentido antihorario (CNC específico)

Ejemplo: M4 S4000

El husillo se enciende con una velocidad de 4000 RPM.

M5: Husillo apagado (CNC específico)

Ejemplo: M5

El husillo está apagado.

M7: Refrigerante de niebla activado (CNC específico)

Ejemplo: M7

El refrigerante de niebla está encendido (si está disponible)

M8: Refrigerante de inundación activado (específico de CNC)

Ejemplo: M8

El refrigerante de inundación está encendido (si está disponible)

M9: Refrigerante apagado (específico del CNC)

Ejemplo: M9

Todos los sistemas de refrigerante están apagados.

M10: Vacío activado (específico de CNC)

Ejemplo: M10

Sistema de aspiración de recolección de polvo encendido.

M11: Vacío desactivado (CNC específico)

Ejemplo: M11

Sistema de aspiración de recolección de polvo apagado.

M17: activar / alimentar todos los motores paso a paso

Ejemplo: M17

M18: deshabilitar todos los motores paso a paso

Ejemplo: M18

Inhabilita los motores paso a paso y permite que el eje se mueva ‘libremente’.

M20: Lista de tarjeta SD

Ejemplo: M20

Todos los archivos en la carpeta raíz de la tarjeta SD se enumeran en el puerto serie. Esto da como resultado una línea como:

ok Archivos: {SQUARE.G, SQCOM.G,}

La coma final es opcional. Tenga en cuenta que los nombres de los archivos se devuelven en mayúsculas, pero cuando se envían al comando M23 (a continuación) deben estar en minúsculas. Esto parece ser una función del software SD. Imagínate…

El firmware Duet-dc42 devuelve los nombres de archivo (largos) en el caso correcto. Si el parámetro S2 está presente, la lista de archivos se devuelve en formato JSON, como una matriz única llamada «archivos». El parámetro opcional P especifica el directorio a listar, por defecto en el directorio / gcodes.

M21: inicializar tarjeta SD

Ejemplo: M21

La tarjeta SD se inicializa. Si se carga una tarjeta SD cuando la máquina está encendida, esto sucederá de manera predeterminada. La tarjeta SD debe inicializarse para que funcionen las otras funciones SD.

M22: liberar tarjeta SD

Ejemplo: M22

La tarjeta SD se libera y se puede extraer físicamente.

M23: seleccione el archivo SD

Ejemplo: M23 filename.gco

El archivo especificado como filename.gco (se admite la convención de nomenclatura 8.3) está listo para imprimir.

El firmware Duet-dc42 admite nombres de archivo largos y formato 8.3.

M24: Iniciar / reanudar impresión SD

Ejemplo: M24

La máquina imprime desde el archivo seleccionado con el comando M23.

M25: Pausa impresión SD

Ejemplo: M25

La máquina detiene la impresión en la posición actual dentro del archivo seleccionado con el comando M23.

M26: establecer la posición SD

Ejemplo: M26

Establecer la posición SD en bytes (M26 S12345).

M27: informe del estado de impresión SD

Ejemplo: M27

Informe el estado de impresión SD.

M28: Comience a escribir en la tarjeta SD

Ejemplo: M28 filename.gco

El archivo especificado por filename.gco se crea (o se sobrescribe si existe) en la tarjeta SD y todos los comandos posteriores enviados a la máquina se escriben en ese archivo.

M29: deja de escribir en la tarjeta SD

Ejemplo: M29 filename.gco

El archivo abierto por el comando M28 se cierra y todos los comandos posteriores enviados a la máquina se ejecutan normalmente.

M30: eliminar un archivo en la tarjeta SD

Ejemplo: M30 filename.gco

filename.gco se elimina.

M31: tiempo de salida desde el último inicio de M109 o tarjeta SD a serie

Ejemplo: M31

La respuesta se ve así:

 eco: 54 min, 38 seg

M32: seleccione el archivo e inicie la impresión SD

(Se puede usar al imprimir desde la tarjeta SD)

Ejemplo: M32 filename.gco

tba disponible en marlin (14/6/2014)

M33

Usado por algunas variantes del firmware Marlin. Propósito desconocido.

M34

Usado por algunas variantes del firmware Marlin. Propósito desconocido.

M36: devolver información del archivo

Ejemplo: M36 filename.gco

Devuelve información para el archivo de tarjeta SD especificado en formato JSON. Una respuesta de muestra es:

{«err»: 0, «size»: 457574, «height»: 4.00, «layerHeight»: 0.25, «filament»: [6556.3], «generateBy»: «Slic3r 1.1.7 el 09/11/2014 a las 17 : 11: 32 «}

El campo «err» es cero si tiene éxito, distinto de cero si no se encontró el archivo o se produjo un error al procesarlo. El campo «tamaño» siempre debe estar presente si la operación fue exitosa. La presencia o ausencia de otros campos depende de si se pueden encontrar los valores correspondientes leyendo el archivo. El campo «filamento» es una matriz de las longitudes de filamento requeridas de cada carrete. El tamaño está en bytes, todos los demás valores están en mm. Los campos pueden aparecer en cualquier orden y pueden estar presentes campos adicionales.

M37: Modo Simulación

 

Usado para cambiar entre el modo de impresión y el modo de simulación. El modo de simulación permite la electrónica calcular un tiempo de impresión preciso, teniendo en cuenta las velocidades máximas, aceleraciones, etc., que están configuradas.

M37 S1 entra en modo de simulación. Ningún código G o M funcionara, pero el tiempo que llevarían a ser ejecutados si serán tomados en cuenta para el cálculo final.

M37 S0 Venta de modo simulación.

M37 sin el parámetro S devuelve el tiempo que ha llevado a calcular la simulación, desde que se introdujo el comando M37 S1, hasta el momento actual (si el modo de simulación aún permanece en ejecución) o el punto en el cual la simulación ya acabó (Si el modo simulación ya no está activo).

M40: expulsar

Si su máquina RepRap puede expulsar las partes que ha construido fuera de la cama, este comando ejecuta el ciclo de expulsión. Esto generalmente implica enfriar la cama y luego realizar una secuencia de movimientos que eliminan las partes impresas. Las posiciones X, Y y Z de la máquina al final de este ciclo no están definidas (aunque se pueden encontrar utilizando el comando M114, qv).

Ver también M240 y M241 a continuación.

M41: lazo

Ejemplo: M41

Si la máquina RepRap estaba creando un archivo desde su propia memoria, como una tarjeta SD local (a diferencia de un archivo que se le transmitía desde una computadora host), esto vuelve al principio del archivo y lo ejecuta nuevamente. Entonces, por ejemplo, si su RepRap es capaz de expulsar partes de su plataforma de construcción, puede configurarlo para que se imprima en un bucle y se ejecutará y se ejecutará. Úselo con precaución: las únicas cosas que lo detendrán son:

  1. Cuando presionas el botón de reinicio,
  2. Cuando se agota el material de construcción (si su RepRap está configurado para detectar esto), y
  3. Cuando hay un error (como una falla del calentador).

M42: Detener en material agotado / Cambiar pin de E / S

M42 en ???

Ejemplo: M42

Si su RepRap puede detectar cuándo se agota su material, esto decide el comportamiento cuando eso sucede. Los ejes X e Y se ponen a cero (pero no Z), y luego la máquina apaga todos los motores y calentadores. Debe presionar Restablecer para reactivar la máquina. En otras palabras, se estaciona y luego ejecuta un comando M0 (qv).

M42 en Marlin / Sprinter

Ejemplo: M42 P7 S255

M42 conmuta un pin de E / S de uso general. Use M42 Px Sy para establecer el pin x en el valor y, al omitir Px se usará el LEDPIN.

M42 en teaCup

Innecesario. Los dispositivos de uso general se manejan como un calentador, ver M104 .

M43: espera sobre material agotado

Ejemplo: M43

Si su RepRap puede detectar cuándo se agota su material, esto decide el comportamiento cuando eso sucede. Los ejes X e Y se ponen a cero (pero no Z), y luego la máquina apaga todos los motores y calentadores, excepto el lecho calentado, cuya temperatura se mantiene. La máquina seguirá respondiendo a los comandos de código G y M en este estado.

M80: ATX encendido

Ejemplo: M80

Enciende la fuente de alimentación ATX del modo de espera al modo completamente operativo. Sin operación en electrónica sin modo de espera.

Nota : algunos firmwares, como Teacup , manejan el encendido / apagado automáticamente, por lo que esto es redundante allí. Consulte también el cableado de RAMPAS para activar / desactivar ATX

M81: apagado ATX

Ejemplo: M81

Apaga la fuente de alimentación ATX. Contraparte de M80.

M82: establecer extrusora en modo absoluto

Ejemplo: M82

hace que el extrusor interprete la extrusión como posiciones absolutas.

Este es el valor predeterminado en repetidor.

M83: Establecer extrusora en modo relativo

Ejemplo: M83

hace que el extrusor interprete los valores de extrusión como posiciones relativas.

M84: detener espera inactiva

Ejemplo: M84

Detenga la espera de ralentí en todos los ejes y extrusoras. En algunos casos, la espera inactiva provoca ruidos molestos, que se pueden detener desactivando la espera. Tenga en cuenta que al deshabilitar la espera inactiva durante la impresión, obtendrá problemas de calidad. Esto se recomienda solo entre o después de printjobs.

En Marlin, M84 también se puede usar para configurar o deshabilitar el tiempo de espera inactivo. Por ejemplo, «M84 S10» dejará inactivos los motores paso a paso después de 10 segundos de inactividad. «M84 S0» deshabilitará el tiempo de espera inactivo; los steppers permanecerán encendidos independientemente de la actividad.

M92: Establecer axis_steps_per_unit

Ejemplo: M92 X <newsteps> Sprinter y Marlin

Permite la programación de pasos por unidad de eje hasta que los componentes electrónicos se restablecen para el eje especificado. Muy útil para la calibración.

M98: Macro / Subprograma de llamadas

Ejemplo: M98 Pmymacro.g

Ejecuta la macro en el archivo mymacro.g. En los Códigos G convencionales para máquinas CNC, el parámetro P normalmente se refiere a un número de línea en el propio programa (P2000 ejecutaría la Macro comenzando en la línea O2000, por ejemplo). Para RepRap, que casi siempre tiene algún tipo de dispositivo de almacenamiento masivo incorporado, simplemente se refiere al nombre de un archivo GCode que se ejecuta mediante la llamada G98. Ese archivo GCode no necesita terminar con un M99 (retorno) ya que el final del archivo automáticamente produce un retorno. Por lo general, es una buena idea comenzar una macro con una instrucción M120 (Push) y finalizarla con una instrucción M121 (Pop), las llamadas macro qv generalmente no pueden anidarse o ser recursivas; es decir, no puede llamar a una macro desde una macro (aunque algunas implementaciones pueden permitir esto).

M99: Regresar de Macro / Subprograma

Ejemplo: M99

Vuelve de una llamada M98.

M98: Obtener axis_hysteresis_mm

En desuso: enfrentamientos con el código G estándar M98 anterior

Ejemplo: M98

Informe los valores de histéresis actuales en mm para todos los ejes.

Propuesto para Marlin

M99: Establecer axis_hysteresis_mm

En desuso: enfrentamientos con el código G estándar M99 anterior

Ejemplo: M99 X <mm> Y <mm> Z <mm> E <mm>

Permite la programación de la histéresis del eje. Poleas mecánicas, engranajes y roscas pueden tener histéresis cuando cambian de dirección. Es decir, una cierta cantidad de pasos ocurren antes de que ocurra el movimiento. Puede medir cuántos mm se pierden por histéresis y establecer sus valores con este comando. Cada vez que un eje cambia de dirección, se agregarán estos mm adicionales para compensar la histéresis.

Propuesto para Marlin

M101: Encienda el extrusor 1 (Adelante), Deshacer retracción

M101 en el firmware 

Si hay un extrusor de CC, enciéndalo. De lo contrario, deshaga la retracción del filamento, lo que significa que la extrusora está lista para la extrusión. Complemento a M103.

M101 en otros firmwares

Obsoleto. Con respecto a la retracción del filamento, ver M227, M228, M229.

M102: Encienda el extrusor 1 (reversa)

Obsoleto.

M103: apague todos los extrusores, retracción del extrusor

M103 en el firmware 

Si hay un extrusor de CC, apáguelo. De lo contrario, retraiga el filamento con la esperanza de evitar el babeo de la boquilla. Complemento a M101.

M103 en otros firmwares

Obsoleto. Con respecto a la retracción del extrusor, ver M227, M228, M229.

M104: Establecer la temperatura del extrusor

Ejemplo: M104 S190

Ajuste la temperatura del extrusor actual a 190 o C y regrese el control al host inmediatamente ( es decir, antes de que el extrusor haya alcanzado esa temperatura). El firmware Duet-dc42 también admite el parámetro T opcional (generado por slic3r) para especificar a qué herramienta se aplica el comando. Ver también M109.

Esto está en desuso porque las temperaturas deben establecerse utilizando los comandos G10 y T (qv).

 

M104 en el firmware de la taza de té

En el firmware de la taza de té, M104 se puede usar adicionalmente para manejar todos los dispositivos que usan un sensor de temperatura. Admite el parámetro P adicional, que es un índice basado en cero en la lista de sensores en config.h. Para dispositivos sin sensor de temperatura, consulte M106 .

Ejemplo: M104 P1 S100

Ajuste la temperatura del dispositivo conectado al segundo sensor de temperatura a 100 ° C.

M105: Obtenga la temperatura del extrusor

Ejemplo: M105

Solicite la temperatura del extrusor actual y la base de construcción en grados Celsius. Las temperaturas se devuelven a la computadora host. Por ejemplo, la línea enviada al host en respuesta a este comando se ve así:

ok T: 201 B: 117

La expansión / generalización de M105 se considerará utilizando el parámetro S1 como se indica en Pronterface I / O Monitor

En Repetier también puede agregar X0 para obtener valores sin procesar:

M105 X0
==> 11: 05: 48.910: T: 23.61 / 0 @: 0 T0: 23.61 / 0 @ 0: 0 RAW0: 3922 T1: 23.89 / 0 @ 1: 0 RAW1: 3920
Extensión Duet-dc42

El firmware Duet-dc42 devuelve una respuesta con formato JSON si se incluye el parámetro S2 o S3. Esto es utilizado por el panel de control de pantalla táctil. La respuesta comprende un único objeto JSON, sin anidamiento de objetos o matrices. Es similar al objeto devuelto por la solicitud de estado de la interfaz web, pero se omiten algunos campos. Aquí hay una respuesta de muestra cuando se usa S2:

{"estado": "I", "calentadores": [25.0,29.0,28.3], "activo": [- 273.1,0.0,0.0], "en espera": [- 273.1,0.0,0.0], "hstat" : [0,2,1], "pos": [- 11.00,0.00,0.00], "extr": [0.0,0.0], "sfactor": 100.00,
 "efactor": [100.00,100.00], "herramienta": 1, "sonda": "535", "fanRPM": 0, "referenciado": [0,0,0], "fracción_impresa": 0.572}

El significado de estos campos es:

estado: I = inactivo, P = imprimiendo desde la tarjeta SD, S = detenido (es decir, necesita un reinicio), C = ejecutando el archivo de configuración
calentadores: temperaturas actuales del calentador, numeradas según la máquina (normalmente, el calentador 0 es la cama)
activo: temperaturas activas de los calentadores
en espera: temperaturas en espera de los calentadores
hstat: estado de los calentadores, 0 = apagado, 1 = en espera, 2 = activo, 3 = falla
pos: las posiciones X, Y y Z del cabezal de impresión
extr: las posiciones de las extrusoras
sfactor: el factor de velocidad actual (ver comando M220)
efactor: los factores de extrusión actuales (ver comando M221)
herramienta: el número de herramienta seleccionado. Cero generalmente significa que no se seleccionó ninguna herramienta.
sonda: la lectura de la sonda Z
fanRPM: el ventilador de enfriamiento RPM
Homed: el estado de los ejes X, Y y Z (o torres en un delta). 0 = el eje no ha sido dirigido por lo que la posición no es confiable, 1 = el eje ha sido dirigido por lo que la posición es confiable.
fracción_impresa: la fracción del archivo que se está imprimiendo actualmente que se ha leído y procesado al menos parcialmente.

La respuesta cuando se usa S3 comprende estos campos más algunos adicionales que generalmente no cambian (por ejemplo, el nombre de la máquina y las longitudes de los ejes) y, por lo tanto, no es necesario buscarlos con tanta frecuencia. En particular, el nombre de la máquina se devuelve en la variable «myName».

Los campos pueden estar en cualquier orden en la respuesta. Otras implementaciones pueden omitir campos y / o agregar campos adicionales.

M106: ventilador encendido

Ejemplo: M106 S127

Encienda el ventilador de enfriamiento a media velocidad.

El parámetro obligatorio ‘S’ declara el valor PWM (0-255). M106 S0 apaga el ventilador. En algunas implementaciones, pwm se especifica mediante una fracción real: M106 S0.7.

M106 en firmware Duet

El firmware Duet-dc42 también admite un parámetro I opcional. Si este parámetro está presente y es mayor que cero, la salida del ventilador de enfriamiento se invierte. Esto hace que la salida del ventilador de enfriamiento sea adecuada para alimentar la entrada PWM de un ventilador de 4 cables a través de un diodo. Si el parámetro está presente y es cero o negativo, la salida no se invierte. Si el parámetro no está presente, el estado invertido / no invertido permanece sin cambios. El valor predeterminado en el encendido no está invertido.

Si se pasa el parámetro ‘R’ cuando se utiliza el firmware Duet-zpl (0,96 g +), se establecerá el último valor de ventilador conocido. Si se pasa el parámetro ‘S’ junto con ‘R’, el firmware no restablecerá el último valor conocido del ventilador. Esto puede ser útil para los archivos de macro de cambio de herramienta.

M106 en firmware de TeaCup

Además de lo anterior, el firmware de Teacup utiliza M106 para controlar dispositivos generales. Admite el parámetro P adicional, que es un índice basado en cero en la lista de calentadores / dispositivos en config.h.

Ejemplo: M106 P2 S255

Encienda el dispositivo # 3 a toda velocidad / potencia.

Nota : Al encender un calentador equipado con sensor de temperatura con M106 y M104 al mismo tiempo, el control de temperatura anulará el valor dado en M106 rápidamente.

M107: ventilador apagado

Obsoleto. Utilice M106 S0 en su lugar.

M108: Establecer la velocidad del extrusor

Establece la velocidad del motor de la extrusora. (Desaprobado en el firmware actual, ver M113)

M109: Establecer la temperatura del extrusor y esperar

M109 en teaCup

Innecesario. Para imitar el comportamiento de Marlin, use M104 seguido de M116 .

M109 en Marlin, Sprinter (puerto ATmega), Duet

Ajuste la temperatura del calentador del extrusor en grados centígrados y espere a que se alcance esta temperatura.

Ejemplo: M109 S185

El firmware Duet-dc42 también admite el parámetro T opcional (generado por slic3r) para especificar a qué herramienta se refiere el comando (ver más abajo).

M109 en Sprinter (puerto 4pi)

Parámetros: S (opcional), establece el valor de temperatura objetivo. Si no se especifica, espera la temperatura establecida por M104 . R (opcional), establece el valor máximo del rango de temperatura objetivo.

Ejemplo: M109 S185 R240 // establece la temperatura del extrusor en 185 y espera que la temperatura esté entre 185 y 240.

Si tiene varias extrusoras, use el parámetro T o P para especificar qué extrusora desea configurar / esperar.

Otra forma de hacer esto es usar G10 .

M110: Establecer número de línea actual

Ejemplo: M110 N123

Establezca el número de línea actual en 123. Por lo tanto, la siguiente línea esperada después de este comando será 124.

M111: Establecer nivel de depuración

Ejemplo: M111 S6

Establezca el nivel de información de depuración transmitida al host en el nivel 6. El nivel es el OR de tres bits:

#define DEBUG_ECHO (1 << 0)
#define DEBUG_INFO (1 << 1)
#define DEBUG_ERRORS (1 << 2)

Por lo tanto, 6 significa enviar información y errores, pero no repetir los comandos. (Este es el valor predeterminado de RepRap).

Para el firmware que admite Ethernet e interfaces web, M111 S9 activará la información de depuración web sin cambiar ninguna otra configuración de depuración, y M111 S8 la desactivará. La depuración web generalmente significa que las solicitudes HTTP se reflejarán en la interfaz USB, al igual que las respuestas.

Ejemplo: M253

M112: parada de emergencia

Ejemplo: M112

Cualquier movimiento en progreso se termina inmediatamente, luego RepRap se cierra. Todos los motores y calentadores están apagados. Se puede volver a iniciar presionando el botón de reinicio en el microcontrolador maestro. Ver también M0 y M1.

M113: Establecer extrusor PWM

Ejemplo: M113

Configure el PWM para el extrusor seleccionado actualmente. Por sí solo, este comando configura RepRap para usar el potenciómetro incorporado en la placa del controlador del extrusor para configurar el PWM para la potencia de pasos del extrusor seleccionado actualmente. Con un campo S:

M113 S0.7

hace que el PWM se establezca en el valor S (70% en este caso). M113 S0 apaga el extrusor, hasta que se envía un comando M113 que no sea M113 S0.

M114: Obtener posición actual

Ejemplo: M114

Esto hace que la máquina RepRap informe sus coordenadas X, Y, Z y E actuales al host.

Por ejemplo, la máquina devuelve una cadena como:

ok C: X: 0.00 Y: 0.00 Z: 0.00 E: 0.00

En Marlin, los primeros 3 números son la posición del planificador. Las otras posiciones son las posiciones de la función paso a paso. Esto ayuda a depurar un error de función paso a paso anterior.

X: 0.00 Y: 0.00 RZ: 0.00 LZ: 0.00 Cuenta X: 0.00 Y: 0.00 RZ: 41.02 LZ: 41.02

M115: Obtenga la versión de firmware y las capacidades

Ejemplo: M115

Solicite la versión de firmware y las capacidades del microcontrolador actual Los detalles se devuelven a la computadora host como clave: pares de valores separados por espacios y terminados con un salto de línea.

datos de muestra del firmware:

ok PROTOCOL_VERSION: 0.1 FIRMWARE_NAME: FiveD FIRMWARE_URL: http% 3A // reprap.org MACHINE_TYPE: Mendel EXTRUDER_COUNT: 1

Este código M115 se implementa de manera inconsistente y no se debe confiar en que exista o que se envíe correctamente en todos los casos. Una implementación inicial se comprometió a svn para el firmware FiveD Reprap el 11 de octubre de 2010. Actualmente se está discutiendo el trabajo para definir más formalmente las versiones de protocolo (octubre de 2010). 

Ejemplo: M116

Espere a que todas las temperaturas y otras variables que cambian lentamente lleguen a sus valores establecidos. Ver también M109.

La versión de firmware Duet-dc42 0.78c y posterior admite un parámetro P opcional, que se utiliza para especificar un número de herramienta. Si este parámetro está presente, entonces el sistema solo espera que las temperaturas asociadas con esa herramienta lleguen a sus valores establecidos. Esto es útil durante los cambios de herramienta, para esperar a que la nueva herramienta se caliente sin necesariamente esperar que la anterior se enfríe por completo.

M117: Obtener posición cero

Ejemplo: M117

Esto hace que la máquina RepRap informe las coordenadas X, Y, Z y E en pasos no mm al host que encontró cuando tocó por última vez el cero se detiene para esos ejes. Es decir, cuando pone a cero X, se registra la coordenada x de la máquina cuando llega al tope final de X. Este valor debería ser 0, por supuesto. Pero si la máquina se ha desviado (por ejemplo, bajando pasos), entonces no será así. Este comando le permite medir y diagnosticar tales problemas. (E se incluye para completar. Normalmente no tiene un tope final).

M117 en Marlin, Smoothie y Duet-dc42: Mostrar mensaje

Ejemplo: M117 Hola Mundo

Esto hace que el mensaje dado se muestre en la línea de estado en una pantalla LCD adjunta. El comando anterior mostrará Hello World.

M118: Negociar características

Ejemplo: M118 P42

Este código M es para pruebas futuras. NO firmware o hostware soporta esto en este momento. Se utiliza junto con la palabra clave FEATURES de M115.

 

M119: Obtener estado de fin de carrera

Ejemplo: M119

Devuelve el estado actual de las paradas finales X, Y, Z configuradas. Tiene en cuenta cualquier configuración de ‘tope final invertido’, por lo que uno puede confirmar que la máquina está interpretando los topes finales correctamente.

M120: empujar

Empuje el estado de la máquina RepRap en una pila. Exactamente qué variables se empujan depende de la implementación (al igual que la profundidad de la pila, una profundidad típica podría ser 5). Sin embargo, un mínimo razonable podría ser

  1. Avance actual, y
  2. Si los movimientos (y la extrusión por separado) son relativos o absolutos

M121: Pop

Recupere el último estado empujado a la pila.

M122: diagnosticar

El envío de un M122 hace que RepRap transmita información de diagnóstico, por ejemplo, a través de un enlace serie USB.

M123: valor del tacómetro

El envío de un M123 hace que RepRap transmita valores de tacómetro de filamento de todas las extrusoras.

M124: parada inmediata del motor

Inmediatamente detiene todos los motores.

M126: válvula abierta

Ejemplo: M126 P500

Abra la válvula del extrusor (si tiene una) y espere 500 milisegundos para que lo haga.

M127: Válvula de cierre

Ejemplo: M127 P400

Cierre la válvula del extrusor (si tiene una) y espere 400 milisegundos para que lo haga.

M128: Extrusora Presión PWM

Ejemplo: M128 S255

Valor PWM para controlar la presión interna del extrusor. S255 es presión total.

M129: presión del extrusor desactivada

Ejemplo: M129 P100

Además de establecer la presión del extrusor en 0, puede desactivar la presión por completo. P400 esperará 100 ms para hacerlo.

M130: establecer el valor PID P

Ejemplo: M130 P 0 S 8.0 # Establece el factor 0 P del calentador en 8.0

Teacup puede controlar varios calentadores con controles PID independientes. Para el valor predeterminado que se muestra en https://github.com/Traumflug/Teacup_Firmware/blob/master/config.default.h , el calentador 0 es el extrusor (P0) y el calentador 1 es la cama (P1).

Las unidades proporcionales PID de la taza de té están en pwm / 255 cuentas por trimestre C, por lo que para convertir de cuentas / C, dividiría por 4. Por el contrario, para convertir de cuenta / qC a cuenta / C, multiplique por 4. En el ejemplo anterior, S = 8 representa un Kp = 8 * 4 = 32 cuentas / C.

M131: establecer el valor PID I

Ejemplo: M131 P 1 S 0.5 # Establece el factor 1 del calentador en 0.5

Las unidades integrales PID de Teacup están en pwm / 255 cuentas por (cuarto C * cuarto de segundo), por lo que para convertir de cuentas / qCqs, dividirías por 16. Por el contrario, para convertir de cuentas / qCqs a cuentas / Cs, multiplica por 16. En el ejemplo anterior, S = 0.5 representa un Ki = 0.5 * 16 = 8 cuentas / Cs.

M132: establecer el valor PID D

Ejemplo: M132 P 0 S 24 # Establece el factor 0 D del calentador en 24.0

Las unidades derivadas PID de Teacup están en pwm / 255 cuentas por (cuarto de grado por 2 segundos), por lo que para convertir de cuentas / C, dividirías por 4. Por el contrario, para convertir de cuenta / qC a cuenta / C, multiplica por 8. En el ejemplo anterior, S = 24 representa un Kd = 24 * 8 = 194 cuentas / (C / s).

M133: Establecer valor límite de PID I

Ejemplo: M133 P 1 S 264 # Establece el valor límite del calentador 1 I en 264

Las unidades de límite integral PID de la taza de té están en cuartos-C * cuartos de segundos, por lo que para convertir de Cs, multiplicaría por 16. Por el contrario, para convertir de qC * qs a C * s, divida por 16. En el ejemplo anterior, S = 264 representa un límite integral de 16.5 C * s.

M134: Escribir valores PID en EEPROM

Ejemplo: M134

M135: Establecer intervalo de muestra PID

Ejemplo: M135 S300

Configure el PID para medir temperaturas y calcule la potencia para enviar a los calentadores cada 300 ms.

M136: Imprimir configuración PID al host

Ejemplo: M136 P1 # calentador de impresión 0 parámetros PID para alojar

M140: temperatura del lecho (rápido)

Ejemplo: M140 S55

Ajuste la temperatura del lecho de construcción a 55 o C y regrese el control al host inmediatamente ( es decir, antes de que el lecho haya alcanzado esa temperatura). Hay un campo R opcional que establece la temperatura de espera de la cama: M140 S65 R40.

M141: Temperatura de la cámara (rápida)

Ejemplo: M141 S30

Ajuste la temperatura de la cámara a 30 o C y regrese el control al host inmediatamente ( es decir, antes de que la cámara haya alcanzado esa temperatura).

M142: Presión de mantenimiento

Ejemplo: M142 S1

Ajuste la presión de mantenimiento de la cama a 1 bar.

La presión de mantenimiento está en bar. Para hardware que solo tiene retención de encendido / apagado, cuando la presión de retención es cero, apague la retención, cuando la presión de retención sea mayor que cero, encienda la retención.

M143: temperatura máxima de final caliente

Ejemplo: M143 S275

Ajuste la temperatura máxima del hot-end a 275C

Cuando la temperatura del hot-end excede este valor, tome contramedidas, por ejemplo, una parada de emergencia. Esto es para evitar daños por calor.

M144: espera junto a tu cama

Ejemplo: M144

Cambie la cama a su temperatura de espera. M140 lo devuelve a su temperatura activa; no es necesario ningún argumento para ese uso de M140.

M160: número de materiales mezclados

Ejemplo: M160 S4

Este comando ha sido reemplazado por el comando de definición de herramienta M563 (ver más abajo).

Establezca el número de materiales, N, que el extrusor actual puede manejar con el número especificado. El valor predeterminado es 1.

Cuando N> = 2, entonces el campo E que controla la extrusión requiere N valores separados por dos puntos «:» después de esto así:

M160 S4
G1 X90.6 Y13.8 E2.24: 2.24: 2.24: 15.89
G1 X70.6 E0: 0: 0: 42.4
G1 E42.4: 0: 0: 0

La segunda línea se mueve directamente al punto (90.6, 13.8) extruyendo un total de 22.4 mm de filamento. La relación de mezcla para el movimiento es 0.1: 0.1: 0.1: 0.7.

La tercera línea retrocede 20 mm en X extruyendo 42,4 mm de filamento.

La cuarta línea no tiene efecto físico.

M190: Espere a que la temperatura de la cama alcance la temperatura objetivo

Ejemplo: M190 S60

Esto esperará hasta que la temperatura de la cama alcance los 60 grados, imprimiendo la temperatura del extremo caliente y la cama cada segundo.

M200: Establecer el diámetro del filamento / Obtener estado final


Sin parámetros, se carga la grilla predeterminada, y con la extensión especificada se intenta cargar la grilla especificada. Si no está disponible no modificará la cuadrícula actual. Si Z se guardó con el archivo de cuadrícula, cargará la Z guardada con la cuadrícula.

M200 Dm.mmm establece el diámetro del filamento en m.mmm milímetros. Se utiliza con la ‘calibración volumétrica’ y el código G generado para un filamento ideal de 1.128 mm de diámetro, que tiene un volumen de 1 mm ^ 3 por milímetro. La intención es poder generar un código g independiente del filamento.

 

 

 

M201: establecer la aceleración máxima de impresión

Ejemplo: M201 X1000 Y1000 Z100 E2000

Establece la aceleración que los ejes pueden hacer en unidades / segundo ^ 2 para los movimientos de impresión. Para mantener la coherencia con el resto del movimiento del Código G, esto debería estar en unidades / (minuto ^ 2), pero eso da números realmente tontos y uno puede perderse en todos los ceros. Entonces para esto usamos segundos.

M202: establecer la aceleración máxima de desplazamiento

en unidades / s ^ 2 para movimientos de desplazamiento (M202 X1000 Y1000) ¡¡Sin usar en Marlin !!

M203: establecer la velocidad de avance máxima

Ejemplo: M203 X6000 Y6000 Z300 E10000

Establece los avances máximos que su máquina puede hacer en mm / min.

M204: establecer la aceleración predeterminada

S movimientos normales T el filamento solo se mueve (M204 S3000 T7000) im mm / seg ^ 2 también establece el tiempo mínimo del segmento en ms (B20000) para evitar la falta de amortiguación y la velocidad mínima de avance M20

M205: configuración avanzada

velocidad mínima de desplazamiento S = durante la impresión T = solo desplazamiento, B = tiempo mínimo de segmento X = máximo tirón xy, Z = máximo tirón Z, E = máximo tirón E

M206:

M206 Marlin – Establecer desplazamiento de inicio

Ejemplo: M206 X10.0 Y10.0 Z-0.4

Los valores especificados se agregan a la posición final cuando se hace referencia a los ejes. Lo mismo se puede lograr con un G92 justo después del recorrido de referencia (G28, G161).

Con el firmware Marlin, este valor se puede guardar en EEPROM con el comando M500.

Un comando similar es G10, la alineación de estos dos está sujeta a discusión .

Con Marlin 1.0.0 RC2, un valor negativo para z eleva (!) Su cabezal de impresión.

Repetidor M206 – Establecer el valor de eeprom

M206 T [tipo] P [pos] [Sint (largo) [Xfloat] Establecer el valor de eeprom

Ejemplo: M206 T3 P39 X19.9

Establece Jerk en 19.9

M207: calibre el eje z detectando la longitud máxima z

Ejemplo: M207

Después de colocar la punta de la boquilla en la posición que espera que se considere Z = 0, emita este comando para calibrar el eje Z. Realizará una rutina de referencia del eje az y calculará la distancia recorrida en este proceso. El resultado se almacena en EEPROM como z_max_length. Para utilizar este método de calibración, la máquina debe estar utilizando un tope Z MAX.

Este procedimiento suele ser más confiable que los ajustes mecánicos de un tope Z MIN.

NOTA: Marlin y Smoothie definen M207 como «establecer la longitud de retracción S [mm positivo] F [avance mm / min] Z [elevación / salto adicional], permanece en mm independientemente de la configuración de M200»

M208: Establecer el recorrido máximo del eje

Ejemplo: M208 X250 Y210 Z180

Los valores especificados establecen los límites del software para el desplazamiento del eje en la dirección positiva.

 

Con el firmware Duet-dc42, en una impresora cartesiana también puede usar este comando para especificar límites de software para el desplazamiento del eje en la dirección negativa, agregando el parámetro S1. Los límites de eje que establece también son las posiciones asumidas cuando se activa un tope final.

NOTA: Marlin / Smoothie define M208 como «recuperación de conjunto = longitud de retracción S [mm positivo excedente al M207 S *] F [avance mm / seg]»

M209: habilitar retracción automática

Ejemplo: M209 S1

Este valor booleano S 1 = verdadero o 0 = falso permite la detección de retracción automática si la rebanadora no era compatible con G10 / 11: cada movimiento normal de solo extrusión se clasificará como retracción según la dirección.

M210: Establecer velocidades de avance de referencia

Ejemplo: M210 X1000 Y1500

Establezca los avances utilizados para el retorno a los valores especificados en mm por minuto.

M211: Deshabilitar / Habilitar paradas finales de software

El valor booleano S 1 = habilitar o 0 = deshabilitar controla el estado del extremo del software.

El valor booleano X, Y o Z 1 = tope final máximo o 0 = tope final mínimo selecciona el tope final que se controla.

Ejemplo: M211 X1 Y1 Z1 S0

Deshabilita los extremos de X, Y, Z max

Ejemplo: M211 X0 S1

Habilita la parada final de X min.

Ejemplo: M211

Imprime el estado actual de las paradas finales de software.

M220: Establecer porcentaje de anulación del factor de velocidad

Ejemplo: M220 S80

S <factor en porcentaje> – establece el porcentaje de anulación del factor de velocidad

M221: Establecer porcentaje de anulación del factor de extrusión

Ejemplo: M221 S70

S <factor en porcentaje> - establece el porcentaje de anulación del factor de extrusión

M226: Pausa iniciada por Gcode

Ejemplo: M226

Inicia una pausa de la misma manera que si se presiona el botón de pausa. Es decir, la ejecución del programa se detiene y la impresora espera la interacción del usuario. Esto coincide con el comportamiento de M1 en el estándar NIST RS274NGC G-code y M0 en el firmware Marlin.

M227: Activar inversión automática y cebado

Ejemplo: M227 P1600 S1600

P y S son pasos.

«Invertir y cebar» significa que el filamento del extrusor se retrae cierta distancia cuando no está en uso y se empuja hacia adelante la misma cantidad antes de volver a usarlo. Esto ayudará a evitar el babeo de la boquilla del extrusor. El firmware de Teacup implementa esto con M101 / M103.

M228: Deshabilitar reversa automática y cebado

Ejemplo: M228

Ver también M227.

M229: Habilitar inversión automática y cebado

Ejemplo: M229 P1.0 S1.0

P y S son rotaciones de tornillo extrusor. Ver también M227.

M230: Deshabilitar / Habilitar espera para cambio de temperatura

Ejemplo: M230 S1

S1 Desactivar espera para cambio de temperatura S0 Activar espera para cambio de temperatura

M240: arranque del motor de la cinta transportadora / eco apagado

Ejemplo: M240

La cinta transportadora permite comenzar la producción en masa de una pieza con un reprap.

El eco puede controlarse en algunos firmwares con M111

M241: Detener el motor de la cinta transportadora / eco activado

Ejemplo: M241

El eco puede controlarse en algunos firmwares con M111

M245: Iniciar enfriador

Ejemplo: M245

Se utiliza para enfriar piezas / calentar el lecho después de la impresión para quitar fácilmente las piezas después de imprimir

M246: detener el refrigerador

Ejemplo: M246

M251: Mida los pasos Z desde la parada de referencia (impresoras Delta)

M251 S0 – Restablecer, S1 – Imprimir, S2 – Almacenar en longitud Z (también EEPROM si está habilitado)

(Esta es una característica única de Repetier-Firmware)

M280: establecer la posición del servo

(Marlin, Repetidor M340 )

M280 – establece la posición del servo absoluta. P: índice de servo, S: ángulo o microsegundos (Marlin)

M300: reproducir sonido de pitido

Uso: M300 S <frecuencia Hz> P <duración ms>

Ejemplo: M300 S300 P1000

Reproduzca un pitido, úselo para notificar eventos importantes como el final de la impresión.  También es compatible con el firmware duet-dc42 a través de la sonda en el panel de control de la pantalla táctil adicional.

M301: establecer parámetros PID

   Ejemplo: M301 P1 I2 D3; Marlin (solo extremo caliente; ver M304 para PID de cama)
   Ejemplo: M301 P1 I2 D3 C5 H1 B20 W127; RepRapFirmware
   Ejemplo: M301 P1 I2 D3 T0.2 H1 B20 W127 S0.8; Duet-dc42
   Ejemplo: M301 S0 P30 I10 D10; Smoothie (S0 es 0 para el hotend, y 1 para la cama, pueden aplicarse otros números a su configuración, dependiendo del orden en que declare los módulos de control de temperatura)

Establece valores proporcionales, integrales y derivados para hot end. El valor C se refiere a una velocidad de extrusión. El valor T es el PWM adicional aproximado (en una escala de 0 a 255) necesario para mantener cada temperatura adicional de 1C, que se usa para preajustar el acumulador I cuando se cambia completamente el encendido / apagado del calentador a PID. H es el número del calentador, predeterminado 1 (es decir, el primer calentador del extrusor).

El firmware Duet-dc42 interpreta un término P negativo como indicativo de que se debe usar el control de bolsa en lugar de PID (no se recomienda para el extremo caliente, pero está bien para H0, que es el calentador de la cama). El factor S está diseñado para permitir que se realice una corrección por un cambio en la potencia del calentador y / o el voltaje de la fuente de alimentación sin tener que cambiar todos los demás parámetros. Por ejemplo, un factor S de 0.8 significa que la salida final del controlador PID debe escalarse a 0.8 veces el valor estándar, lo que compensaría un calentador que es un 25% más potente que el estándar o un voltaje de suministro de 12.5 % más alto que el estándar.

 

Implementación alternativa

Ejemplo: M301 W125

Consulte M130, M131, M132, M133 para ver los códigos de Teacup para configurar los parámetros PID.

M302: permitir extrusiones en frío

Esto le dice a la impresora que permita el movimiento del motor del extrusor, cuando el hotend no está a la temperatura de impresión

Ejemplo: M302

Cuando se utilizan los firmwares Duet-zpl o Duet-dc42, ejecutar M302 solo informará el estado actual de extrusión en frío. Para permitir o denegar extrusiones / retracciones en frío, ejecute «M302 P1» o «M302 P0».

M303: ejecutar el ajuste PID

La sintonización de PID se refiere a un algoritmo de control utilizado en algunas repeticiones para ajustar el comportamiento de calentamiento para los extremos calientes y las camas calentadas. Este comando genera valores proporcionales (Kp), integrales (Ki) y derivados (Kd) para el hotend o bed (E-1). Envíe el código apropiado y espere a que la salida actualice el firmware.

Uso final caliente:

M303 S <temperatura> C <ciclos>

Uso de la cama:

M303 E-1 C <ciclos> S <temperatura>

Ejemplo:

M303 C8 S175

La sintaxis de Smoothie, donde E0 es el primer módulo de control de temperatura (generalmente el extremo caliente) y E1 es el segundo módulo de control de temperatura (generalmente la cama):

M303 E0 S190

M304: Establecer parámetros PID – Cama

   Ejemplo: M304 P1 I2 D3; establecer kP = 3, kI = 2, kD = 3
   Ejemplo: M301 P1 I2 D3 T0.7 H0 B20 W127; Duet-dc42 firmware
   Ejemplo: M304; Parámetros de informe

Establece valores proporcionales, integrales y derivados para la cama. El firmware Duet-dc42 interpreta un término P negativo como indicativo de que se debe usar el control de la bolsa en lugar del PID. En el firmware Duet-dc42, este comando es idéntico al M301, excepto que el parámetro H (número de calentador) está predeterminado en cero.

 

M305: Establecer parámetros de termistor y ADC


Establece los parámetros para la medición de temperatura. Compatible con la versión RepRapPro de Marlin, RepRapFirmware de 0.78c y firmware Duet-dc42.

Ejemplo: M305 P1 T100000 R1000 B4200

Esto le dice al firmware que para el calentador 1 (parámetro P: 0 = lecho calentado, 1 = primer extrusor) la resistencia del termistor 25C (parámetro T) es 100Kohms, la resistencia de la serie del termistor (parámetro R) es 1Kohms, el termistor beta (parámetro B ) es 4200. Todos los parámetros que no sean P son opcionales. Si solo se proporciona el parámetro P, se muestran los valores existentes.

Además, el firmware Duet-dc42 admite una funcionalidad de corrección ADC y una función de selección de termistor.

Ejemplo: M305 P1 T100000 R1000 B4200 H14 L-11 X2

Aquí la corrección de ADC de extremo alto (parámetro H) es 14, la corrección de ADC de extremo bajo (parámetro L) es -11 y la entrada del termistor n. ° 2 se usa para medir la temperatura del calentador n. ° 1.

M306: establecer el desplazamiento inicial calculado a partir de la posición del cabezal de herramienta

Ejemplo: M306 Z0

Los valores especificados se agregan a la posición final de parada calculada cuando se hace referencia a los ejes. El valor calculado se deriva de la distancia del cabezal de la herramienta desde el punto cero del eje actual.

El usuario normalmente colocaría el cabezal de la herramienta en el punto cero del eje y emitiría el comando M306.

Este valor se puede guardar en EEPROM con el comando M500 (como valor M206).

Implementado en Smoothieware

M320: Activar nivel automático (repetidor)

(Solo repetidor)

M321: Desactivar nivel automático (repetidor)

(Solo repetidor)

M322: restablecer matriz de nivel automático

Ejemplo: M322 S1

El parámetro S1 es obligatorio.

(Solo repetidor)

M340: controla los servos

(Solo repetidor , Marlin ver M280 )

M340 P <servoId> S <pulseInUS> / ServoID = 0..3 pulseInUs = 500..2500

Los servos están controlados por un ancho de pulso normalmente entre 500 y 2500 con 1500 ms en la posición central. 0 apaga el servo.

M355: enciende / apaga las luces de la carcasa

Habilitar luces
M355 S1
Desactivar luces
M355 S0
Estado del informe
M355

Cada llamada o cambio en el menú LCD envía un cambio de estado para el software de alojamiento conectado como

Luces del estuche encendidas
La caja se apaga
Sin luces de caja

M360: informe de configuración de firmware

 

Este comando ayuda al software de alojamiento a detectar detalles de configuración, que el usuario necesitaría ingresar de otra manera. Debería reducir el tiempo de configuración considerablemente si es compatible.

Ejemplo
M360
Respuesta
Config: Baudrate: 250000
Config: InputBuffer: 127
Configuración: NumExtruder: 2
Configuración: MixingExtruder: 0
Configuración: HeatedBed: 0
Configuración: Tarjeta SD: 1
Configuración: Fan: 1
Configuración: LCD: 1
Configuración: SoftwarePowerSwitch: 1
Configuración: XHomeDir: -1
Config: YHomeDir: -1
Configuración: ZHomeDir: -1
Configuración: Soporte G10G11: 1
Config: SupportLocalFilamentchange: 1
Config: CaseLights: 0
Configuración: ZProbe: 1
Config: Autolevel: 0
Configuración: EEPROM: 1
Configuración: PrintlineCache: 24
Configuración: JerkXY: 30.00
Configuración: JerkZ: 0.30
Config: RetractionLength: 3.00
Config: RetractionLongLength: 13.00
Config: RetractionSpeed: 40.00
Configuración: RetractionZLift: 0.00
Config: RetractionUndoExtraLength: 0.00
Configuración: RetractionUndoExtraLongLength: 0.00
Config: RetractionUndoSpeed: 0.00
Configuración: XMin: 0.00
Configuración: YMin: 0.00
Configuración: ZMin: 0.00
Configuración: XMax: 250.00
Configuración: YMax: 150.00
Configuración: ZMax: 90.00
Configuración: X Tamaño: 250.00
Configuración: Y Tamaño: 150.00
Configuración: Z Tamaño: 90.00
Config: XPrintAccel: 250.00
Configuración: YPrintAccel: 250.00
Configuración: ZPrintAccel: 100.00
Configuración: XTravelAccel: 250.00
Configuración: YTravelAccel: 250.00
Configuración: ZTravelAccel: 100.00
Config: PrinterType: Cartesian
Configuración: MaxBedTemp: 120
Config: Extr.1: Jerk: 50.00
Config: Extr.1: MaxSpeed: 100.00
Config: Extr.1: Aceleración: 10000.00
Config: Extr.1: Diámetro: 0.00
Config: Extr.1: MaxTemp: 220
Config: Extr.2: Jerk: 50.00
Config: Extr.2: MaxSpeed: 100.00
Config: Extr.2: Aceleración: 10000.00
Config: Extr.2: Diámetro: 0.00
Config: Extr.2: MaxTemp: 220

Códigos de calibración SCARA (Morgan)

Para facilitar la calibración de Reprap Morgan, se utilizan los siguientes códigos M para configurar la máquina

M360: Mover a la posición Theta de 0 grados

Los brazos se mueven a una posición donde el brazo de dirección Theta es paralelo al borde superior de la plataforma. Luego, el usuario calibra la posición moviendo los brazos con los botones de desplazamiento en software como pronterface hasta que esté perfectamente paralela. El uso de M114 mostrará la compensación de calibración que luego se puede programar en la unidad usando M206 (compensación inicial) X representa Theta.

Smoothieware: M360 P0 tomará la posición actual como paralela al borde de la plataforma y almacenará el desplazamiento en el desplazamiento de ajuste de referencia (M666) No se necesita más interacción del usuario.

M361: Moverse a la posición Theta de 90 grados

Theta se mueve a 90 grados con el borde de la plataforma. El usuario calibra utilizando brazos de desplazamiento para colocar exactamente 90 grados. Los pasos por grado se pueden leer con M114 y programar con M92. X representa a Theta. Programe Y (Psi) al mismo valor inicialmente. Recuerde repetir M360 después de ajustar los pasos por grado.

Smoothieware: M360 P0 aceptará la posición actual como 90 grados al borde de la plataforma. Se calculan nuevos pasos por ángulo y se ingresan en la memoria (M92). No se requiere ninguna otra interacción del usuario, excepto para rehacer M360.

M362: Mover a la posición Psi 0 grados

Los brazos se mueven a Psi 0 grados. Verificar solo después de otras calibraciones Theta

M363: Mover a la posición Psi 90 grados

Los brazos se mueven a Psi 90 grados. Verificar solo después de otras calibraciones Theta

M364: Mover a la posición de 90 grados Psi + Theta

Mueva los brazos para formar un ángulo de 90 grados entre los brazos Psi internos y externos. Calibre moviéndose hasta que el ángulo sea exactamente 90 grados. Lea con M114 y calibre el valor en el desplazamiento inicial M206. Psi está representado por Y.

Smoothieware: M364 P0 aceptará la posición actual como 90 grados entre los brazos. El desplazamiento se almacena como un ajuste de compensación (M666) y no se requiere más interacción del usuario, excepto para guardar todos los cambios a través de M500

M365: factor de escala SCARA

Ajuste la escala XY y Z ingresando el factor. El 100% de escala (predeterminado) está representado por 1

M370: nivel de cama manual Morgan – mapa claro

Borre el mapa y prepárese para la calibración Uso:

      M370

      M370 X <divisiones> Y <divisiones>

Sin parámetros, el valor predeterminado es X5 Y5 (25 puntos de calibración) Al especificar parámetros, se recomiendan números desiguales.

M371: pasar a la siguiente posición de calibración

Mover a la siguiente posición para la calibración. El usuario mueve la cama hacia el hotend hasta que solo toca

M372: registrar el valor de calibración y pasar a la siguiente posición

Se registra la posición de la cama y la máquina se mueve a la siguiente posición. Repita hasta que todas las posiciones programadas

M373: modo de calibración del nivel final del lecho

Finalice el modo de calibración y habilite la matriz de corrección z. No guarda la matriz actual

M374: Guardar cuadrícula de calibración

Guarda la cuadrícula de calibración. (Smoothieware) Uso:

      M374
      M374 <extensión de archivo> Z 

Sin parámetros, la cuadrícula se guarda en el archivo de cuadrícula predeterminado que se carga en el arranque El parámetro especifica la extensión del archivo de cuadrícula, útil para archivos de cuadrícula especiales, como una superficie de impresión especial, como una placa de impresión extraíble. La adición de Z guardará adicionalmente el desplazamiento de referencia M Z6 Z en el archivo de cuadrícula

M375: matriz de visualización / matriz de carga

Mostrar la matriz de calibración de nivel de lecho (Marlin) Cargar archivo de matriz de cuadrícula (Smoothieware)

      M375
      M375 <extensión de archivo>

Sin parámetros, se carga la grilla predeterminada, y con la extensión especificada se intenta cargar la grilla especificada. Si no está disponible no modificará la cuadrícula actual. Si Z se guardó con el archivo de cuadrícula, cargará la Z guardada con la cuadrícula.

M400: espera a que finalicen los movimientos actuales

Termina todos los movimientos actuales y, por lo tanto, borra el búfer. Eso es idéntico a G4 P0.

Ejemplo: M400

M420: Establecer colores RGB como PWM

Uso: M420 R <PWM rojo (0-255)> E <PWM verde (0-255)> B <PWM azul (0-255)>

Ejemplo: M420 R255 E255 B255

Establezca el color de sus LED RGB que están conectados a pines habilitados para PWM. Tenga en cuenta que el color verde está controlado por el valor E en lugar del valor G debido a que el código G es un código primario que no se puede anular.

M540: configurar la dirección MAC

Ejemplo: M540 P0xBE: 0xEF: 0xDE: 0xAD: 0xFE: 0xED

Establece la dirección MAC de RepRap. Esto debe hacerse antes que cualquier otro comando de red. La dirección MAC es seis números hexadecimales de un byte separados por dos puntos. El prefijo 0x es opcional en revisiones de firmware posteriores.

M550: Establecer nombre

Ejemplo: M550 PGodzilla

Establece el nombre de RepRap en (en este caso) Godzilla. El nombre puede ser cualquier cadena de caracteres imprimibles, excepto ‘;’, que aún significa comenzar a comentar.

M551: Establecer contraseña

Ejemplo: M551 Pmy-palabra-muy-secreta

En máquinas que necesitan una contraseña para activarlas, establezca esa contraseña. El código ‘P’ no es parte de la contraseña. Tenga en cuenta que, dado que esto se envía de forma clara, no ofrece (ni pretende) ofrecer un nivel de seguridad muy alto. Pero en las máquinas que están (digamos) en una red, evita que los usuarios no autorizados puedan jugar sin hacer nada. La contraseña puede contener caracteres imprimibles, excepto ‘;’, que aún significa comenzar a comentar.

M552: establecer dirección IP

Ejemplo: M552 P192.168.1.14

Establece la dirección IP de la máquina RepRap en (en este caso) 192.168.1.14. Es posible que sea necesario reiniciar antes de usar la nueva dirección IP. Si no se especifica ningún campo P, esto hace eco de la dirección IP existente configurada. Si S0 se agrega así: M552 S0 P192.168.1.14 la red está deshabilitada.

M553: Establecer máscara de red

Ejemplo: M553 P255.255.255.0

Establece la máscara de red de la máquina RepRap en (en este caso) 255.255.255.0. Es posible que sea necesario reiniciar antes de usar la nueva máscara de red. Si no se especifica ningún campo P, esto hace eco de la máscara de red existente configurada.

M554: Establecer puerta de enlace

Ejemplo: M554 P192.168.1.1

Establece la dirección IP de la puerta de enlace de la máquina RepRap en (en este caso) 192.168.1.1. Es posible que sea necesario reiniciar antes de utilizar la nueva dirección IP de la puerta de enlace. Si no se especifica ningún campo P, esto refleja la dirección IP de la puerta de enlace existente configurada.

M555: Establecer compatibilidad

Ejemplo: M555 P1

Para el firmware que puede hacerlo, establece el firmware en un modo donde su entrada y (especialmente) salida se comporta exactamente como otro firmware establecido. El valor del argumento P es:

Valor P Firmware
0 0 Nativo (es decir, sea cual sea el firmware)
1 RepRap_Firmware
2 Aguja
3 Taza para té
4 4 Sprinter
5 5 Repetidor

M556: compensación del eje

Ejemplo: M556 S100 X0.7 Y-0.2 Z0.6

Aunque con cuidado y ajuste, se puede configurar un RepRap con sus ejes en ángulo recto entre sí dentro de la precisión de la máquina, ¿quién quiere molestarse con cuidado y ajuste cuando el problema puede ser resuelto por el software? Esto le dice al software las tangentes de los ángulos entre los ejes de la máquina obtenidos al imprimir y luego medir una pieza de prueba. El parámetro S (100 aquí) es la longitud de un triángulo a lo largo de cada eje en mm. Las figuras X, Y y Z son el número de milímetros del lado corto del triángulo que representa cuán fuera de verdad es un par de ejes. La figura X es el error entre X e Y, la figura Y es el error entre Y y Z, y la figura Z es el error entre X y Z. Los valores positivos indican que el ángulo entre el par de ejes es obtuso, negativo agudo.

M557: Establecer punto de sonda Z

Ejemplo: M557 P1 X30 Y40.5

Establezca los puntos en los que se sondeará la cama para compensar que su plano esté ligeramente fuera de la horizontal. El valor P es el índice del punto (los índices comienzan en 0) y los valores X e Y son la posición para mover la extrusora 0 a la sonda. Una implementación debe permitir un mínimo de tres puntos (P0, P1 y P2). Esto solo registra las coordenadas del punto; en realidad no hace el sondeo. Ver G32.

M558: Establecer tipo de sonda Z

Ejemplo: M558 P0 X1 Y0 Z1

La sonda AZ puede ser un interruptor, un sensor de proximidad IR o algún otro dispositivo. Esto selecciona cuál usar. P0 indica que no hay una sonda Z presente. P1 proporciona una sonda IR no modulada, o cualquier otro tipo de sonda que emule una sonda IR no modulada (la salida de la sonda es una señal analógica que aumenta al disminuir la altura de la boquilla por encima del lecho). Si hay una señal de control en la sonda, se activa cuando el tipo de sonda es P1. P2 especifica una sonda IR modulada, donde la modulación es ordenada directamente por el firmware de la placa principal utilizando la señal de control a la sonda. P3 selecciona una sonda Z alternativa llevando la señal de control a la sonda baja. P4 selecciona un interruptor (en el Duet, este debe estar conectado a los pines del extremo E0).

Los parámetros X, Y y Z especifican si cada eje usa la sonda Z para referencia o no. Si el parámetro no es cero, la sonda Z se usa para dirigir ese eje. si el parámetro es cero, el interruptor de final de carrera para ese eje se usa para el recorrido de referencia. Ver también G31 y G32.

El firmware Duet-dc42 admite un parámetro R adicional, que especifica el canal de modulación. El canal 0 (predeterminado) usa el pin de modulación de sonda Z estándar en Duet 0.6. El canal 1 selecciona el pin de modulación de sonda Z alternativo en el Duet 0.7.

Las versiones de firmware Duet-dc42 1.00e en adelante admiten el parámetro adicional H. Esto especifica la altura de inmersión desde la cual se realiza el sondeo en respuesta a un comando G30 cuando el parámetro P está presente, o un comando G32.

M559: subir archivo de configuración

Ejemplo: M559

Si RepRap lo admite, esto carga un archivo que se ejecuta al reiniciar para configurar la máquina. Este archivo generalmente es un archivo de código G especial. Después de enviar M559, el archivo debe enviarse, terminando con un M29 (qv).

M560: subir archivo de página web

Ejemplo: M560

Para RepRaps que tienen soporte web y que pueden ser manejados por un navegador web, esto carga el archivo que es la página de control para RepRap. Después de enviar M560, el archivo (generalmente un archivo HTML) debe enviarse, terminado por la cadena

<! - ** EoF ** ->

. Claramente, esa cadena no puede existir en el cuerpo del archivo, pero se puede poner al final para facilitar este proceso. Esto no debería ser una restricción demasiado grave …

M561: Establecer transformación de identidad

Ejemplo: M561

Esto cancela cualquier ajuste del plano de la cama como resultado del sondeo (o cualquier otra cosa) y hace que la máquina se mueva en el sistema de coordenadas del usuario.

M562: error de reinicio de temperatura

Ejemplo: M562 P2

Restablezca una falla de temperatura en el calentador / sensor 2. Si RepRap se apagó y bloqueó un calentador porque detectó una falla, esto restablecerá la condición de falla y le permitirá usar el calentador nuevamente. Obviamente para ser utilizado con precaución. Si la falla persiste, se bloqueará nuevamente después de que haya emitido este comando. P0 es la cama; P1 el primer extrusor, y así sucesivamente.

M563: definir una herramienta

Ejemplo: M563 P3 D0: 5: 6 H1: 3

Las herramientas son generalmente (aunque no necesariamente) extrusoras. El campo P especifica el número de herramienta. Los números de herramienta pueden tener cualquier valor entero positivo y 0. El campo D especifica las unidades utilizadas por la herramienta; en este caso, las unidades 0, 5 y 6. La unidad 0 es la primera unidad de la máquina después de las unidades de movimiento (generalmente X, Y y Z). Si no hay campo D, la herramienta no tiene unidades. El campo H especifica los calentadores de la herramienta; en este caso, los calentadores 1 y 3. El calentador 0 suele ser el lecho caliente (si lo hay), por lo que el primer calentador del extrusor suele ser 1. Si no hay campo H, la herramienta no tiene calentadores.

Las herramientas se manejan utilizando múltiples valores en el campo E de los comandos G1, cada uno de los cuales controla la unidad correspondiente en el campo D anterior, de la siguiente manera:

G1 X90.6 Y13.8 E2.24: 2.24: 15.89
G1 X70.6 E0: 0: 42.4

La primera línea se mueve directamente al punto (90.6, 13.8) extruyendo un total de 2.24 mm de filamento de ambas unidades 0 y 5 y 15.98 mm de filamento de la unidad 6.

La segunda línea retrocede 20 mm en X extruyendo 42,4 mm de filamento desde la unidad 6.

Normalmente, un comando M563 es seguido inmediatamente por un comando G10 para establecer las compensaciones y temperaturas de la herramienta.

Está permitido que diferentes herramientas compartan algunas (o todas) de sus unidades y calentadores. Entonces, por ejemplo, puede definir dos herramientas con hardware idéntico, pero que solo funcionan a diferentes temperaturas.

Si utiliza el comando M563 con un valor P para una herramienta que ya se ha definido, esa herramienta se redefine utilizando los nuevos valores que proporcione.

El firmware Duet-dc42 admite una forma adicional del comando M563. El comando:

M563 S1

significa agregar 1 (el valor del parámetro S) a todos los números de herramienta que se encuentran en el resto del flujo de entrada actual (por ejemplo, el archivo actual si el comando se lee desde un archivo en la tarjeta SD), o hasta un nuevo comando M563 de Este formulario se ejecuta. El propósito de esto es proporcionar compatibilidad entre el firmware Duet, en el que los números de herramienta generalmente comienzan en 1, y programas como slic3r que asumen que las herramientas están numeradas desde cero.

M564: ejes límite

Ejemplo: M564 S0

Permitir movimientos fuera del volumen de impresión, o no. Si el parámetro S es 0, puede enviar códigos G para conducir el RepRap fuera de su volumen de trabajo normal, e intentará hacerlo. Cuidado con el usuario … Si establece el parámetro S en 1, RepRap no pensará fuera de la caja. El comportamiento predeterminado es S = 1.

M565: Establecer desplazamiento de sonda Z

Ejemplo: M565 X3 Y4.5 Z-2.37

Ajuste el desplazamiento desde la punta del extrusor hasta la posición de la sonda. Los valores X, Y y Z son el delta entre el extrusor y la posición real de disparo de la sonda. Si el punto de activación de la sonda está debajo del extrusor (típico), el desplazamiento Z será negativo. Esto solo registra el desplazamiento del punto; en realidad no hace el sondeo. Ver G32.

M566: Establecer cambio de velocidad instantáneo permitido

Ejemplo: M566 X20 Y20 Z2 E10

Evite una limitación del algoritmo de algunos firmwares, que no puede calcular los tiempos de paso para un inicio permanente. Teacup Firmware y Smoothieware no tienen esta limitación, por lo que M566 es obsoleto allí.

M566 establece las velocidades en mm / minuto que los ejes pueden hacer desde un inicio permanente. Si un algoritmo de aceleración comienza un movimiento con una velocidad cero en otros firmwares y luego acelera a partir de eso, puede dar problemas cuando se usa la velocidad inicial cero para calcular un paso de tiempo entre pulsos paso a paso al principio: el paso de tiempo termina siendo infinito. Entonces, estos sistemas tienen pequeñas velocidades iniciales para comenzar. Esto los establece.

La variante dc42 de RepRapFirmware no tiene la limitación, sino que utiliza este parámetro para determinar el cambio de velocidad máximo permitido de cada motor en las curvas.

M567: Establecer relaciones de mezcla de herramientas

Ejemplo: M567 P2 E0.1: 0.2: 0.1: 0.6

El ejemplo establece la relación de mezcla para la herramienta 2 (el valor P). Cuando se activa la mezcla (ver M568), solo se deben enviar valores E individuales en un comando G1 (cualquier valor E adicional se ignorará, pero no es ilegal):

G1 X20 E1.3

Esto se moverá a X = 20 extruyendo una longitud total de filamento de 1.3 mm. La primera unidad de la herramienta 2 extruirá 0.1 * 1.3 mm, la segunda 0.2 * 1.3 mm y así sucesivamente. Las proporciones no tienen que sumar 1.0, el cálculo realizado es como se acaba de describir. Pero es mejor si lo hacen.

Ver también M568.

M568: activar / desactivar las relaciones de mezcla de herramientas

Ejemplo: M568 P2 S0

Active / desactive las relaciones de mezcla automáticas para la herramienta 2. Si el parámetro S es 0, la mezcla se desactiva; si no es cero, está activado.

Después de desactivar el comando, las instrucciones G1 deben enviar tantos valores E como la herramienta tenga unidades:

G1 X20 E0.2: 0.4: 0.166: 0.3

El estado apagado es el predeterminado.

M569: establecer valores de dirección del eje

Ejemplo: M569 P0 S1

Establezca el valor de control para el variador especificado por P que lo envía hacia adelante al valor dado en el campo S. Después de enviar el ejemplo, enviar un 1 a X (unidad 0) lo hará avanzar, enviar un 0 lo hará retroceder. Obviamente para ser utilizado con extrema precaución …

M570: establecer el tiempo de espera del calentador

Ejemplo: M570 S120

Después de encender un calentador, espere 120 segundos para que se acerque a la temperatura establecida. Si lleva más tiempo que esto, marque una falla del calentador.

M571: Establecer salida en extrusión

Ejemplo: M571 S0.5

Esto activa una salida cada vez que se realiza la extrusión y la desactiva cuando finaliza la extrusión. La salida podría controlar un ventilador o un agitador o cualquier otra cosa que necesite funcionar justo cuando está ocurriendo la extrusión. El parámetro S establece el valor de PWM en la salida. 0.0 está apagado; 1.0 está completamente encendido.

M572: Establecer o informar la compensación de elasticidad del extrusor

Ejemplo: M572 P3 S0.06

Esto establece el tiempo de compensación en segundos (parámetro S) para la elasticidad del extrusor Bowden para la unidad especificada (parámetro P). Compatible con el firmware Duet-dc42. Tiene un efecto similar al factor EXTRUDER_ADVANCE_K en el firmware de Marlin. Normalmente, la compensación debe aplicarse solo a las unidades de extrusión (unidades 3 y superiores).

M573: Informe calentador PWM

Ejemplo: M573 P1

Esto proporciona un promedio de funcionamiento (usualmente más de cinco segundos) del PWM al calentador especificado por el campo P. Si conoce el voltaje del suministro y la resistencia del calentador, esto le permite calcular la potencia que va al calentador.

M574: configuración de final de carrera establecida

Ejemplo: M574 X1 Y2 Z0 S1

Esto define el tipo de interruptor de fin de carrera o sensor óptico que tiene la impresora para cada eje: 0 = ninguno, 1 = extremo bajo, 2 = extremo alto. El parámetro opcional S define si la entrada de fin de carrera está activa alta (S1, la predeterminada) o baja (S0). Diseñado para su uso con placas que proporcionan una entrada de tope final único para cada eje que puede usarse para un tope final alto o bajo, como el Duet. Compatible con el firmware Duet-dc42. En las impresoras delta, los parámetros XYZ se refieren a las torres y los topes finales normalmente deberían ser de gama alta.

M575: establecer parámetros de comunicación serie

Ejemplo: M575 P1 B57600 S1

Esto establece los parámetros de comunicación del canal de comunicaciones en serie especificado por el parámetro P. P0 especifica la interfaz serial principal (típicamente un puerto USB, o serial-over-USB), mientras que P1 especifica un puerto serial auxiliar (por ejemplo, el puerto usado para conectar un PanelDue). El parámetro B es la velocidad de transmisión requerida (este parámetro generalmente se ignora si el puerto es un verdadero puerto USB). El parámetro S es un mapa de bits de características. El bit más bajo, si se establece, especifica que solo los comandos que incluyen una suma de verificación válida se deben aceptar desde este canal de comunicaciones.

M665: establecer configuración delta

Ejemplo: M660 L250 R160 S200 (Marlin), M660 L250 R160 B80 H200 (Duet-dc42)

Establezca las variables de calibración delta. L = longitud de la barra diagonal, R = radio delta, S = segmentos por segundo, B = radio del lecho de impresión, H = altura de la boquilla sobre el lecho cuando se dirige después de permitir las correcciones del tope final.

No creo que sea una buena idea tener dos implementaciones diferentes para el mismo código G, y también cuestiono el valor práctico de especificar el radio del lecho de impresión al definir una configuración delta, ya que muchas impresoras delta usan una impresión cuadrada o rectangular cama. Entonces, quizás deberíamos apegarnos al comando definido por Marlin como la definición de este comando, y usar un comando diferente o un conjunto de comandos para definir la forma y el tamaño de la cama de impresión. – AndrewBCN ( charla ) 23:10, 31 de enero de 2015 (PST)

M666: Ajuste el ajuste del tope final

Ejemplo M666 X-0.1 Y + 0.2 Z0

Establece ajustes delta finales.

M906: Establecer corrientes del motor

Ejemplo: M906 X300 Y500 Z200 E350

Establece las corrientes para enviar a los motores paso a paso para cada eje. Los valores están en miliamperios.

M909: establecer microstepping

Ejemplo: M909 X3 Y5 Z2 E3

Establezca el valor de microstepping para cada uno de los steppers. En Canjear, esto se implementa como un valor 2 ^, por lo que
M909 X2 establece micropasos en el eje X en 2 ^ 2 = 4,
M909 Y3 establece microstepping en el eje Y en 2 ^ 3 = 8, etc.

M998: solicitud de reenvío de línea

Ejemplo: M998 P34

Solicite un reenvío de la línea 34. En algunas implementaciones, el código de manejo de entrada sobrescribe el código G entrante con esto cuando detecta, por ejemplo, un error de suma de verificación. Luego lo deja al intérprete GCode para solicitar el reenvío.

M999: reiniciar después de ser detenido por error

Ejemplo: M999

G: Lista todos los códigos G

Ejemplo: G

Esto enumera todos los códigos G implementados en el firmware con descripción y lo envía de vuelta al host.
(Nota: esto se ha implementado en Canjear , por lo que es solo una propuesta)

M: Lista todos los códigos M

Ejemplo: M

Esto enumera todos los códigos M implementados en el firmware con descripción y lo envía de vuelta al host.
(Nota: esto se ha implementado en Canjear , por lo que es solo una propuesta)

T: Seleccionar herramienta

Ejemplo: T1

Seleccione la herramienta (o en el extrusor de implementaciones anteriores) número 1 para construir.

La secuencia seguida es:

  1. Configure la herramienta actual a sus temperaturas de espera especificadas por G10 (ver arriba),
  2. Configure la nueva herramienta a sus temperaturas de operación especificadas por G10 y espere a que todas las temperaturas se estabilicen,
  3. Aplique cualquier desplazamiento X, Y, Z para la nueva herramienta especificada por G10,
  4. Usa la nueva herramienta.

Seleccionar una herramienta inexistente (100, por ejemplo) solo hace el Paso 1. anterior. Es decir, deja todas las herramientas en su estado de espera. Por supuesto, puede usar el comando G10 de antemano para establecer la temperatura de espera en cualquier cosa que desee.

Tenga en cuenta que es posible que desee moverse a una posición de estacionamiento antes de ejecutar un comando T para permitir que el nuevo extrusor alcance la temperatura mientras no está en contacto con la impresión. Es aceptable que el firmware aplique un pequeño desplazamiento [por convención (-1 mm x número de herramienta) en Y] a la posición actual cuando se ingresa la secuencia anterior para permitir que los cambios de temperatura surtan efecto justo fuera de la posición de estacionamiento. Cualquier compensación de este tipo debe, por supuesto, deshacerse cuando finalice el procedimiento.

Si el valor Z cambia en los desplazamientos y la herramienta se mueve hacia arriba, entonces el movimiento Z se realiza antes de que X e Y se muevan. Si Z se mueve hacia abajo, X e Y se hacen primero.

Algunas implementaciones (por ejemplo, RepRapFirmware) le permiten especificar macros de código G de cambio de herramienta. Normalmente hay tres especificados (cualquiera de los cuales no puede contener comandos si se desea) que se ejecutan en este orden:

  1. Acciones para hacer con la herramienta anterior antes de su lanzamiento: nombre de macro: tfreeN.g donde N es el número de herramienta;
  2. (Se lanza la herramienta antigua);
  3. Acciones para hacer con la nueva herramienta antes de seleccionarla: nombre de macro: tpreN.g donde N es el número de herramienta;
  4. (Se selecciona una nueva herramienta); y
  5. Acciones para hacer con la nueva herramienta después de seleccionarla: nombre de macro: tpostN.g donde N es el número de herramienta.

Con tales implementaciones no hay que esperar la estabilización de la temperatura. Eso se puede lograr con un M116 en cualquiera de las macros, por supuesto.

Después de un reinicio, las herramientas no comenzarán a calentarse hasta que se seleccionen. Puede ponerlos todos a su temperatura de espera seleccionándolos por turnos, o dejarlos apagados para que solo se enciendan si / cuando los usa por primera vez. Los comandos M0, M1 y M112 los apagan a todos. Por supuesto, puede apagarlos todos con el comando M1 y luego volver a encenderlos. No olvides también encender la cama caliente (si la hay) si usas ese truco.

La numeración de herramientas puede comenzar en 0 o 1, dependiendo de la implementación. Algunas implementaciones (aquellas que usan el comando M563 para definir herramientas) permiten al usuario especificar números de herramientas, por lo que con ellas puede tener las herramientas 17, 99 y 203 si lo desea. Los números negativos no están permitidos.

Códigos de configuración EEPROM propuestos

BREVEMENTE: cada RepRap tiene una serie de parámetros físicos que deben ser persistentes, pero fácilmente configurables, como pasos de extrusión / mm, varios valores máximos, etc. Estos parámetros están actualmente codificados en el firmware, por lo que un usuario tiene que modificar, recompilar y vuelva a actualizar el firmware para cualquier ajuste. Estas configuraciones pueden almacenarse en la EEPROM de MCU y modificarse a través de algunos códigos M. 

M500: almacenar parámetros en EEPROM

Guardar los parámetros actuales en EEPROM. La bifurcación zpl del firmware Duet implementa esto y permite pasar «S1», por lo que los parámetros modificados se pueden guardar automáticamente en EEPROM.

En Canjear, cualquier parámetro establecido a través de códigos G / M que sea diferente de lo que se lee de los archivos de configuración, se almacena de nuevo en la configuración local. Por ejemplo, la configuración de la corriente paso a paso y el microstepping a través de M906 y M907 seguido de M500 actualizarán /etc/redeem/local.cfg.

M501: leer parámetros de EEPROM

Establezca los parámetros activos a los almacenados en la EEPROM. Esto es útil para revertir parámetros después de experimentar con ellos.

M502: vuelve a la «configuración de fábrica» ​​predeterminada.

Este comando restablece todos los parámetros ajustables a sus valores predeterminados, como se establece en el firmware. Esto no restablece ningún parámetro almacenado en la EEPROM, por lo que debe seguirse con M501 si desea hacerlo.

M503: configuración de impresión

Este comando le pide al firmware que responda con la configuración de impresión actual almacenada en EEPROM. La salida de respuesta incluye los comandos del Código G para producir cada configuración. Por ejemplo, los valores de Pasos por unidad se muestran como un comando M92.

Respuestas de la máquina RepRap a la computadora host

Toda la comunicación está en caracteres ASCII imprimibles. Los mensajes enviados de regreso a la computadora host son terminados por una nueva línea y se ven así:

xx [número de línea para reenviar] [T: 93.2 B: 22.9] [C: X: 9.2 Y: 125.4 Z: 3.7 E: 1902.5] [Puede haber alguna depuración u otra información aquí]

xx puede ser uno de:

Okay

rs

!!

ok significa que no se ha detectado ningún error.

rs significa reenviar, y es seguido por el número de línea para reenviar.

!! significa que se ha detectado una falla de hardware. La máquina RepRap se apagará inmediatamente después de enviar este mensaje.

Los valores T: y B: son la temperatura del extrusor seleccionado actualmente y el lecho, respectivamente, y solo se envían en respuesta a M105. Si tales temperaturas no existen (por ejemplo, para una extrusora que funciona a temperatura ambiente y no tiene un sensor ), se devuelve un valor por debajo del cero absoluto (-273 o C).

C: significa que las coordenadas siguen. Esos son los valores X: Y: etc. Estos solo se envían en respuesta a M114 y M117.

La máquina RepRap también puede enviar líneas que se vean así:

// Esta es alguna información de depuración u otra información en una línea por sí sola. Se puede enviar en cualquier momento.

Dichas líneas siempre estarán precedidas por // .

En la última versión de Pronterface y pronto Octoprint un comentario especial del formulario:

// action: comando

se permite enviar desde el firmware, el comando actualmente se puede pausar, reanudar o desconectar, lo que ejecutará esos comandos en el host. Como este también es un comentario, otros hosts simplemente ignorarán estos comandos.

La respuesta más común es simplemente:

Okay

Cuando la máquina arranca, envía la cadena.

comienzo

una vez al host antes de enviar cualquier otra cosa. Esto no debe ser reemplazado o aumentado por números de versión y similares. M115 (ver arriba) los solicita.

Todo esto significa que cada línea enviada por RepRap a la computadora host, excepto la línea de inicio, tiene un prefijo de dos caracteres (uno de ok , rs , !! o // ). La máquina nunca debe enviar una línea sin dicho prefijo.


Excepciones :

1. El firmware Marlin 1.0.0 Gen6 no sigue la regla de dos caracteres. ‘rs’ es en realidad ‘Reenviar’ y ‘!!’ es ‘Error’ Líneas de ejemplo:

  • Error: el número de línea no es la línea actual + 1. Última línea: 7
  • Reenviar: 8
  • Escribir en el archivo: print.gco
  • Terminado de guardar el archivo.
  • Archivo abierto: print.gco Tamaño: 22992
  • Archivo seleccionado

¿Cuándo en el código base se produjo este cambio y qué otros firmwares se ven afectados?

2. El firmware Duet-dc42 responde a algunos comandos con una cadena de respuesta en formato JSON, terminada por una nueva línea. Esto permite que las revisiones de firmware posteriores incluyan información adicional sin molestar a los clientes (p. Ej., Paneles de control con pantalla táctil) que no lo esperan, y que las respuestas se describan por sí mismas para que el cliente no se confunda si las respuestas se retrasan o pierden. Los comandos afectados son:

  • M105 S2
  • M105 S3
  • M20 S2
  • M36

Instalando Octoprint en Linux


OctoPrint es un sofware creado por Gina Häußge y es 100% opensource  con un  interfaz amigable que hace de servidor  de impresion 3D  permitiendo controlar en la practica cualquier impresora 3D a distancia.

Gracias a este sw  podríamos dejar nuestra impresora imprimiendo durante horas mientras la controlamos desde cualquier parte del mundo ( se puede empezar, parar y pausar impresiones en tiempo real) o la monitorizamos gracias a que podemos conectarle una webcam y hacer streaming de las impresiones e incluso timelapses.

Otras utilidad  sin duda  interesante es subir o visualizar nuestros GCODES e incluso generarlos !las posibildades son  casi infinitas!.

Este sw esta  en constante desarrollo y mantiene una gran comunidad en Github que comparte e innova en sus nuevas implementaciones de acorde a las necesidade de cada usuario,

Sin duda la forma más sencilla de instalar OctoPrint es usando una  Raspberry   o a orangePi como vimos en este port,  R  pero también es  posible instalarlo en cualquier ordenador  con windows   y   como vamos a ver con Linux

Las instrucciones de configuración genéricas se reducen a Instalación de Python incluyendo pip y virtualenv,  pero tenga en cuenta:

      • Si bien OctoPrint es compatible con Python 3.7+ a partir de la versión 1.4.0, muchos de los complementos disponibles siguen siendo solo validos para Python 2.
      • Si desea hacer uso de complementos del repositorio de complementos, por ahora aún debe instalar OctoPrint en Python 2.7. Tenga en cuenta que la migración a Python 3 en una fecha posterior se realiza fácilmente.

En resumen estos son los pasos :

      • Crear un entorno virtual en algún lugar:
virtualenv OctoPrint
      • Instalación de OctoPrint en ese entorno virtual:
OctoPrint / bin / pip install OctoPrint
      • Luego, OctoPrint se puede iniciar a través de ./OctoPrint/bin/octoprint serve o con una ruta absoluta / ruta / a / OctoPrint / bin / octoprint serve
      • Las instrucciones de configuración más específicas para los entornos de tiempo de ejecución más comunes se pueden encontrar a continuación.

 

Configuración básica

Para el paquete básico, necesitará Python 2.7 (debe instalarse de manera predeterminada) y pip.

Las dependencias de OctoPrint serán instaladas por pip:

cd ~
sudo apt update
sudo apt install python-pip python-dev python-setuptools python-virtualenv git libyaml-dev build-essential
mkdir OctoPrint && cd OctoPrint
virtualenv venv
source venv/bin/activate
pip install pip --upgrade
pip install octoprint

Si esto instala una versión anterior de OctoPrint, pip probablemente todavía tenga algo en caché. En ese caso, agregue –no-cache-dir al comando de instalación, p.

pip install --no-cache-dir octoprint

Para hacer esto permanente, limpie el caché de pip:

rm -r ~ / .cache / pip

Es posible que deba agregar el usuario pi al grupo de marcado y tty para que el usuario pueda acceder a los puertos seriales:

sudo usermod -a -G tty usuario
sudo usermod -a -G dialout usuario

Entonces debería poder iniciar el servidor OctoPrint:

~ / OctoPrint / venv / bin / octoprint serve

Lo cual  responderá  algo como esto:

octoprint serve
2020-04-21 16:30:41,253 - octoprint.startup - INFO - ******************************************************************************
2020-04-21 16:30:41,254 - octoprint.startup - INFO - Starting OctoPrint 1.4.0
2020-04-21 16:30:41,254 - octoprint.startup - INFO - ******************************************************************************
2020-04-21 16:30:41,275 - octoprint.plugin.core - INFO - Loading plugins from /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins, /home/soloelectronicos/.octoprint/plugins and installed plugin packages...
2020-04-21 16:30:41,799 - octoprint.plugin.core - INFO - Plugin Pi Support Plugin did not pass check, not loading.
2020-04-21 16:30:41,869 - octoprint.plugins.octoprint.plugins.discovery - INFO - pybonjour is not installed, Zeroconf Discovery won't be available
2020-04-21 16:30:41,877 - octoprint.plugin.core - INFO - Found 14 plugin(s) providing 14 mixin implementations, 25 hook handlers
2020-04-21 16:30:41,911 - octoprint.server.heartbeat - INFO - Starting server heartbeat, 900.0s interval
2020-04-21 16:30:41,941 - octoprint.server - INFO - Intermediary server started
2020-04-21 16:30:41,941 - octoprint.plugin.core - INFO - Loading plugins from /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins, /home/soloelectronicos/.octoprint/plugins and installed plugin packages...
2020-04-21 16:30:41,950 - octoprint.plugin.core - INFO - Plugin Pi Support Plugin did not pass check, not loading.
2020-04-21 16:30:41,988 - octoprint.plugin.core - INFO - Found 14 plugin(s) providing 14 mixin implementations, 25 hook handlers
2020-04-21 16:30:41,991 - octoprint.printer.profile - ERROR - Profile _default does not exist, creating _default again and setting it as default
2020-04-21 16:30:42,019 - octoprint.filemanager.storage - INFO - Initializing the file metadata for /home/soloelectronicos/.octoprint/uploads...
2020-04-21 16:30:42,019 - octoprint.filemanager.storage - INFO - ... file metadata for /home/soloelectronicos/.octoprint/uploads initialized successfully.
2020-04-21 16:30:42,022 - octoprint.server - INFO - Added new permission from plugin action_command_prompt: PLUGIN_ACTION_COMMAND_PROMPT_INTERACT (needs: u"Need(method='role', value=u'plugin_action_command_prompt_interact')")
2020-04-21 16:30:42,022 - octoprint.server - INFO - Added new permission from plugin announcements: PLUGIN_ANNOUNCEMENTS_READ (needs: u"Need(method='role', value=u'plugin_announcements_read')")
2020-04-21 16:30:42,022 - octoprint.server - INFO - Added new permission from plugin announcements: PLUGIN_ANNOUNCEMENTS_MANAGE (needs: u"Need(method='role', value=u'plugin_announcements_manage'), Need(method='role', value=u'plugin_announcements_read')")
2020-04-21 16:30:42,023 - octoprint.server - INFO - Added new permission from plugin appkeys: PLUGIN_APPKEYS_ADMIN (needs: u"Need(method='role', value=u'plugin_appkeys_admin')")
2020-04-21 16:30:42,023 - octoprint.server - INFO - Added new permission from plugin backup: PLUGIN_BACKUP_ACCESS (needs: u"Need(method='role', value=u'plugin_backup_access')")
2020-04-21 16:30:42,024 - octoprint.server - INFO - Added new permission from plugin logging: PLUGIN_LOGGING_MANAGE (needs: u"Need(method='role', value=u'plugin_logging_manage')")
2020-04-21 16:30:42,024 - octoprint.server - INFO - Added new permission from plugin pluginmanager: PLUGIN_PLUGINMANAGER_MANAGE (needs: u"Need(method='role', value=u'plugin_pluginmanager_manage')")
2020-04-21 16:30:42,025 - octoprint.server - INFO - Added new permission from plugin pluginmanager: PLUGIN_PLUGINMANAGER_INSTALL (needs: u"Need(method='role', value=u'plugin_pluginmanager_install'), Need(method='role', value=u'plugin_pluginmanager_manage')")
2020-04-21 16:30:42,025 - octoprint.server - INFO - Added new permission from plugin printer_safety_check: PLUGIN_PRINTER_SAFETY_CHECK_DISPLAY (needs: u"Need(method='role', value=u'plugin_printer_safety_check_display')")
2020-04-21 16:30:42,026 - octoprint.server - INFO - Added new permission from plugin softwareupdate: PLUGIN_SOFTWAREUPDATE_CHECK (needs: u"Need(method='role', value=u'plugin_softwareupdate_check')")
2020-04-21 16:30:42,027 - octoprint.server - INFO - Added new permission from plugin softwareupdate: PLUGIN_SOFTWAREUPDATE_UPDATE (needs: u"Need(method='role', value=u'plugin_softwareupdate_update')")
2020-04-21 16:30:42,351 - octoprint.util.pip - INFO - Using "/home/soloelectronicos/OctoPrint/venv/bin/python2 -m pip" as command to invoke pip
2020-04-21 16:30:42,618 - octoprint.util.pip - INFO - Version of pip is 20.0.2
2020-04-21 16:30:42,618 - octoprint.util.pip - INFO - pip installs to /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages (writable -> yes), --user flag needed -> no, virtual env -> yes
2020-04-21 16:30:42,619 - octoprint.util.pip - INFO - ==> pip ok -> yes
2020-04-21 16:30:42,621 - octoprint.plugin.core - INFO - Initialized 14 plugin implementation(s)
2020-04-21 16:30:42,643 - octoprint.plugin.core - INFO - 14 plugin(s) registered with the system:
|  Action Command Prompt Support (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/action_command_prompt
|  Announcement Plugin (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/announcements
|  Anonymous Usage Tracking (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/tracking
|  Application Keys Plugin (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/appkeys
|  Backup & Restore (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/backup
|  Core Wizard (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/corewizard
|  Discovery (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/discovery
|  Error Tracking (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/errortracking
|  Logging (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/logging
|  Login UI (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/loginui
|  Plugin Manager (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/pluginmanager
|  Printer Safety Check (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/printer_safety_check
|  Software Update (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/softwareupdate
|  Virtual Printer (bundled) = /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/octoprint/plugins/virtual_printer
Prefix legend: ! = disabled, # = blacklisted, * = incompatible
2020-04-21 16:30:42,687 - octoprint.environment - INFO - Detected environment is Python 2.7.17 under Linux (linux2). Details:
|  hardware:
|      cores: 2
|      freq: 2201.0
|      ram: 2081136640
|  os:
|      id: linux
|      platform: linux2
|  python:
|      pip: 20.0.2
|      version: 2.7.17
|      virtualenv: /home/soloelectronicos/OctoPrint/venv
2020-04-21 16:30:42,694 - octoprint.server - INFO - Reset webasset folder /home/soloelectronicos/.octoprint/generated/webassets...
2020-04-21 16:30:42,695 - octoprint.server - INFO - Reset webasset folder /home/soloelectronicos/.octoprint/generated/.webassets-cache...
2020-04-21 16:30:42,956 - octoprint.server - INFO - Shutting down intermediary server...
2020-04-21 16:30:43,444 - octoprint.server - INFO - Intermediary server shut down
2020-04-21 16:30:43,448 - octoprint.events - INFO - Processing startup event, this is our first event
2020-04-21 16:30:43,450 - octoprint.events - INFO - Adding 0 events to queue that were held back before startup event
2020-04-21 16:30:43,452 - octoprint.filemanager - INFO - Adding backlog items from all storage types to analysis queue...
2020-04-21 16:30:43,456 - octoprint.server.util.watchdog - INFO - Running initial scan on watched folder...
2020-04-21 16:30:43,456 - octoprint.filemanager - INFO - Added 0 items from storage type "local" to analysis queue
2020-04-21 16:30:43,459 - octoprint.server.util.watchdog - INFO - ... initial scan done.
2020-04-21 16:30:43,465 - octoprint.server - INFO - Listening on http://0.0.0.0:5000 and http://[::]:5000
2020-04-21 16:30:43,465 - octoprint.plugins.discovery - INFO - Registered OctoPrint instance on ubuntusoloelectronicos for SSDP
2020-04-21 16:30:43,762 - octoprint.util.pip - INFO - Using "/home/soloelectronicos/OctoPrint/venv/bin/python2 -m pip" as command to invoke pip
2020-04-21 16:30:43,763 - octoprint.util.pip - INFO - pip installs to /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages (writable -> yes), --user flag needed -> no, virtual env -> yes
2020-04-21 16:30:43,763 - octoprint.util.pip - INFO - ==> pip ok -> yes
2020-04-21 16:30:43,800 - octoprint.plugins.announcements - INFO - Loaded channel _important from https://octoprint.org/feeds/important.xml in 0.31s
2020-04-21 16:30:43,866 - octoprint.plugins.pluginmanager - INFO - Loaded plugin repository data from https://plugins.octoprint.org/plugins.json
2020-04-21 16:30:44,163 - octoprint.plugins.announcements - INFO - Loaded channel _releases from https://octoprint.org/feeds/releases.xml in 0.3s
2020-04-21 16:30:44,583 - octoprint.util.pip - INFO - Using "/home/soloelectronicos/OctoPrint/venv/bin/python2 -m pip" as command to invoke pip
2020-04-21 16:30:44,627 - octoprint.plugins.pluginmanager - INFO - Loaded plugin notices data from https://plugins.octoprint.org/notices.json
2020-04-21 16:30:44,846 - octoprint.plugins.announcements - INFO - Loaded channel _blog from https://octoprint.org/feeds/octoblog.xml in 0.28s
2020-04-21 16:30:45,653 - octoprint.util.pip - INFO - pip installs to /home/soloelectronicos/OctoPrint/venv/lib/python2.7/site-packages/ (writable -> yes), --user flag needed -> no, virtual env -> yes
2020-04-21 16:30:45,653 - octoprint.util.pip - INFO - ==> pip ok -> yes
2020-04-21 16:30:45,660 - octoprint.plugins.softwareupdate - INFO - Saved version cache to disk
2020-04-21 16:30:46,286 - octoprint.plugins.announcements - INFO - Loaded channel _plugins from https://plugins.octoprint.org/feed.xml in 1.4s
2020-04-21 16:30:46,624 - octoprint.plugins.announcements - INFO - Loaded channel _octopi from https://octoprint.org/feeds/octopi.xml in 0.29s
2020-04-21 16:45:41,912 - octoprint.server.heartbeat - INFO - Server heartbeat <3
2020-04-21 17:00:41,913 - octoprint.server.heartbeat - INFO - Server heartbeat <3
2020-04-21 17:15:41,915 - octoprint.server.heartbeat - INFO - Server heartbeat <3
2020-04-21 17:30:41,916 - octoprint.server.heartbeat - INFO - Server heartbeat <3
2020-04-21 17:45:41,918 - octoprint.server.heartbeat - INFO - Server heartbeat <3
2020-04-21 17:46:03,908 - octoprint.server.util.flask.PreemptiveCache - INFO - Adding entry for / and {'query_string': u'l10n=en', 'path': u'/', u'_count': 1, u'_timestamp': 1587483963.908261, 'base_url': u'http://127.0.0.1:5000/'}
2020-04-21 17:46:07,147 - octoprint.server.util.sockjs - INFO - New connection from client: 127.0.0.1
2020-04-21 17:46:08,325 - tornado.access - WARNING - 403 GET /api/printerprofiles/_default (127.0.0.1) 5.30ms

 

 

Log de ejecucion :


soloelectronicos@ubuntusoloelectronicos:~$ sudo apt install python-pip python-dev python-setuptools python-virtualenv git libyaml-dev build-essential
[sudo] contraseña para soloelectronicos:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
El paquete indicado a continuación se instaló de forma automática y ya no es necesario.
libllvm6.0
Utilice «sudo apt autoremove» para eliminarlo.
Se instalarán los siguientes paquetes adicionales:
dpkg-dev fakeroot git-man libalgorithm-diff-perl libalgorithm-diff-xs-perl
libalgorithm-merge-perl liberror-perl libfakeroot libpython-all-dev
libpython-dev libpython2.7-dev make python-all python-all-dev python-crypto
python-keyring python-keyrings.alt python-pip-whl python-secretstorage
python-wheel python-xdg python2.7-dev python3-virtualenv virtualenv
Paquetes sugeridos:
debian-keyring git-daemon-run | git-daemon-sysvinit git-doc git-el git-email
git-gui gitk gitweb git-cvs git-mediawiki git-svn libyaml-doc make-doc
python-crypto-doc libkf5wallet-bin gir1.2-gnomekeyring-1.0 python-fs
python-gdata python-keyczar python-secretstorage-doc python-setuptools-doc
Se instalarán los siguientes paquetes NUEVOS:
build-essential dpkg-dev fakeroot git git-man libalgorithm-diff-perl
libalgorithm-diff-xs-perl libalgorithm-merge-perl liberror-perl libfakeroot
libpython-all-dev libpython-dev libpython2.7-dev libyaml-dev make python-all
python-all-dev python-crypto python-dev python-keyring python-keyrings.alt
python-pip python-pip-whl python-secretstorage python-setuptools
python-virtualenv python-wheel python-xdg python2.7-dev python3-virtualenv
virtualenv
0 actualizados, 31 nuevos se instalarán, 0 para eliminar y 8 no actualizados.
Se necesita descargar 36,9 MB de archivos.
Se utilizarán 85,4 MB de espacio de disco adicional después de esta operación.
¿Desea continuar? [S/n] S
Des:1 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 make amd64 4.1-9.1ubuntu1 [154 kB]
Des:2 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 dpkg-dev all 1.19.0.5ubuntu2.3 [607 kB]
Des:3 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 build-essential amd64 12.4ubuntu1 [4.758 B]
Des:4 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 libfakeroot amd64 1.22-2ubuntu1 [25,9 kB]
Des:5 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 fakeroot amd64 1.22-2ubuntu1 [62,3 kB]
Des:6 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 liberror-perl all 0.17025-1 [22,8 kB]
Des:7 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 git-man all 1:2.17.1-1ubuntu0.7 [804 kB]
Des:8 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 git amd64 1:2.17.1-1ubuntu0.7 [3.915 kB]
Des:9 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 libalgorithm-diff-perl all 1.19.03-1 [47,6 kB]
Des:10 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 libalgorithm-diff-xs-perl amd64 0.04-5 [11,1 kB]
Des:11 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 libalgorithm-merge-perl all 0.08-3 [12,0 kB]
Des:12 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpython2.7-dev amd64 2.7.17-1~18.04 [28,3 MB]
Des:13 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 libpython-dev amd64 2.7.15~rc1-1 [7.684 B]
Des:14 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 libpython-all-dev amd64 2.7.15~rc1-1 [1.092 B]
Des:15 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 python-all amd64 2.7.15~rc1-1 [1.076 B]
Des:16 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 python2.7-dev amd64 2.7.17-1~18.04 [277 kB]
Des:17 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 python-dev amd64 2.7.15~rc1-1 [1.256 B]
Des:18 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 python-all-dev amd64 2.7.15~rc1-1 [1.100 B]
Des:19 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 python-crypto amd64 2.6.1-8ubuntu2 [244 kB]
Des:20 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 python-secretstorage all 2.3.1-2 [11,8 kB]
Des:21 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 python-keyring all 10.6.0-1 [30,6 kB]
Des:22 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 python-keyrings.alt all 3.0-1 [16,7 kB]
Des:23 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 python-pip-whl all 9.0.1-2.3~ubuntu1.18.04.1 [1.653 kB]
Des:24 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 python-pip all 9.0.1-2.3~ubuntu1.18.04.1 [151 kB]
Des:25 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 python-setuptools all 39.0.1-2 [329 kB]
Des:26 http://es.archive.ubuntu.com/ubuntu bionic/universe amd64 python-virtualenv all 15.1.0+ds-1.1 [46,8 kB]
Des:27 http://es.archive.ubuntu.com/ubuntu bionic/universe amd64 python-wheel all 0.30.0-0.2 [36,4 kB]
Des:28 http://es.archive.ubuntu.com/ubuntu bionic/universe amd64 python-xdg all 0.25-4ubuntu1 [31,3 kB]
Des:29 http://es.archive.ubuntu.com/ubuntu bionic/universe amd64 python3-virtualenv all 15.1.0+ds-1.1 [43,4 kB]
Des:30 http://es.archive.ubuntu.com/ubuntu bionic/universe amd64 virtualenv all 15.1.0+ds-1.1 [4.476 B]
Des:31 http://es.archive.ubuntu.com/ubuntu bionic/main amd64 libyaml-dev amd64 0.1.7-2ubuntu3 [55,7 kB]
Descargados 36,9 MB en 6s (5.898 kB/s)
Extrayendo plantillas para los paquetes: 100%
Seleccionando el paquete make previamente no seleccionado.
(Leyendo la base de datos ... 163591 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../00-make_4.1-9.1ubuntu1_amd64.deb ...
Desempaquetando make (4.1-9.1ubuntu1) ...
Seleccionando el paquete dpkg-dev previamente no seleccionado.
Preparando para desempaquetar .../01-dpkg-dev_1.19.0.5ubuntu2.3_all.deb ...
Desempaquetando dpkg-dev (1.19.0.5ubuntu2.3) ...
Seleccionando el paquete build-essential previamente no seleccionado.
Preparando para desempaquetar .../02-build-essential_12.4ubuntu1_amd64.deb ...
Desempaquetando build-essential (12.4ubuntu1) ...
Seleccionando el paquete libfakeroot:amd64 previamente no seleccionado.
Preparando para desempaquetar .../03-libfakeroot_1.22-2ubuntu1_amd64.deb ...
Desempaquetando libfakeroot:amd64 (1.22-2ubuntu1) ...
Seleccionando el paquete fakeroot previamente no seleccionado.
Preparando para desempaquetar .../04-fakeroot_1.22-2ubuntu1_amd64.deb ...
Desempaquetando fakeroot (1.22-2ubuntu1) ...
Seleccionando el paquete liberror-perl previamente no seleccionado.
Preparando para desempaquetar .../05-liberror-perl_0.17025-1_all.deb ...
Desempaquetando liberror-perl (0.17025-1) ...
Seleccionando el paquete git-man previamente no seleccionado.
Preparando para desempaquetar .../06-git-man_1%3a2.17.1-1ubuntu0.7_all.deb ...
Desempaquetando git-man (1:2.17.1-1ubuntu0.7) ...
Seleccionando el paquete git previamente no seleccionado.
Preparando para desempaquetar .../07-git_1%3a2.17.1-1ubuntu0.7_amd64.deb ...
Desempaquetando git (1:2.17.1-1ubuntu0.7) ...
Seleccionando el paquete libalgorithm-diff-perl previamente no seleccionado.
Preparando para desempaquetar .../08-libalgorithm-diff-perl_1.19.03-1_all.deb ...
Desempaquetando libalgorithm-diff-perl (1.19.03-1) ...
Seleccionando el paquete libalgorithm-diff-xs-perl previamente no seleccionado.
Preparando para desempaquetar .../09-libalgorithm-diff-xs-perl_0.04-5_amd64.deb ...
Desempaquetando libalgorithm-diff-xs-perl (0.04-5) ...
Seleccionando el paquete libalgorithm-merge-perl previamente no seleccionado.
Preparando para desempaquetar .../10-libalgorithm-merge-perl_0.08-3_all.deb ...
Desempaquetando libalgorithm-merge-perl (0.08-3) ...
Seleccionando el paquete libpython2.7-dev:amd64 previamente no seleccionado.
Preparando para desempaquetar .../11-libpython2.7-dev_2.7.17-1~18.04_amd64.deb ...
Desempaquetando libpython2.7-dev:amd64 (2.7.17-1~18.04) ...
Seleccionando el paquete libpython-dev:amd64 previamente no seleccionado.
Preparando para desempaquetar .../12-libpython-dev_2.7.15~rc1-1_amd64.deb ...
Desempaquetando libpython-dev:amd64 (2.7.15~rc1-1) ...
Seleccionando el paquete libpython-all-dev:amd64 previamente no seleccionado.
Preparando para desempaquetar .../13-libpython-all-dev_2.7.15~rc1-1_amd64.deb ...
Desempaquetando libpython-all-dev:amd64 (2.7.15~rc1-1) ...
Seleccionando el paquete python-all previamente no seleccionado.
Preparando para desempaquetar .../14-python-all_2.7.15~rc1-1_amd64.deb ...
Desempaquetando python-all (2.7.15~rc1-1) ...
Seleccionando el paquete python2.7-dev previamente no seleccionado.
Preparando para desempaquetar .../15-python2.7-dev_2.7.17-1~18.04_amd64.deb ...
Desempaquetando python2.7-dev (2.7.17-1~18.04) ...
Seleccionando el paquete python-dev previamente no seleccionado.
Preparando para desempaquetar .../16-python-dev_2.7.15~rc1-1_amd64.deb ...
Desempaquetando python-dev (2.7.15~rc1-1) ...
Seleccionando el paquete python-all-dev previamente no seleccionado.
Preparando para desempaquetar .../17-python-all-dev_2.7.15~rc1-1_amd64.deb ...
Desempaquetando python-all-dev (2.7.15~rc1-1) ...
Seleccionando el paquete python-crypto previamente no seleccionado.
Preparando para desempaquetar .../18-python-crypto_2.6.1-8ubuntu2_amd64.deb ...
Desempaquetando python-crypto (2.6.1-8ubuntu2) ...
Seleccionando el paquete python-secretstorage previamente no seleccionado.
Preparando para desempaquetar .../19-python-secretstorage_2.3.1-2_all.deb ...
Desempaquetando python-secretstorage (2.3.1-2) ...
Seleccionando el paquete python-keyring previamente no seleccionado.
Preparando para desempaquetar .../20-python-keyring_10.6.0-1_all.deb ...
Desempaquetando python-keyring (10.6.0-1) ...
Seleccionando el paquete python-keyrings.alt previamente no seleccionado.
Preparando para desempaquetar .../21-python-keyrings.alt_3.0-1_all.deb ...
Desempaquetando python-keyrings.alt (3.0-1) ...
Seleccionando el paquete python-pip-whl previamente no seleccionado.
Preparando para desempaquetar .../22-python-pip-whl_9.0.1-2.3~ubuntu1.18.04.1_all.deb ...
Desempaquetando python-pip-whl (9.0.1-2.3~ubuntu1.18.04.1) ...
Seleccionando el paquete python-pip previamente no seleccionado.
Preparando para desempaquetar .../23-python-pip_9.0.1-2.3~ubuntu1.18.04.1_all.deb ...
Desempaquetando python-pip (9.0.1-2.3~ubuntu1.18.04.1) ...
Seleccionando el paquete python-setuptools previamente no seleccionado.
Preparando para desempaquetar .../24-python-setuptools_39.0.1-2_all.deb ...
Desempaquetando python-setuptools (39.0.1-2) ...
Seleccionando el paquete python-virtualenv previamente no seleccionado.
Preparando para desempaquetar .../25-python-virtualenv_15.1.0+ds-1.1_all.deb ...
Desempaquetando python-virtualenv (15.1.0+ds-1.1) ...
Seleccionando el paquete python-wheel previamente no seleccionado.
Preparando para desempaquetar .../26-python-wheel_0.30.0-0.2_all.deb ...
Desempaquetando python-wheel (0.30.0-0.2) ...
Seleccionando el paquete python-xdg previamente no seleccionado.
Preparando para desempaquetar .../27-python-xdg_0.25-4ubuntu1_all.deb ...
Desempaquetando python-xdg (0.25-4ubuntu1) ...
Seleccionando el paquete python3-virtualenv previamente no seleccionado.
Preparando para desempaquetar .../28-python3-virtualenv_15.1.0+ds-1.1_all.deb ...
Desempaquetando python3-virtualenv (15.1.0+ds-1.1) ...
Seleccionando el paquete virtualenv previamente no seleccionado.
Preparando para desempaquetar .../29-virtualenv_15.1.0+ds-1.1_all.deb ...
Desempaquetando virtualenv (15.1.0+ds-1.1) ...
Seleccionando el paquete libyaml-dev:amd64 previamente no seleccionado.
Preparando para desempaquetar .../30-libyaml-dev_0.1.7-2ubuntu3_amd64.deb ...
Desempaquetando libyaml-dev:amd64 (0.1.7-2ubuntu3) ...
Configurando python-secretstorage (2.3.1-2) ...
Configurando python-pip-whl (9.0.1-2.3~ubuntu1.18.04.1) ...
Configurando python-setuptools (39.0.1-2) ...
Configurando git-man (1:2.17.1-1ubuntu0.7) ...
Configurando make (4.1-9.1ubuntu1) ...
Configurando python-crypto (2.6.1-8ubuntu2) ...
Configurando python-keyring (10.6.0-1) ...
Configurando liberror-perl (0.17025-1) ...
Configurando python-wheel (0.30.0-0.2) ...
Configurando libyaml-dev:amd64 (0.1.7-2ubuntu3) ...
Configurando python-keyrings.alt (3.0-1) ...
Configurando dpkg-dev (1.19.0.5ubuntu2.3) ...
Configurando python3-virtualenv (15.1.0+ds-1.1) ...
Configurando libfakeroot:amd64 (1.22-2ubuntu1) ...
Configurando python-virtualenv (15.1.0+ds-1.1) ...
Configurando libalgorithm-diff-perl (1.19.03-1) ...
Configurando libpython2.7-dev:amd64 (2.7.17-1~18.04) ...
Configurando python-pip (9.0.1-2.3~ubuntu1.18.04.1) ...
Configurando virtualenv (15.1.0+ds-1.1) ...
Configurando python2.7-dev (2.7.17-1~18.04) ...
Configurando python-all (2.7.15~rc1-1) ...
Configurando git (1:2.17.1-1ubuntu0.7) ...
Configurando python-xdg (0.25-4ubuntu1) ...
Configurando libpython-dev:amd64 (2.7.15~rc1-1) ...
Configurando build-essential (12.4ubuntu1) ...
Configurando python-dev (2.7.15~rc1-1) ...
Configurando libpython-all-dev:amd64 (2.7.15~rc1-1) ...
Configurando fakeroot (1.22-2ubuntu1) ...
update-alternatives: utilizando /usr/bin/fakeroot-sysv para proveer /usr/bin/fakeroot (fakeroot) en modo automático
Configurando libalgorithm-merge-perl (0.08-3) ...
Configurando libalgorithm-diff-xs-perl (0.04-5) ...
Configurando python-all-dev (2.7.15~rc1-1) ...
Procesando disparadores para libc-bin (2.27-3ubuntu1) ...
Procesando disparadores para man-db (2.8.3-2ubuntu0.1) ...
soloelectronicos@ubuntusoloelectronicos:~$ mkdir OctoPrint && cd OctoPrint
soloelectronicos@ubuntusoloelectronicos:~/OctoPrint$ virtualenv venv
Running virtualenv with interpreter /usr/bin/python2
New python executable in /home/soloelectronicos/OctoPrint/venv/bin/python2
Also creating executable in /home/soloelectronicos/OctoPrint/venv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
soloelectronicos@ubuntusoloelectronicos:~/OctoPrint$ source venv/bin/activate
(venv) soloelectronicos@ubuntusoloelectronicos:~/OctoPrint$ pip install pip --upgrade
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
(venv) soloelectronicos@ubuntusoloelectronicos:~/OctoPrint$ pip install octoprint
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting octoprint
Downloading OctoPrint-1.4.0-py2.py3-none-any.whl (3.3 MB)
|████████████████████████████████| 3.3 MB 1.6 MB/s
Collecting websocket-client<0.57,>=0.56
Downloading websocket_client-0.56.0-py2.py3-none-any.whl (200 kB)
|████████████████████████████████| 200 kB 5.8 MB/s
Collecting pylru<1.3,>=1.2
Downloading pylru-1.2.0.tar.gz (18 kB)
Collecting psutil<5.7,>=5.6.5
Downloading psutil-5.6.7.tar.gz (448 kB)
|████████████████████████████████| 448 kB 3.8 MB/s
Collecting sarge==0.1.5post0
Downloading sarge-0.1.5.post0.tar.gz (17 kB)
Collecting flask<0.13,>=0.12
Downloading Flask-0.12.5-py2.py3-none-any.whl (81 kB)
|████████████████████████████████| 81 kB 1.6 MB/s
Collecting Flask-Babel<0.13,>=0.12
Downloading Flask-Babel-0.12.2.tar.gz (44 kB)
|████████████████████████████████| 44 kB 511 kB/s
Collecting werkzeug<0.17,>=0.16
Downloading Werkzeug-0.16.1-py2.py3-none-any.whl (327 kB)
|████████████████████████████████| 327 kB 5.2 MB/s
Collecting tornado==4.5.3
Downloading tornado-4.5.3.tar.gz (484 kB)
|████████████████████████████████| 484 kB 5.3 MB/s
Collecting frozendict<1.3,>=1.2
Downloading frozendict-1.2.tar.gz (2.6 kB)
Collecting wrapt<1.12,>=1.11.2
Downloading wrapt-1.11.2.tar.gz (27 kB)
Collecting monotonic<1.6,>=1.5; python_version < "3"
Downloading monotonic-1.5-py2.py3-none-any.whl (5.3 kB)
Collecting PyYAML<6,>=5.1
Downloading PyYAML-5.3.1.tar.gz (269 kB)
|████████████████████████████████| 269 kB 5.2 MB/s
Collecting netifaces<0.11,>=0.10.9
Downloading netifaces-0.10.9-cp27-cp27mu-manylinux1_x86_64.whl (31 kB)
Collecting semantic-version<2.9,>=2.8
Downloading semantic_version-2.8.4-py2.py3-none-any.whl (15 kB)
Collecting scandir<1.11,>=1.10; python_version < "3"
Downloading scandir-1.10.0.tar.gz (33 kB)
Collecting chainmap<1.1,>=1.0.3; python_version < "3"
Downloading chainmap-1.0.3.tar.gz (6.3 kB)
Collecting Click<8,>=7
Downloading click-7.1.1-py2.py3-none-any.whl (82 kB)
|████████████████████████████████| 82 kB 275 kB/s
Collecting awesome-slugify<1.7,>=1.6.5
Downloading awesome-slugify-1.6.5.tar.gz (8.4 kB)
Collecting pkginfo<1.6,>=1.5.0.1
Downloading pkginfo-1.5.0.1-py2.py3-none-any.whl (25 kB)
Collecting Flask-Login<0.5,>=0.4.1
Downloading Flask-Login-0.4.1.tar.gz (14 kB)
Collecting Jinja2<2.9,>=2.8.1
Downloading Jinja2-2.8.1-py2.py3-none-any.whl (264 kB)
|████████████████████████████████| 264 kB 9.1 MB/s
Collecting markdown<3.2,>=3.1
Downloading Markdown-3.1.1-py2.py3-none-any.whl (87 kB)
|████████████████████████████████| 87 kB 1.3 MB/s
Collecting cachelib<0.2,>=0.1
Downloading cachelib-0.1.tar.gz (9.8 kB)
Collecting requests<3,>=2.22.0
Downloading requests-2.23.0-py2.py3-none-any.whl (58 kB)
|████████████████████████████████| 58 kB 1.4 MB/s
Collecting Flask-Assets<0.13,>=0.12
Downloading Flask-Assets-0.12.tar.gz (22 kB)
Collecting watchdog<0.10,>=0.9.0
Downloading watchdog-0.9.0.tar.gz (85 kB)
|████████████████████████████████| 85 kB 909 kB/s
Collecting netaddr<0.8,>=0.7.19
Downloading netaddr-0.7.19-py2.py3-none-any.whl (1.6 MB)
|████████████████████████████████| 1.6 MB 5.9 MB/s
Collecting feedparser<5.3,>=5.2.1
Downloading feedparser-5.2.1.tar.bz2 (192 kB)
|████████████████████████████████| 192 kB 6.7 MB/s
Collecting futures<3.4,>=3.3; python_version < "3"
Downloading futures-3.3.0-py2-none-any.whl (16 kB)
Collecting future<0.19,>=0.18.2
Downloading future-0.18.2.tar.gz (829 kB)
|████████████████████████████████| 829 kB 4.9 MB/s
Collecting typing<4,>=3.7.4.1; python_version < "3"
Downloading typing-3.7.4.1-py2-none-any.whl (26 kB)
Collecting rsa<5,>=4.0
Downloading rsa-4.0-py2.py3-none-any.whl (38 kB)
Collecting sentry-sdk==0.13.2
Downloading sentry_sdk-0.13.2-py2.py3-none-any.whl (91 kB)
|████████████████████████████████| 91 kB 2.0 MB/s
Collecting regex!=2018.11.6
Downloading regex-2020.4.4.tar.gz (695 kB)
|████████████████████████████████| 695 kB 4.4 MB/s
Collecting filetype<2,>=1.0.5
Downloading filetype-1.0.6-py2.py3-none-any.whl (15 kB)
Collecting pyserial<3.5,>=3.4
Downloading pyserial-3.4-py2.py3-none-any.whl (193 kB)
|████████████████████████████████| 193 kB 4.3 MB/s
Collecting emoji<0.6,>=0.5.4
Downloading emoji-0.5.4.tar.gz (43 kB)
|████████████████████████████████| 43 kB 96 kB/s
Collecting blinker<1.5,>=1.4
Downloading blinker-1.4.tar.gz (111 kB)
|████████████████████████████████| 111 kB 6.2 MB/s
Collecting six
Downloading six-1.14.0-py2.py3-none-any.whl (10 kB)
Collecting itsdangerous>=0.21
Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting Babel>=2.3
Downloading Babel-2.8.0-py2.py3-none-any.whl (8.6 MB)
|████████████████████████████████| 8.6 MB 45 kB/s
Collecting singledispatch
Downloading singledispatch-3.4.0.3-py2.py3-none-any.whl (12 kB)
Collecting certifi
Downloading certifi-2020.4.5.1-py2.py3-none-any.whl (157 kB)
|████████████████████████████████| 157 kB 4.6 MB/s
Collecting backports_abc>=0.4
Downloading backports_abc-0.5-py2.py3-none-any.whl (5.2 kB)
Collecting Unidecode<0.05,>=0.04.14
Downloading Unidecode-0.04.21-py2.py3-none-any.whl (228 kB)
|████████████████████████████████| 228 kB 6.4 MB/s
Collecting MarkupSafe
Downloading MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl (24 kB)
Requirement already satisfied: setuptools>=36 in ./venv/lib/python2.7/site-packages (from markdown<3.2,>=3.1->octoprint) (44.1.0)
Collecting idna<3,>=2.5
Downloading idna-2.9-py2.py3-none-any.whl (58 kB)
|████████████████████████████████| 58 kB 1.5 MB/s
Collecting chardet<4,>=3.0.2
Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB)
|████████████████████████████████| 133 kB 5.0 MB/s
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
Downloading urllib3-1.25.9-py2.py3-none-any.whl (126 kB)
|████████████████████████████████| 126 kB 28 kB/s
Collecting webassets>=0.11.1
Downloading webassets-2.0.tar.gz (288 kB)
|████████████████████████████████| 288 kB 4.9 MB/s
Collecting argh>=0.24.1
Downloading argh-0.26.2-py2.py3-none-any.whl (30 kB)
Collecting pathtools>=0.1.1
Downloading pathtools-0.1.2.tar.gz (11 kB)
Collecting pyasn1>=0.1.3
Downloading pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
|████████████████████████████████| 77 kB 361 kB/s
Collecting pytz>=2015.7
Downloading pytz-2019.3-py2.py3-none-any.whl (509 kB)
|████████████████████████████████| 509 kB 7.8 MB/s
Building wheels for collected packages: pylru, psutil, sarge, Flask-Babel, tornado, frozendict, wrapt, PyYAML, scandir, chainmap, awesome-slugify, Flask-Login, cachelib, Flask-Assets, watchdog, feedparser, future, regex, emoji, blinker, webassets, pathtools
Building wheel for pylru (setup.py) ... done
Created wheel for pylru: filename=pylru-1.2.0-py2-none-any.whl size=15691 sha256=675dd90404356bf5ed34ec3e564e0123e4bbc29ddcf0631c09a82a9957be7844
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/ad/dc/4f/254e963083f1120664b393883428784ed55be2d494f3e3f720
Building wheel for psutil (setup.py) ... done
Created wheel for psutil: filename=psutil-5.6.7-cp27-cp27mu-linux_x86_64.whl size=258804 sha256=3af6bf302df94d32bcfb8a925cccce28875b6d63d2640eed8f9abe20b5f2a271
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/b6/8c/7a/f28c6f4fa509c6a274590af7eef26e5a206ace8753c59a4257
Building wheel for sarge (setup.py) ... done
Created wheel for sarge: filename=sarge-0.1.5.post0-py2-none-any.whl size=18869 sha256=f23c027afdd626f12a5d7d0529ccd01f3ca9a226e274aafe7c4c03554311b6a2
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/aa/ac/c4/dcefe7565f76a83c484e85a2ba49e3a294eebaddc39d4ce35e
Building wheel for Flask-Babel (setup.py) ... done
Created wheel for Flask-Babel: filename=Flask_Babel-0.12.2-py2-none-any.whl size=9263 sha256=83b1bcfb83dd4b9b318f42f30ee00714874ce2048194a34baff1485003446932
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/ac/10/c9/c58c29cda855cf63d2e4d47c01b619515b36f73b8199ef009e
Building wheel for tornado (setup.py) ... done
Created wheel for tornado: filename=tornado-4.5.3-cp27-cp27mu-linux_x86_64.whl size=431491 sha256=650c2f68942b6bb1cf7094a05077432c656f6c0a8db5390fc7e91192db185ebd
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/6b/95/34/e25e3530e2ed9ed153aec63e467140ac4aa392fcac03691276
Building wheel for frozendict (setup.py) ... done
Created wheel for frozendict: filename=frozendict-1.2-py2-none-any.whl size=3147 sha256=7c9b482a62531cbdee122a5a8a994b0030b8b9aafc3809441ad0c06bbf6ed3ce
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/be/5d/07/a6bd784a07cfa099fa10004afb695654e5a92027092d234b71
Building wheel for wrapt (setup.py) ... done
Created wheel for wrapt: filename=wrapt-1.11.2-cp27-cp27mu-linux_x86_64.whl size=49269 sha256=666d153987e49f9fcadf505f66f5dca3bb0873c44b73baf9bd4ed3d507189ba9
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/aa/0a/cb/e31e525e074359f542ff2240747f3d4cc1dad9c895bb6df70c
Building wheel for PyYAML (setup.py) ... done
Created wheel for PyYAML: filename=PyYAML-5.3.1-cp27-cp27mu-linux_x86_64.whl size=194714 sha256=9e3b68b67abb78274f7a2ad7a8b05b021911e1e93977612e30f9a98c3f764297
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/d1/d5/a0/3c27cdc8b0209c5fc1385afeee936cf8a71e13d885388b4be2
Building wheel for scandir (setup.py) ... done
Created wheel for scandir: filename=scandir-1.10.0-cp27-cp27mu-linux_x86_64.whl size=33234 sha256=4476c72af7bdef553fc3ee2e8c819d0bf2a13d1418c022e8d5049c4ef74c2452
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/58/2c/26/52406f7d1f19bcc47a6fbd1037a5f293492f5cf1d58c539edb
Building wheel for chainmap (setup.py) ... done
Created wheel for chainmap: filename=chainmap-1.0.3-py2-none-any.whl size=4962 sha256=8bcf080b081b2cf2dc20ea7a5954701ce484968654700ed90a98fbf341c6904e
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/b1/0b/42/1e93b86bd3487fd8a4c6455aea79e7f4b7bbc229b24802d336
Building wheel for awesome-slugify (setup.py) ... done
Created wheel for awesome-slugify: filename=awesome_slugify-1.6.5-py2-none-any.whl size=8351 sha256=b4cff01fec24ff6d29ce6eb4bcd3aa30085842740e1a4b88cbc51042755feda9
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/97/b6/b0/9a83c3d0bf0fb904a13fc4cff6aa539cf3bcf21f2965a1c241
Building wheel for Flask-Login (setup.py) ... done
Created wheel for Flask-Login: filename=Flask_Login-0.4.1-py2.py3-none-any.whl size=15933 sha256=56b0fbb535255b68ae789a98f82aa569745fc68adbf3e00574c182994da751c4
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/72/fb/8c/14220bd0fa946a657173c0775d81c23b371ed3ba7dc7b0964e
Building wheel for cachelib (setup.py) ... done
Created wheel for cachelib: filename=cachelib-0.1-py2-none-any.whl size=13017 sha256=324b56ec74d28af9a78f7526b5f8c45b453a15d16cb97cbd77bca8ad19357e46
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/33/a6/f6/c9b0f8cdc86d0ef35777789797afc893cce477a39500ee28d2
Building wheel for Flask-Assets (setup.py) ... done
Created wheel for Flask-Assets: filename=Flask_Assets-0.12-py2-none-any.whl size=8472 sha256=f5f9af6a76d59df6560584f4b271609ae3fd6eafdcf3d0e6d7fdd4d764e43764
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/e2/bd/05/5d056fac0a9041b7d18a79f86fb93f20caf7334dd51eba2af6
Building wheel for watchdog (setup.py) ... done
Created wheel for watchdog: filename=watchdog-0.9.0-py2-none-any.whl size=73651 sha256=47edff5f90cf70785cff3a2d1689285dafee245b5dd613193c2511b4f9e8e56e
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/29/d7/fb/9194ada05f6dfcaea7da16150cd523f783ad918b35da6ee066
Building wheel for feedparser (setup.py) ... done
Created wheel for feedparser: filename=feedparser-5.2.1-py2-none-any.whl size=44995 sha256=63b177c5781d1eaa5ffe9be07e6b61162b747bc15fce48d6ec0392a0d15daec6
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/d4/3c/a1/fd7bcf389a776ce0be95e1e3176421b92dd24d0b78a58908a1
Building wheel for future (setup.py) ... done
Created wheel for future: filename=future-0.18.2-py2-none-any.whl size=502566 sha256=e24550dc4db23f5d47175e58e24a01be299d9981359804646ec70da01f12f6b4
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/5f/11/0c/aad680baf5ef4fbcbab992c9f03e1130357e0c173a4fdabfff
Building wheel for regex (setup.py) ... done
Created wheel for regex: filename=regex-2020.4.4-cp27-cp27mu-linux_x86_64.whl size=344932 sha256=53171cf495b86f57fcd40646a73b75c61dada76ee3d0f46df694576325e1e366
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/9d/6c/47/0e5edf34d09bdab91b48f150ca86fdb0b0f26666a8f7df8ad4
Building wheel for emoji (setup.py) ... done
Created wheel for emoji: filename=emoji-0.5.4-py2-none-any.whl size=42174 sha256=cc29db088a91d6de2e21ebce25792d471a2970f523f1e60a2ab9b6e572fe8a3f
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/01/fb/20/2f71ca373e9334ab3bc6edeac956519d94ec3dcc9fad7c3eb5
Building wheel for blinker (setup.py) ... done
Created wheel for blinker: filename=blinker-1.4-py2-none-any.whl size=13451 sha256=b4ae6cbf1d76ad6f48d8a8e13a7c7da0f948976f356a899d619a262aafeae6dc
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/7b/1f/a0/7ce496c69b9be7cef75645749e256d5ef2dc9d08336f92248b
Building wheel for webassets (setup.py) ... done
Created wheel for webassets: filename=webassets-2.0-py2-none-any.whl size=142871 sha256=ea4a2248dbda0be345a6caef74971b54a65c58ae1cd05654d3ac6e509f739740
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/e2/df/2b/c142c0570f34a8e56187c83045b006e56d5918869ff94a56f6
Building wheel for pathtools (setup.py) ... done
Created wheel for pathtools: filename=pathtools-0.1.2-py2-none-any.whl size=8784 sha256=ac6a73ac9a18654cc20f286ada97c2f2910bc6b7ed85aecef000c2d0e17ebd95
Stored in directory: /home/soloelectronicos/.cache/pip/wheels/da/24/4e/5b716376944d90d1406666897dbd020764405d5242afb5b236
Successfully built pylru psutil sarge Flask-Babel tornado frozendict wrapt PyYAML scandir chainmap awesome-slugify Flask-Login cachelib Flask-Assets watchdog feedparser future regex emoji blinker webassets pathtools
Installing collected packages: six, websocket-client, pylru, psutil, sarge, werkzeug, Click, itsdangerous, MarkupSafe, Jinja2, flask, pytz, Babel, Flask-Babel, singledispatch, certifi, backports-abc, tornado, frozendict, wrapt, monotonic, PyYAML, netifaces, semantic-version, scandir, chainmap, regex, Unidecode, awesome-slugify, pkginfo, Flask-Login, markdown, cachelib, idna, chardet, urllib3, requests, webassets, Flask-Assets, argh, pathtools, watchdog, netaddr, feedparser, futures, future, typing, pyasn1, rsa, sentry-sdk, filetype, pyserial, emoji, blinker, octoprint
Successfully installed Babel-2.8.0 Click-7.1.1 Flask-Assets-0.12 Flask-Babel-0.12.2 Flask-Login-0.4.1 Jinja2-2.8.1 MarkupSafe-1.1.1 PyYAML-5.3.1 Unidecode-0.4.21 argh-0.26.2 awesome-slugify-1.6.5 backports-abc-0.5 blinker-1.4 cachelib-0.1 certifi-2020.4.5.1 chainmap-1.0.3 chardet-3.0.4 emoji-0.5.4 feedparser-5.2.1 filetype-1.0.6 flask-0.12.5 frozendict-1.2 future-0.18.2 futures-3.3.0 idna-2.9 itsdangerous-1.1.0 markdown-3.1.1 monotonic-1.5 netaddr-0.7.19 netifaces-0.10.9 octoprint-1.4.0 pathtools-0.1.2 pkginfo-1.5.0.1 psutil-5.6.7 pyasn1-0.4.8 pylru-1.2.0 pyserial-3.4 pytz-2019.3 regex-2020.4.4 requests-2.23.0 rsa-4.0 sarge-0.1.5.post0 scandir-1.10.0 semantic-version-2.8.4 sentry-sdk-0.13.2 singledispatch-3.4.0.3 six-1.14.0 tornado-4.5.3 typing-3.7.4.1 urllib3-1.25.9 watchdog-0.9.0 webassets-2.0 websocket-client-0.56.0 werkzeug-0.16.1 wrapt-1.11.2

Actualización

OctoPrint debería poder  actualizarse automáticamente y también permitirle cambiar a otros canales de lanzamiento de forma inmediata.

Sin embargo, si por alguna razón desea o necesita realizar algo de esto manualmente, ejecute los siguientes comandos para instalar <versión> de OctoPrint:

source ~/OctoPrint/venv/bin/activate

pip install octoprint==<version>

p.ej.

fuente ~ / OctoPrint / venv / bin / enable
pip install octoprint == 1.3.12rc1

Admitir reinicio / apagado a través del menú del sistema de OctoPrint

En Configuración> Comandos, configure los siguientes comandos:

Reinicio de  OctoPrint:

sudo service octoprint restart

Reinicio  del sistema:

 sudo shutdown -r now

Apagado del sistema:

sudo shutdown -h now

 

Arranque automático

Para  que Octoprint   arranque automático al iniciar el sistema ,descargue los archivos de script de inicio del repositorio de OctoPrint, muévalos a sus respectivas carpetas y haga que el script de inicio sea ejecutable:

wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.init && sudo mv octoprint.init /etc/init.d/octoprint

wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.default && sudo mv octoprint.default / etc / default / octoprint

sudo chmod + x /etc/init.d/octoprint

Ajuste las rutas a su binario octoprint en / etc / default / octoprint. Si lo configura en un virtualenv como se describe anteriormente, asegúrese de que su / etc / default / octoprint se modifique así:

DAEMON = / home / pi / OctoPrint / venv / bin / octoprint

¡Observe también el # eliminado al comienzo de la línea, descomentándolo y haciéndolo efectivo!

Luego, agregue el script al inicio automático utilizando los valores predeterminados de sudo update-rc.d octoprint.

Esto también le permitirá iniciar / detener / reiniciar el demonio OctoPrint a través de

sudo service octoprint {start|stop|restart}

 

Puerto 80

Si desea tener una URL más agradable o simplemente necesita que OctoPrint se ejecute en el puerto 80 (puerto predeterminado de http) debido a algunas restricciones de red, se recomienda usar HAProxy 358 como proxy inverso en lugar de configurar OctoPrint para que se ejecute en el puerto 80.

Esto tiene lo siguiente ventajas:

    • OctoPrint no necesita ejecutarse con privilegios de root, que necesitaría para poder vincularse al puerto 80 gracias a las restricciones de puertos privilegiados de Linux
    • También puede hacer que mjpg-streamer sea accesible en el puerto 80
    • Puede agregar autenticación a OctoPrint
    • Dependiendo de la versión de HAProxy, también puede usar SSL para acceder a OctoPrint

La configuración es la siguiente:

 sudo apt install haproxy

Estoy usando la siguiente configuración en /etc/haproxy/haproxy.cfg, para más ejemplos eche un vistazo aquí 864:

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 v4v6
use_backend webcam if { path_beg /webcam/ }
default_backend octoprint

backend octoprint
reqrep ^([^\ :]*)\ /(.*) \1\ /\2
option forwardfor
server octoprint1 127.0.0.1:5000

backend webcam
reqrep ^([^\ :]*)\ /webcam/(.*) \1\ /\2
server webcam1 127.0.0.1:8080

 

Esto hará que OctoPrint sea accesible en http: // <IP > / y hará que mjpg-streamer sea accesible en http: // <IP > / webcam /.

También deberá modificar / etc / default / haproxy y habilitar HAProxy estableciendo ENABLED en 1. Después de eso, puede iniciar HAProxy emitiendo el siguiente comando

sudo service haproxy start

 

Señalar su navegador a http: // <la IP > debería saludarlo con la interfaz de usuario de OctoPrint. Ahora abra la configuración y cambie a la pestaña de la cámara web o, alternativamente, abra ~ / .octoprint / config.yaml.  Establezca la URL de transmisión de la cámara web desde http: // <IP >: 8080 /? Action = stream a / webcam /? Action = stream (deje la instantánea en http://127.0.0.1:8080/?action=snapshot! ) y vuelva a cargar la página.

Si todo funciona, puede agregar las siguientes líneas a ~ / .octoprint / config.yaml (solo créelo si aún no existe) para que el servidor se vincule solo a la interfaz de lopback

server:

host: 127.0.0.1


Reinicie el servidor. OctoPrint aún debería estar disponible en el puerto 80, incluida la alimentación de la cámara web (si está habilitada)

 

 

Soporte de webcam

Si también desea soporte para cámara web y timelapse, deberá descargar y compilar MJPG-Streamer:

cd ~
sudo apt install subversion libjpeg62-turbo-dev imagemagick ffmpeg libv4l-dev cmake
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
export LD_LIBRARY_PATH=.
make

 

Los paquetes requeridos dependen de la versión subyacente de Debian! Lo anterior es lo que debería funcionar en las imágenes actuales

Con suerte, esto debería ejecutarse sin ningún error de compilación. Entonces debería poder iniciar el servidor de la cámara web usando:

./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so"

 

Esto debería dar el siguiente resultado:

MJPG Streamer Version: svn rev:
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 5
i: Format............: MJPEG
[...]
o: www-folder-path...: disabled
o: HTTP TCP port.....: 8080
o: username:password.: disabled
o: commands..........: enabled

 

Para algunas cámaras web (incluida la PS3 Eye), deberá forzar el modo YUV mediante el siguiente comando de inicio:

./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so"

 

Tenga en cuenta que el modo YUV ejercerá tensión adicional en la CPU de su PC , lo que reducirá su rendimiento, posiblemente hasta el punto de causar problemas de impresión. Si su cámara requiere el parámetro -y para funcionar, considere reemplazarlo por uno que no lo haga.

 

Ahora apunte en su navegador a

http: // : 8080 /? action = stream,

, por lo debería ver una imagen en movimiento a 5 fps.  (Si recibe un mensaje de error sobre los archivos o directorios faltantes, debería ayudar al complemento de salida con -o «./output_http.so -w ./www»).

Abra el cuadro de diálogo de configuración de OctoPrint y en Webcam & Timelapse configuró lo siguiente:

    • Stream URL: /webcam/?action=stream
    • Snapshot URL: http://127.0.0.1:8080/?action=snapshot
    • Path to FFMPEG: /usr/bin/ffmpeg

Reinicie el servidor OctoPrint, borre el caché en su navegador y vuelva a cargar la página OctoPrint. Ahora debería ver la transmisión desde la cámara web en la pestaña «Control» y una pestaña «Timelapse» con opciones.

Si desea poder iniciar y detener mjpeg-streamer desde OctoPrint, coloque lo siguiente en / home /XXXX / scripts / webcam:

#!/bin/bash
# Start / stop streamer daemon

case "$1" in
start)
/home/pi/scripts/webcamDaemon >/dev/null 2>&1 &
echo "$0: started"
;;
stop)
pkill -x webcamDaemon
pkill -x mjpg_streamer
echo "$0: stopped"
;;
*)
echo "Usage: $0 {start|stop}" >&2
;;
esac

Ponga esto en /home/XXXX/scripts/webcamDaemon:

#!/bin/bash

MJPGSTREAMER_HOME=/home/pi/mjpg-streamer/mjpg-streamer-experimental
MJPGSTREAMER_INPUT_USB="input_uvc.so"
MJPGSTREAMER_INPUT_RASPICAM="input_raspicam.so"

# init configuration
camera="auto"
camera_usb_options="-r 640x480 -f 10"
camera_raspi_options="-fps 10"

if [ -e "/boot/octopi.txt" ]; then
    source "/boot/octopi.txt"
fi

# runs MJPG Streamer, using the provided input plugin + configuration
function runMjpgStreamer {
    input=$1
    pushd $MJPGSTREAMER_HOME
    echo Running ./mjpg_streamer -o "output_http.so -w ./www" -i "$input"
    LD_LIBRARY_PATH=. ./mjpg_streamer -o "output_http.so -w ./www" -i "$input"
    popd
}

# starts up the RasPiCam
function startRaspi {
    logger "Starting Raspberry Pi camera"
    runMjpgStreamer "$MJPGSTREAMER_INPUT_RASPICAM $camera_raspi_options"
}

# starts up the USB webcam
function startUsb {
    logger "Starting USB webcam"
    runMjpgStreamer "$MJPGSTREAMER_INPUT_USB $camera_usb_options"
}

# we need this to prevent the later calls to vcgencmd from blocking
# I have no idea why, but that's how it is...
vcgencmd version

# echo configuration
echo camera: $camera
echo usb options: $camera_usb_options
echo raspi options: $camera_raspi_options

# keep mjpg streamer running if some camera is attached
while true; do
    if [ -e "/dev/video0" ] && { [ "$camera" = "auto" ] || [ "$camera" = "usb" ] ; }; then
        startUsb
    elif [ "`vcgencmd get_camera`" = "supported=1 detected=1" ] && { [ "$camera" = "auto" ] || [ "$camera" = "raspi" ] ; }; then
        startRaspi
    fi

    sleep 120
done

Asegúrese de que ambos archivos sean ejecutables:

chmod + x / home / XXX / scripts / webcam
chmod + x / home / XXXX / scripts / webcamDaemon

Si desea diferentes opciones de cámara, colóquelas en /boot/octopi.txt o modifique el script en consecuencia.

Si desea el inicio automático de la cámara web, debe agregar la siguiente línea a /etc/rc.local (solo asegúrese de colocarla sobre la línea que dice la salida 0).

/ inicio / pi / scripts / webcam start

Si desea iniciar y detener el servidor de la cámara web a través del menú del sistema de OctoPrint, agregue lo siguiente a config.yaml:

 

system:
actions:
- action: streamon
command: /home/pi/scripts/webcam start
confirm: false
name: Start video stream
- action: streamoff
command: sudo /home/pi/scripts/webcam stop
confirm: false
name: Stop video stream

 

 

 

Mas información  aqui