Here are some basic notions and pointers about Smoothie.
New to CNC? Here are the essential terms you’ll see throughout this documentation:
| Term | What it means |
|---|---|
| Smoothie | The firmware (software) that runs on the microcontroller |
| Smoothieboard | The physical controller board (hardware) |
| Firmware | Software stored permanently on a chip that controls hardware |
| G-code | The language used to command CNC machines (like “ |
| Host software | The program on your computer that sends commands to the board |
| Microcontroller | A small computer chip dedicated to controlling hardware |
| CAD | Computer-Aided Design software for creating models |
| CAM | Computer-Aided Manufacturing software that converts models to G-code |
| Slicer | CAM software specifically for 3D printing |
| CNC | Computer Numerical Control - using computers to control machines |
| Stepper motor | A motor that moves in precise, discrete steps |
| Endstop | A limit switch that tells the machine where an axis ends |
| Homing | The process of finding the origin point (0,0,0) using endstops |
| Feed rate | The speed at which the tool moves during operation |
| Acceleration | How quickly the machine speeds up or slows down |
| Steps per mm | How many motor steps equal one millimeter of movement |
Smoothie is a firmware.
That is a program that executes on a micro-controller, basically a very simple/small computer used for very specific tasks.
The micro-controller is located on a controller board, for example Smoothieboard, where it executes the Smoothie firmware.
This program receives instructions from your computer (typically G-code, generated by CAM software), and executes them, for example by moving stepper motors in a coordinated fashion, and operating tools.
If you are curious, you can find a list of G-codes for Smoothie, and their explanation, here.
This allows you to use Smoothie to execute CNC operations.
One of the most common points of confusion: Smoothie is not Smoothieboard.
Smoothie is software - specifically, firmware.
Firmware is software that lives permanently on a microcontroller chip and directly controls hardware. Unlike programs on your computer that can be closed and restarted, firmware runs continuously from the moment the board powers on until it’s turned off.
Think of it like this:
The firmware:
Smoothieboard is the physical controller board - the actual circuit board with chips, connectors, and components.
The board contains:
The Smoothieboard is the platform that Smoothie firmware runs on.
Both run Smoothie firmware, but the hardware capabilities differ. See Smoothieboard for detailed hardware specifications.
G-code is the universal language of CNC machines. Understanding it helps you troubleshoot, modify, and create machine programs.
G-code is a simple text format where each line is a command:
G28 ; Home all axes
G0 X10 Y20 ; Rapid move to X=10mm, Y=20mm
G1 X50 F1000 ; Linear move to X=50mm at 1000mm/min
M104 S200 ; Set hotend temperature to 200°C
G-codes (like
M-codes (like
Parameters (like X10, F1000, S200):
Comments (text after ;):
A typical G-code file might have thousands of lines:
G21 ; Use millimeters
G90 ; Absolute positioning
G28 ; Home all axes
M104 S200 ; Heat hotend to 200°C
M190 S60 ; Heat bed to 60°C and wait
G1 X50 Y50 F3000 ; Move to start position
G1 Z0.2 ; Lower to first layer height
... thousands more lines ...
M104 S0 ; Turn off hotend
M140 S0 ; Turn off bed
M84 ; Disable motors
You don’t write G-code by hand (usually). CAM software generates it:
The CAM software figures out the optimal tool paths and outputs the G-code that makes it happen.
Smoothie implements the most common G-codes used in CNC operations.
See Supported G-codes for the complete list of what Smoothie understands.
CNC = Computer Numerical Control. Using computers to control machine tools with precision and repeatability.
CNC machines work in a coordinate space:
Cartesian systems (most common):
Additional axes:
Origin (0,0,0): The reference point for all coordinates
Homing: The process of finding the origin using endstops (limit switches):
Work coordinates vs Machine coordinates:
Rapid positioning (
Linear interpolation (
Arc interpolation (
Feed rate = how fast the tool moves during work
Machines can’t instantly change speed - they need to accelerate and decelerate.
Why acceleration matters:
Too much acceleration: Machine shakes, parts wear out, quality suffers Too little acceleration: Slow, inefficient operation
Smoothie handles acceleration planning automatically - you just set the limits in configuration.
Stepper motors move in discrete steps, not continuous rotation.
Steps per mm tells Smoothie: “How many motor steps = 1mm of motion?”
This depends on:
Getting this right is critical for dimensional accuracy.
Absolute positioning (
Relative positioning (
Most G-code uses absolute mode (
For more details on motion control, see Motion Control.
Understanding how Smoothie is organized internally helps you configure it effectively and understand what each configuration option does.
Smoothie isn’t one monolithic program. It’s built from independent modules that each handle specific functions:
Core modules everyone uses:
Tool modules (use what your machine needs):
Communication modules:
Utility modules:
Modules communicate through an event system:
This allows:
For developers: see Module Example and List of Events.
Because of this modular design:
Each module has its own config section:
# Extruder module configuration
extruder.hotend.enable true
extruder.hotend.steps_per_mm 140
# Temperature control module configuration
temperature_control.hotend.enable true
temperature_control.hotend.thermistor_pin 0.23
# Switch module configuration
switch.fan.enable true
switch.fan.input_pin 2.6
You only configure modules you’re using:
Modules can be enabled/disabled independently:
enable false to turn off a moduleUnderstanding the module system explains why the config file is organized the way it is.
See Configuring Smoothie for practical configuration guidance.
Configuration deserves special attention because it’s how you tell Smoothie about your specific machine.
Dead simple: key = value pairs with comments
# This is a comment - Smoothie ignores it
default_feed_rate 4000 # Default speed in mm/minute
acceleration 3000 # Acceleration in mm/sec^2
alpha_steps_per_mm 80 # Steps per mm for X axis (alpha)
Format rules:
# are ignored (comments)# on a line is ignoredoption_name value # commentImportant: Changes ONLY take effect after reset. Editing while the machine runs does nothing until you reset.
The config file is organized by module:
# Motion Control Module
default_feed_rate 4000
default_seek_rate 4000
acceleration 3000
junction_deviation 0.05
# Stepper Motor Module
alpha_steps_per_mm 80
beta_steps_per_mm 80
gamma_steps_per_mm 2560
# Extruder Module
extruder.hotend.enable true
extruder.hotend.steps_per_mm 140
extruder.hotend.max_speed 50
# Temperature Control Module
temperature_control.hotend.enable true
temperature_control.hotend.thermistor_pin 0.23
temperature_control.hotend.heater_pin 2.7
# Motion Control Module
motion control.default_feed_rate 4000
motion control.default_seek_rate 4000
motion control.default_acceleration 3000
planner.junction_deviation 0.05
# Stepper Motor Module
actuator.x.steps_per_mm 80
actuator.y.steps_per_mm 80
actuator.z.steps_per_mm 2560
# Extruder Module
extruder.hotend.enable true
extruder.hotend.steps_per_mm 140
motion control.max_speed 50
# Temperature Control Module
temperature_control.hotend.enable true
temperature_control.hotend.thermistor_pin 0.23
temperature_control.hotend.heater_pin 2.7
Each section configures a specific module. This matches the module architecture described above.
Smoothie uses Greek letters internally but X/Y/Z in G-code:
| G-code axis | Config prefix | Typical use |
|---|---|---|
| X | alpha |
Left/right |
| Y | beta |
Front/back |
| Z | gamma |
Up/down |
| A | delta |
4th axis rotation or delta kinematics |
| B | epsilon |
5th axis rotation |
| C | zeta |
6th axis rotation |
| E | extruder |
3D printer extruder |
So
Certain M-codes can modify settings at runtime and save them to config-override:
M92 X80 Y80 Z400 ; Set steps per mm
M500 ; Save to config-override
If config-override exists:
To remove overrides: Delete config-override or use
See Configuring Smoothie for complete details and Configuration Options for all available options.
Every CNC project follows the same basic pattern, regardless of whether you’re 3D printing, laser cutting, or CNC milling.
Understanding this workflow helps you:
Goal: Create a digital model of what you want to make
Tools: CAD software
Output: A model file
At this stage you’re just designing - no machine involved yet.
Goal: Convert your model into machine instructions (G-code)
Tools: CAM software or Slicers
Output: G-code file
This is where you tell the software:
Goal: Send G-code to Smoothieboard and create the physical object
Tools: Host software
Output: Your finished physical object
This is where Smoothieboard comes in:
| Format | Stage | Contains | Used For |
|---|---|---|---|
| STL | Design output | 3D mesh (triangles) | 3D printing, 3D milling |
| DXF | Design output | 2D vectors | Laser cutting, 2D milling |
| SVG | Design output | 2D vectors | Laser cutting, engraving |
| G-code | Generate output | Machine commands | All CNC operations |
Why you can’t skip the CAM stage: Your machine doesn’t understand STL or DXF files directly. It only understands G-code. CAM software figures out how to move the tool to create your design.
Now let’s look at specific workflows for different machine types:
Some examples of workflow:
The workflow is very similar for a laser cutter, as it is essentially a CNC mill with a very very thin tool (the laser beam).
When something goes wrong, ask:
File format troubleshooting:
Understanding the stages prevents hours of debugging the wrong thing.
Understanding file types helps you:
STL (StereoLithography):
DXF (Drawing eXchange Format):
SVG (Scalable Vector Graphics):
G-code (.gcode, .nc, .cnc, .tap):
Toolpath files (various formats):
config or config.txt:
firmware.bin:
config-override:
on_boot.gcode:
“My slicer won’t open my STL file” → Check the file isn’t corrupted. Try opening in CAD software first.
“Smoothieboard won’t accept my STL file” → Smoothie doesn’t understand STL. You must slice it to G-code first.
“My G-code from Machine A doesn’t work on Machine B” → G-code is machine-specific. Different sizes, different setups = different G-code.
“Can I edit G-code directly?” → Yes, it’s plain text. But it’s tedious and error-prone. Better to fix CAM settings and regenerate.
“Which file do I put on the SD card?” → Config file + G-code files. Firmware only when updating.
Understanding how your computer talks to Smoothieboard helps you troubleshoot problems and choose the right method for your setup.
1. USB Serial (most common)
When you plug in a USB cable:
The serial port uses a “ping-pong” protocol:
Important: “ok” means “received and queued” not “finished executing”. The command is buffered for motion planning. Use M400 if you need to wait for actual completion.
2. Ethernet (alternative)
The Ethernet port provides:
Advantages:
See Network for setup details.
3. SD Card (standalone)
The SD card allows operation without a computer:
Perfect for production runs where you don’t want a computer connected.
Smoothie uses the RepRap “ping-pong” protocol developed for 3D printers:
For developers/advanced users:
G1 commands send “ok” immediately upon receipt (before queuing)Special jog command ($J):
For complete protocol details, see Communication.
Beyond G-code, Smoothie has text commands for configuration and control:
version - Show firmware version
help - List available commands
config-get sd acceleration - Read a config value
config-set sd acceleration 1000 - Set a config value
ls /sd - List files on SD card
play /sd/file.gcode - Play a file from SD
These commands let you interact with Smoothie directly without G-code.
See Console Commands for the complete reference.
The SD card stores several types of files:
| File | Purpose |
|---|---|
config or config.txt |
Main configuration file (required) |
firmware.bin |
Firmware update file (board flashes this on boot if present) |
config-override |
M-code saved settings that override config file |
on_boot.gcode |
G-code executed automatically every boot |
*.gcode, *.nc, *.cnc |
Your G-code programs |
Understanding what these files do helps you organize your SD card and troubleshoot issues.
See SD Card for more details.
Let’s clear up some common confusion:
❌ “I need to compile firmware to change settings” ✅ Wrong. Configuration is done via text file on SD card. Edit config, save, reset - done.
❌ “Smoothie and Smoothieboard are the same thing” ✅ Wrong. Smoothie = firmware (software). Smoothieboard = controller board (hardware).
❌ “I need to update firmware regularly” ✅ Wrong. Smoothie is very stable. Most users never update after initial setup. Only update if you need new features or bug fixes.
❌ “‘ok’ means the command finished executing”
✅ Wrong. “ok” means “received and queued”. Use
❌ “I can edit config while the machine is running”
✅ Wrong. Config changes require board reset. Use M-codes (
❌ “More acceleration is always better” ✅ Wrong. Excessive acceleration causes ringing, vibration, and mechanical wear. Tune to your machine’s mechanical capabilities.
❌ “The SD card mounts automatically so I can edit files anytime” ✅ Wrong. Concurrent access from computer and Smoothie corrupts SD cards. Always unmount before operations, reset board after editing.
❌ “Higher microstepping always gives better precision” ✅ Half-truth. Microstepping smooths motion but doesn’t increase precision beyond ~1/16. Mechanical factors (backlash, belt stretch) limit real precision more than stepping.
❌ “I can just copy someone else’s config file” ✅ Wrong. Every machine is different. Motor specs, mechanical setup, wiring - all affect config values. Use example configs as templates, not final solutions.
❌ “12V and 24V are interchangeable” ✅ Very wrong. Components are rated for specific voltages. Using wrong voltage destroys things.
❌ “If it’s not in the config file, it doesn’t matter” ✅ Wrong. Wiring, mechanical setup, electrical safety, proper grounding - all matter. Config can’t fix hardware problems.
When in doubt, start with the basics: check wiring, verify config values, test one thing at a time.
Working with Smoothieboard means working with electricity. You don’t need an electrical engineering degree, but you do need to understand the basics.
This isn’t optional. If you don’t understand voltage, current, and polarity, you will:
Before wiring anything:
Voltage (Volts, V):
Current (Amperes, Amps, A):
Resistance (Ohms, Ω):
Power (Watts, W):
Polarity:
If any of the above is unclear, watch these videos before attempting any wiring:
There is very little math in these videos (except the last one), if you have a hard time with what’s still there, we warmly recommend heading over to Khan Academy’s math videos for easy to digest courses.
If you want to go further on this subject, you can also follow this basic Electrical Engineering video course.
When wiring your machine, you’ll need to:
Common voltage levels in CNC:
Why 24V is often used instead of 12V:
For detailed wiring instructions and safety, see How to Wire.
Now that you understand the concepts, explore the details:
Core documentation:
Technical deep dives:
Hardware:
Machine-specific:
When things break: