Smoothie is primarily a G-code interpreter. Here is a list of the G-codes that are currently supported :
format
Make sure your Gcode is in uppercase, separation by space characters is optional, as shown everywhere on this wiki. For example :
G1 X10 F100
Lowercase is reserved for commands.
G codes
G-Code | Description | Example |
---|---|---|
G0 | Move to the given coordinates. To the contrary of G1, if there is a tool it will most of the time be off during this kind of move. This is a “go to” move rather than a “do while going to” move. The F parameter defines speed and is remembered by subsequent commands ( specified in millimetres/minute ) (command is modal) | G0 X10 Y5 F100 |
G1 | Move to the given coordinates, see above for difference with G0. Takes the same F parameter as G0. (command is modal) | G1 X20 Y2.3 F200 |
G2 | Clockwise circular motion : go to point with coordinates XYZ while rotating around point with relative coordinates IJ (command is not modal) | G2 X10 J5 |
G3 | Counter-clockwise motion : see above (command is not modal) | G3 Y5 X10 I2 |
G4 | Dwell S<seconds> or P<milliseconds>, In grbl mode P is float seconds to comply with gcode standards | G4 P1000 |
G10 | Do firmware extruder retract | G10 |
G11 | Do firmware extruder un-retract | G11 |
G10 L2 G10 L20 | set workspace coordinates http://linuxcnc.org/docs/html/gcode/coordinates.html and http://linuxcnc.org/docs/html/gcode/g-code.html#gcode:g10-l2 | G10 L2 P1 X0 |
G17 | Select XYZ plane (command is modal) | G17 |
G18 | Select XZY plane (command is modal) | G18 |
G19 | Select YZX plane (command is modal) | G19 |
G20 | Inch mode : passed coordinates will be considered as Inches, so internally translated to millimeters (command is modal) | G20 |
G21 | Millimeter mode ( default ) : passed coordinates will be considered as millimeters (command is modal) | G21 |
G28 | Home The given axis, or if no axis specified home all axis at the same time (edge) NOTE in CNC/grbl mode this is move to park position, use $H to home | G28 |
G28.1 | Set Predefined Position - This position will be returned to by G28.2 | G28.1 |
G28.2 | Move to Predefined Position - This perform a rapid move to the Predefined position set by G28.1 (in grbl mode this will do a home) | G28.2 |
G28.3 | Manual Homing - This allows you to set a home position manually without moving to limit switches | G28.3 |
G28.4 | Manual Homing based on actuator position- This allows you to set a home position manually based on actuator position (used for rotary delta) | G28.4 |
G28.5 | clears the homed flag for the specified axis, or all if not specifed | G28.5 G28.5 Z0 |
G28.6 | shows the homing status of each axis | G28.6 |
G30 | Simple Z probe at current XY, reports distance moved down until probe triggers. optional F parameter defines the speed of probing, zprobe.slow_feedrate is used when not supplied | G30+G30 F100 |
G31 | Depends on levelling strategy selected, see ZProbe | G31 |
G32 | Uses Z probe to calibrate delta endstops and arm radius, use R parameter to select only arm radius calibration and E to select only endstop calibration. I to set target precision, J to set probe_radius, K to keep current endstop trim settings. In Zgrid module, it starts the grid probing | G32+G32 R+G32 E+G32 EK+G32 I0.02 |
G38.2 G38.3 | Standard probe commands implemented as documented here | G38.2 Z+10 |
G53-G59.3 | use workspace coordinates http://linuxcnc.org/docs/html/gcode/coordinates.html and http://linuxcnc.org/docs/html/gcode/g-code.html#gcode:g54-g59.3 | G54 |
G90 | Absolute mode ( default ) : passed coordinates will be considered absolute ( relative to 0.0.0 ) (command is modal) | G90 |
G91 | Relative mode : passed coordinates will be considered relative to the current point (command is modal) | G91 |
G92 | Set global workspace coordinate system to specified coordinates http://linuxcnc.org/docs/html/gcode/g-code.html#gcode:g92 | G92 X0 Y0 Z0 |
G92.1 | clear the G92 and G30 Znnn offsets | G92.1 |
M-Code | Description | |
M3 | Starts the spindle. Only if spindle module is enabled. The S parameter sets the speed in rotations per minute | M3 S5000 |
M5 | Stops the spindle Only if spindle module is enabled. | M5 |
M17 | Enable stepper motors | M17 |
M18 | Disable stepper motors. With a parameter it will disable that stepper motor A will disable extruder 1 B will disable extruder 2. E0 will disable the currently selected extruder | M18 M18 X0 M18 E0 |
M20 | List SD card files | M20 |
M21 | Initialize the SD card. This does nothing in Smoothie but is kept for compatibility | M21 |
M23 | Select a file | M23 file.gcode |
M24 | Start or resume SD card print | M24 |
M25 | Pause SD card print | M25 |
M26 | Abort a SD card print | M26 |
M27 | Report print progress | M27 |
M28 | Begin write to SD card. Use M29 to indicate end of file. | M28 file.gcode |
M29 | End write to SD card. Used to end file write started with M28. | M29 |
M30 | Delete a file on the SD card | M30 file.gcode |
M32 | Select a file, and start playing it | M32 file.gcode |
M82 | Set absolute mode for extruder only | M82 |
M83 | Set relative mode for extruder only | M83 |
M84 | Disable steppers | M84 |
M92 | Set axis steps per mm for XYZ axis and/or ABC axis (M92 A100 sets A axis if it is NOT an extruder) | M92 X200 or M92 A1000 |
M104 | Set Extruder Temperature - S<temperature> | M104 S190 |
M105 | Read current temp | M105 |
M106 | Turn fan ON | M106 |
M107 | Turn fan OFF | M107 |
M109 | Set Extruder Temperature and Wait - S<temperature> | M109 S190 |
M110 | Set current line number -N<line number> | M110 N123 |
M112 | Halt all operations, turn off heaters, go into Halt state | |
M114 | Show current position of all axes, XYZ will be the last requested position | M114 |
M114.1 | Show current real time position of all axes | M114.1 |
M114.2 | Show current real time machine position of all axes | M114.2 |
M114.3 | Show current real time actuator position of all actuators | M114.3 |
M114.4 | Show last milestone | M114.4 |
M114.5 | Show last machine position | M114.5 |
M117 | Display message on LCD, blank message will clear it | M117 hello world or M117 |
M119 | Show limit switch status | M119 |
M120 | “Push” the current feed-rate and seek-rate so that another one can be temporarily used, then the current one can be restored | M120 |
M121 | “Pop” the current feed-rate and seek-rate, see M120 | M121 |
M140 | Set Bed Temperature - S<temperature> | M140 S55 |
M143 | Set Maximum Temperature - S<heater index> P<temperature> | M144 S0 P300 |
M190 | Set Bed Temperature and Wait - S<temperature> | M190 S55 |
M200 | Set E units for volumetric extrusion - D<filament diameter> set to 0 to disable volumetric extrusion | M200 D3.0 |
M203 | Set maximum cartesian feedrate your machine can sustain <mm/sec> | M203 X100 Y100 Z100 E10 |
M203.1 | Set maximum actuator feedrate your machine can sustain <mm/sec> | M203.1 X100 Y100 Z100 |
M203 Vnnn | Set maximum volumetric rate your extruider/hotend can sustain where nnn is <mm³/sec> | M203 V50 |
M204 | S<acceleration> Set default acceleration in mm/sec² NB setting axis acceleration will mean that the acceleration for a given move will be the lowest of the axis specified, the default is used if a specific axis is not set | M204 S1000 X500 Z100 E500 |
M205 | X<junction deviation> Z<z junction deviation> S<minimum planner speed>, Z junction deviation only applies to z only moves, 0 disables junction deviation for Z, -1 uses global junction deviation | M205 X0.05 S30.0 |
M206 | Set homing offsets | M206 X10 Y3 Z0.5 |
M207 | set retract length Smm Fmm/min Zzlift/hop Qfeedrate mm/min | M207 S4 F30 Z1 |
M208 | set retract recover length Smm surplus to the M207 S* Fmm/min | M208 S0 F8 |
M220 | S<factor in percent>- set speed factor override percentage | M220 S50 |
M221 | S<flow rate factor in percent>- set flow rate factor override percentage for current extruder | M221 S50 |
M301 | Edit temperature control PID parameters X<i_max> Y<max_pwm> | M301 S0 P30 I10 D10 X255.0000 Y255 |
M303 | Begin PID auto-tune cycle E<hotendid> S<temperature> | M303 E0 S185 - Tune extruder - M303 E1 S100 - Tune printbed - |
M304 | Abort PID auto-tuning | M304 |
M305 | Set parameters for the thermistor, where B is beta, R is r0 and X is t0; P is the ID from the thermistors list (use console command thermistors to get a list). | M305 B4066 |
M306 | Set homing offsets based on current position, subtracts current position from homing offset for specified axis | M306 Z0 |
M360 | Scara Morgan: Move to Theta 0 degree position. Adding P0 will save the current arm position as the Theta 0 degree position | M360 or M360 P0 |
M361 | Scara Morgan: Move to Theta 90 degree position. Adding P0 will save the current arm position as the Theta 90 degree position | M361 or M360 P0 |
M364 | Scara Morgan: M364: Move to Psi + Theta 90 degree position. Adding P0 will save the current arm position as the Psi + Theta 90 degree position | M364 or M344 P0 |
M370 | Z grid strategy: clears the ZGrid and the bed levelling is disabled until G32 is run again. Specify X and Y values to change grid size | M370 M370 X9 Y11 |
M371 | Z grid strategy: moves the head to the next calibration position without saving for manual calibration | M371 |
M372 | Z grid strategy: move the head to the next calibration position after saving the current probe point to memory - manual calbration | M372 |
M373 | Z grid strategy: completes calibration and enables the Z compensation grid | M373 |
M374 | Z grid strategy: save calibration grid. optional S parameter saves a custom file with numerical extention | M374 S123 |
M375 | Z grid strategy: load calibration grid. optional S Parameter loads a pre saved custom grid | M375 S123 |
M400 | Wait for the queue to be empty before answering “OK” | M400 |
M407 | Get filament detector information | M407 |
M500 | Save some volatile settings to an override file | M500 |
M501 | Load config-override file optionally specifying the extension | M501 - loads config-override, M501 test1 - loads config-override.test1 |
M502 | Delete the override file, reverting to config settings at next reset | M502 |
M503 | Display overridden settings if any | M503 |
M504 | Save the settings to an override file with specified extension | M504 test1 - saves to config-override.test1 |
M557 | Defines probe points | M557 P1 X30 Y40.5 |
M561 | clears the plane and the bed leveling is disabled until G32 is run again | M561 |
M565 | defines the probe offsets from the nozzle or tool head | M565 X3 Y4.5 Z+2.37 |
M600 | Suspend print in progress (use M601 to continue) | |
M601 | Resume suspended print | |
M665 | Set arm solution specific settings: Delta - L<arm length> R<arm radius> Z<max height> | M665 L341.0 R350 Z430 |
M666 | On a delta sets trim values for the endstops. (Positive values will crash physical endstops.) | M666 X+0.1 Y+0.2 Z+0.3 |
M670 | ZProbe feedrates Slow/fast(K)/Return (mm/sec) max_z (mm) height (mm) | M670 S5.00 K100.00 R0.00 Z357.55 H5.00 |
M906 | Set Current in milliamp for SPI drivers, only if the driver is handled by the motorcontrol module | M906 A1000 B1100 |
M907 | Set Current control via digipot for each axis (current in amps) | M907 X1.0 Y1.0 Z1.0 E1.5 |
M909 | Set microsteps (1/n), ONLY for advanced drivers handled by motordriver module, M909.1 will also set the steps/mm accordingly | M909 A16 B64 |
M910.x | setup advanced driver chips that support SPI setup, parameters are specific to each chip see chip docs | M910 |
M957 | (with Spindle module enabled) Report the current spindle speed and PWM value | M957 |
M958 | (with Spindle module enabled) Report the current spindle PID parameters. M958 Px.xx Ix.xx Dx.xx will set them (to save the new values, you need to edit config file manually). | M958 P0.1 |
M999 | Reset from a halted state caused by limit switch, M112 or kill switch |
G Code comments begin at a semicolon, and end at the end of the line:
Example:
Example:
G0 X7 Y8 ;this is the comment
Tool change
Tn will change the tool to n for all future commands, it may appear anywhere on the line or on a line by itself
T1 M200
M200 T1
NOTE This is not compatible with the G-code spec, but unfortunately most slicers create incorrect Gcode for tool change.
Note in smoothie there must be a space in front of a line that is affected by a modal G code.
Some G code processors like HeeksCNC don't prefix the space neither do they prefix each line with the modal G code.
Some G code processors like HeeksCNC don't prefix the space neither do they prefix each line with the modal G code.