Firmware Compatibility
This page documents firmware compatibility for laser controllers used with Rayforge.
Overview
Rayforge is designed primarily for GRBL-based controllers but also supports Marlin, Smoothieware, and other firmware types.
Compatibility Matrix
| Firmware | Version | Status | Driver | Notes |
|---|---|---|---|---|
| GRBL | 1.1+ | Compatible | GRBL Serial | Recommended |
| grblHAL | 2023+ | Compatible | GRBL Serial / GRBL Telnet | Modern GRBL fork |
| GRBL | 0.9 | Limited | GRBL Serial | Older, may have issues |
| Smoothieware | All | Compatible | SmoothieDriver (Telnet) | Network-based |
| Marlin | 2.0+ | Compatible | Marlin Serial | Laser mode required |
| ESP3D | All | Compatible | GRBL Telnet | Network-based |
| OctoPrint | All | Experimental | OctoPrint | See notes below |
| Other | - | Not supported | - | Request support |
GRBL Firmware
Status: Fully Supported Versions: 1.1+ Driver: GRBL Serial
GRBL 1.1 (Recommended)
What is GRBL 1.1?
GRBL 1.1 is the most common firmware for hobby CNC and laser machines. Released in 2017, it's stable, well-documented, and widely supported.
Features supported by Rayforge:
- Serial communication (USB)
- Real-time status reporting
- Laser mode (M4 constant power)
- Settings read/write ($$, $X=value)
- Homing cycles ($H)
- Work coordinate systems (G54)
- Jogging commands ($J=)
- Feed rate override
- Soft limits
- Hard limits (endstops)
Known limitations:
- Power range: 0-1000 (S parameter)
- No network connectivity (USB only)
- Limited onboard memory (small G-code buffer)
Checking GRBL Version
Query version:
Connect to your controller and send:
$I
Response examples:
[VER:1.1h.20190825:]
[OPT:V,15,128]
1.1h= GRBL version 1.1h- Date indicates build
GRBL 0.9 (Older)
Status: Limited Support
GRBL 0.9 is an older version with some compatibility issues:
Differences:
- Different status report format
- No laser mode (M4) - uses M3 only
- Fewer settings
- Different jogging syntax
If you have GRBL 0.9:
- Upgrade to GRBL 1.1 if possible (recommended)
- Use M3 instead of M4 (less predictable power)
- Test thoroughly - some features may not work
Upgrade instructions: See GRBL Wiki
grblHAL
Status: Compatible Versions: 2023+ Driver: GRBL Serial
What is grblHAL?
grblHAL is a modern fork of GRBL with enhanced features:
- Multiple controller hardware support (STM32, ESP32, etc.)
- Ethernet/WiFi networking
- SD card support
- More I/O pins
- Enhanced laser support
Compatibility with Rayforge:
- Fully compatible - grblHAL maintains GRBL 1.1 protocol
- All GRBL features work
- Additional features (networking, SD) not yet supported by Rayforge
- Status reporting identical to GRBL
Using grblHAL:
- Select "GRBL Serial" driver in Rayforge
- Connect via USB serial (just like GRBL)
- All features work as documented for GRBL
Future: Rayforge may add support for grblHAL-specific features (networking, etc.)
GRBL Telnet Driver
Status: Supported Firmware: grblHAL, ESP3D, and other networked GRBL controllers Driver: GRBL Telnet
About the GRBL Telnet Driver
The GRBL Telnet driver connects to GRBL-based controllers over the network via a Telnet interface. This is ideal for boards with built-in WiFi or Ethernet — no USB cable required.
Features:
- Network connectivity (Ethernet/WiFi)
- Compatible with grblHAL and ESP3D-based boards
- Same GRBL protocol as the serial driver
Using the GRBL Telnet driver:
- Configure networking on your controller (WiFi or Ethernet)
- Select "GRBL Telnet" driver in machine settings
- Enter the IP address and port of your controller
- Connect — the driver communicates over Telnet
Requirements:
- Networked GRBL-compatible controller (grblHAL, ESP3D, etc.)
- Controller and computer on the same network
- Telnet interface enabled on the controller
Smoothieware
Versions: All Driver: SmoothieDriver (Telnet-based)
About SmoothieDriver
Rayforge includes a dedicated SmoothieDriver that connects to Smoothieware controllers via Telnet over network. This provides native support rather than relying on GRBL compatibility mode.
Features:
- Network connectivity (Ethernet/WiFi)
- Real-time status reporting
- Native Smoothieware G-code support
Using Smoothieware with Rayforge:
- Configure network on your Smoothieboard (Ethernet or WiFi)
- Select SmoothieDriver in machine settings
- Enter IP address of your controller
- Select Smoothieware dialect in machine settings > G-code > Dialect
Requirements:
- Smoothieboard with network connectivity
- Controller and computer on same network
- Telnet enabled in Smoothieware config
Limitations:
- Requires network connection (no USB serial)
- Settings ($$ commands) work differently than GRBL
Marlin
Versions: 2.0+ with laser support Driver: Marlin Serial
Marlin Serial Driver
Rayforge includes a dedicated MarlinSerialDriver that connects to Marlin firmware via serial (USB). Marlin 2.0+ can control lasers when properly configured.
Features:
- Serial communication (USB)
- Marlin handshake protocol (waits for "start" message)
- G-code streaming line-by-line with
okacknowledgment - M114 position polling
- Job execution with granular progress reporting
- Homing (G28), jogging, move-to, tool change (T)
- WCS offset setting (G10 L2 P)
- Laser power control via the Marlin G-code dialect
- Cancel via M410 (Quick Stop)
- Auto-configuration probing (queries M115, M211, M503)
Requirements:
- Marlin 2.0 or later firmware
- Laser features enabled:
#define LASER_FEATURE#define LASER_POWER_INLINE
- Correct power range configured:
#define SPEED_POWER_MAX 1000
Using Marlin with Rayforge:
- Select "Marlin (Serial)" driver in machine settings
- Set the serial port and baud rate (typically 115200)
- Select Marlin dialect in machine settings > G-code > Dialect
- Configure Marlin for laser use
- Test power range matches (0-1000 or 0-255)
Limitations:
- Experimental — feedback welcome
- Settings read/write (like GRBL's
$$) not supported - No network connectivity (USB only)
Firmware Upgrade Guide
Upgrading to GRBL 1.1
Why upgrade?
- Laser mode (M4) for constant power
- Better status reporting
- More reliable
- Better Rayforge support
How to upgrade:
-
Identify your controller board:
- Arduino Nano/Uno (ATmega328P)
- Arduino Mega (ATmega2560)
- Custom board
-
Download GRBL 1.1:
- GRBL Releases
- Get latest 1.1 version (1.1h recommended)
-
Flash firmware:
Using Arduino IDE:
1. Install Arduino IDE2. Open GRBL sketch (grbl.ino)3. Select correct board and port4. UploadUsing avrdude:
avrdude -c arduino -p m328p -P /dev/ttyUSB0 \-U flash:w:grbl.hex:i -
Configure GRBL:
- Connect via serial
- Send
$$to view settings - Configure for your machine
Backup Before Upgrade
Save your settings:
- Connect to controller
- Send
$$command - Copy all settings output
- Save to file
After upgrade:
- Restore settings one-by-one:
$0=10,$1=25, etc. - Or use defaults and reconfigure
Controller Hardware
Common Controllers
| Board | Typical Firmware | Rayforge Support |
|---|---|---|
| Arduino CNC Shield | GRBL 1.1 | Excellent |
| MKS DLC32 | grblHAL | Excellent |
| Ruida | Proprietary | Experimental |
| OctoPrint (Pi) | Various | Experimental |
Recommended Controllers
For best Rayforge compatibility:
-
Arduino Nano + CNC Shield (GRBL 1.1)
- Cheap (~$10-20)
- Easy to flash
- Well documented
-
MKS DLC32 (grblHAL)
- Modern (ESP32-based)
- WiFi capable
- Active development
-
Custom GRBL boards
- Many available on marketplaces
- Check for GRBL 1.1+ support
Firmware Configuration
GRBL Settings for Laser
Essential settings:
$30=1000 ; Max spindle/laser power (1000 = 100%)
$31=0 ; Min spindle/laser power
$32=1 ; Laser mode enabled (1 = on)
Machine settings:
$100=80 ; X steps/mm (calibrate for your machine)
$101=80 ; Y steps/mm
$110=3000 ; X max rate (mm/min)
$111=3000 ; Y max rate
$120=100 ; X acceleration (mm/sec)
$121=100 ; Y acceleration
$130=300 ; X max travel (mm)
$131=200 ; Y max travel (mm)
Safety settings:
$20=1 ; Soft limits enabled
$21=1 ; Hard limits enabled (if you have endstops)
$22=1 ; Homing enabled
Testing Firmware
Basic test sequence:
-
Connection test:
Send: ?Expect: <Idle|...> -
Version check:
Send: $IExpect: [VER:1.1...] -
Settings check:
Send: $$Expect: $0=..., $1=..., etc. -
Movement test:
Send: G91 G0 X10Expect: Machine moves 10mm in X -
Laser test (very low power):
Send: M4 S10Expect: Laser turns on (dim)Send: M5Expect: Laser turns off
Troubleshooting Firmware Issues
Firmware Not Responding
Symptoms:
- No response to commands
- Connection fails
- Status not reported
Diagnosis:
-
Check baud rate:
- GRBL 1.1 default: 115200
- GRBL 0.9: 9600
- Try both
-
Check USB cable:
- Data cable, not charge-only
- Replace with known-good cable
-
Check port:
- Linux:
/dev/ttyUSB0or/dev/ttyACM0 - Windows: COM3, COM4, etc.
- Correct port selected in Rayforge
- Linux:
-
Test with terminal:
- Use screen, minicom, or PuTTY
- Send
?and see if you get response
Future Firmware Support
Ruida Controllers
Rayforge includes experimental support for Ruida-based controllers (e.g. RDC6442, RDC6445, Ruida R5). The Ruida driver connects over the network and supports jogging, position reporting, air assist control, layer selection, auto-connect, and status polling.
Features:
- Network connectivity (Ethernet/WiFi)
- Position reporting
- Jogging controls
- Air assist and layer selection
- Reference point support
Limitations:
- Experimental — not yet fully stable
- No G-code generation; Ruida uses its own proprietary protocol
- Job sending is not yet supported
OctoPrint
Rayforge includes an experimental OctoPrint driver that submits G-code directly to an OctoPrint server over the network. This is useful if your laser is connected to a Raspberry Pi or other machine running OctoPrint.
Features:
- WebSocket connection for real-time status updates
- REST polling fallback when WebSocket is unavailable
- Auto-reconnect on connection loss
- Job submission with automatic print start
- Jogging, homing, and pause/resume controls
- "Request Access" flow for OctoPrint application keys
Using the OctoPrint driver:
- Select "OctoPrint" driver in machine settings
- Enter the hostname or IP address of your OctoPrint server
- Set the port (default: 80)
- Click "Request Access" to obtain an API key through OctoPrint's application key flow
- Connect -- Rayforge will establish a WebSocket connection
Limitations:
- Experimental and untested on real hardware -- feedback welcome
- Cannot read or write firmware settings through OctoPrint
- Probe results are not reported by OctoPrint
- WCS offset reads are not supported
Contributing
To add firmware support:
- Implement driver in
rayforge/machine/driver/ - Define G-code dialect in
rayforge/machine/models/dialect.py - Test thoroughly on real hardware
- Submit pull request with documentation
Related Pages
- G-code Dialects - Dialect details
- Device Settings - GRBL configuration
- Connection Issues - Connection troubleshooting
- General Settings - Machine setup