At the basic level, G-Code is the language by which people tell computerized CNC /3D Printer machines how to make something.
G-Code is the instruction code that tells a 3D printer what to do. For example, the G-Code
G0 X10 tells the machine to move the current tool to X position 10.
Marlin’s GCode is loosely based on the language specification for the NIST RS274NGC Interpreter, but departs radically in its specific implementation details. (For example, RepRap G-Code doesn’t care about “modal groups.”)
I heard of many 3D printer gurus that tweaking and setting the G-Code on a manual level is a bit dangerous for your machine. “No, we don’t ever recommend manually changing G-code. There’s far too much room to send a command (or delete a command) that would cause physical damage to a printer if done incorrectly.”
G-Code in Marlin – The simple layout
G0 -> G1
G1 – Coordinated Movement X Y Z E
G2 – Clockwise Arc
G3 – Counter-clockwise Arc
G4 – Dwell S or P
G92 – Set the “current position” for X Y Z E
M0 – Wait for user, with optional prompt message (requires LCD controller)
M1 -> M0
M400 – Finish all moves
M999 – Restart after an Emergency Stop
M20 – List SD card
M21 – Init SD card
M22 – Release SD card
M23 – Select an SD file by DOS path (M23 path/to/filename.g)
M24 – Start/resume SD print
M25 – Pause SD print
M26 – Set SD position in bytes
M27 – Report SD print status
M28 – Start SD write
M29 – Stop SD write
M30 – Delete file from SD
M31 – Print the time since SD print started, or since the most recent M109 command
M32 – Select file and start SD print. Can be used within G-Code files to include other files.
M540 – Set the state of the Abort on Endstop Hit flag.
M928 – Start SD logging. Stop logging with M29.
M42 – Change pin status via gcode: P S. If P is omitted the onboard LED pin will be used. M42 P9 S1 ; set PIN 9 to 1.
M80 – Turn on Power Supply
M81 – Turn off Power Supply
M85 – Set inactivity shutdown timer with parameter S. Disable with “M85” or “M85 S0”.
M112 – Emergency stop. Requires hardware reset!!
M226 – Wait for a pin to be in some state: P S
M410 – Quickstop. Abort all planned moves, stopping the printer.
M104 – Set extruder target temperature
M105 – Request the current temperature of all heaters
M106 – Set the fan speed
M107 – Set the fan speed to 0 (thus turning it off)
M109 – Wait for an extruder to reach its target temperature. Optionally set the target temperature. Optionally enable AUTOTEMP.
M140 – Set heated bed target temperature
M145 – Set “heatup state” values for the LCD Menu
M190 – Wait for the heated bed to reach its target temperature. Optionally set the target temperature.
M301 – Set PID parameters P I and D
M302 – Allow cold extrudes, or set the minimum extrusion temperature
M303 – PID relay autotune S sets the target temperature. (default target temperature = 150C)
M304 – Set bed PID parameters P I and D
M111 – Set debug flags
M114 – Output current position to serial port
M115 – Capabilities string
M117 – Display message text on the LCD
M119 – Output Endstop status to serial port
M120 – Enable endstop detection
M121 – Disable endstop detection
M126 – Solenoid Air Valve Open. (Requires BARICUDA)
M127 – Solenoid Air Valve Closed. (Requires BARICUDA)
M128 – EtoP Open. (Requires BARICUDA)
M129 – EtoP Closed. (Requires BARICUDA)
M150 – Set BlinkM RGB Color via I2C. (Requires BLINKM)
M240 – Trigger a camera to take a photograph. (Requires CHDK or PHOTOGRAPH_PIN)
M250 – Set LCD contrast
M280 – Set servo position (absolute)
M300 – Play a beep sound. (Requires BEEPER_PIN or LCD_USE_I2C_BUZZER)
M380 – Activate solenoid on active extruder. (Requires EXT_SOLENOID)
M381 – Disable all solenoids. (Requires EXT_SOLENOID)
M600 – Pause for filament change. (Requires FILAMENTCHANGEENABLE)
Units and Measures
G90 – Use Absolute Coordinates
G91 – Use Relative Coordinates
M82 – Set E codes absolute (default)
M83 – Set E codes relative while in Absolute Coordinates (G90) mode
M92 – Set axis_steps_per_unit – same syntax as G92
M200 – Set filament diameter and E axis units to mm^3
M201 – Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
M202 – Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
M203 – Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
M204 – Set default acceleration: P for Printing moves, R for Retract only (no X, Y, Z) moves and T for Travel (non printing) moves (ex. M204 P800 T3000 R9000) in mm/sec^2
M205 – Advanced settings: minimum travel speed S=while printing T=travel only, B=minimum segment time X=maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
M206 – Set additional homing offset
M218 – Set hotend offset (in mm): T X Y
M220 – Set speed factor override percentage: S
M221 – Set extrude factor override percentage: S
G10 – Retract filament according to settings of M207
G11 – Retract recover filament according to settings of M208
M207 – Set retract length S[positive mm] F[feedrate mm/min] Z[additional zlift/hop], stays in mm regardless of M200 setting
M208 – Set recover=unretract length S[positive mm surplus to the M207 S*] F[feedrate mm/s]
M209 – S enable automatic retract detect if the slicer did not support G10/11: every normal extrude-only move will be classified as retract depending on the direction
G28 – Home one or more axes.
G29 – Probe the bed Z height at multiple points and enable bed leveling compensation.
G30 – Probe the bed Z height at the current XY position.
G31 – Dock Z Probe sled.
G32 – Undock Z Probe sled.
M48 – Measure Z Probe repeatability.
M401 – Lower Z-probe.
M402 – Raise Z-probe.
M420 – Enable or disable Mesh Bed Leveling.
M421 – Set a single Mesh Bed Leveling Z coordinate: X Y Z
M404 – Set (or display) Nominal Filament Diameter in mm: N
M405 – Turn on Filament Sensor extrusion control: [D] to set distance (in cm) from sensor to extruder
M406 – Turn off Filament Sensor extrusion control
M407 – Display measured Filament Diameter
M500 – Save current settings to EEPROM.
M501 – Load stored settings from EEPROM.
M502 – Revert to the default “factory settings.” ””’Does not store them in EEPROM!””’
M503 – Print current settings (from memory, not EEPROM).
M665 – Set Delta configurations: L R S
M666 – Set Delta endstop adjustment: X Y Z
M605 – Set dual x-carriage movement mode: S [ X R ]
M17 – Enable/Power all stepper motors
M18 -> M84
M84 – Disable steppers until the next move, or set the inactivity timeout after which steppers should be disabled.
M907 – Set digital trimpot motor current using axis codes.
M908 – Control digital trimpot directly.
M350 – Set microstepping mode.
M351 – Toggle MS1 MS2 pins directly to set microstepping.
”May change to suit future G-code standards”
M360 – SCARA calibration: Move to cal-position ThetaA (0 deg calibration)
M361 – SCARA calibration: Move to cal-position ThetaB (90 deg calibration – steps per degree)
M362 – SCARA calibration: Move to cal-position PsiA (0 deg calibration)
M363 – SCARA calibration: Move to cal-position PsiB (90 deg calibration – steps per degree)
M364 – SCARA calibration: Move to cal-position PSIC (90 deg to Theta calibration position)
M365 – SCARA calibration: Scaling factor, X, Y, Z axis
M110 – Set the current Line Number
WOW! My mind is swimming with numbers and letters! I just got done reading another article on G Code in here a few minutes ago so I’m seeing numbers and letters flashing in front of my eyes! haha. I still have a lot to learn! These articles help with that. But I’m afraid I’m going to dream about these G Codes and drive my self nuts tonight! lol