The first set of controllers are in production and due in early November 2026.


This is the second generation of the popular 6x controller. This uses the ESP32-S3-WROOM-1U-N8R2 MCU to gain a few extra pins and features plus 2Meg of extra RAM.
This is designed for people who prefer screw terminals over crimp connectors. If you prefer connectors, I suggest the very similar Doberman controller.
Elecrow coming soon.
The controller ships with a version of FluidNC that was current when the controller was built. You should upgrade the firmware using the web installer.
It is strongly recommended that you use the configuration wizard to create config files. You can see a demonstration video here.
The controller should be powered by 12V. Your power supply should be able to provide about 1A for the basic controller functions plus whatever current is attached to the MOSFET terminal. The terminal block is rated for 10A. It should be connected to the "Vin" pins on the green terminal block. Double check the polarity before powering on, but there is reverse polarity protection.
A green LED will light in the center of the conntroller when power is properly applied. Depending on the state of the controller other LEDs may also light or blink.
You cannot power the controller with either USB connector. Nothing will work until the primary power connected for anything to work including USB.
It is an ESP32-S3-WROOM-1U-N8R2.
The antenna connector is an IPEX connector type. It ships with a basic one like this. You can easily find larger or more directional ones on Amazon or AliExpress. You should always have an antenna connected when using the Wifi or Bluetooth modes.
The primary USB-C connector (upper one) is used for the basic interface of the controller. It creates a COM port on your computer when it is connected and power is on. It is used for programming and connecting gcode senders.
This feature is experimental at this time
The other USB connector, labeled USB CDC, connects directly to the ESP32. By default this native USB will be a CDC (communication device class) USB/Serial UART. Most computers will already have a driver for this.
This USB can also work in host mode, where it can communicate and power devices like keyboards, joysticks, wire ethernet and jog controllers.
At this time FluidNC has no support for any devices in host mode. The connector was tested using simple example sketches of host mode. There is no guarantee that FluidNC will ever support this. This was just an attempt to future proof the controller and work as a development platform.
The micro SD card uses SPI and must be configured like this.
spi:
miso_pin: gpio.2
mosi_pin: gpio.1
sck_pin: gpio.21
sdcard:
card_detect_pin: NO_PIN
cs_pin: gpio.9
The motor drivers circuits use (2) STMicro STP16CP05 chips. These are constant current, LED sink driver, shift register chips. We use the Is2o feature of the ESP32 to output the shift register signals.
The constant current feature is setup for about 20mA. This means a 20mA or lower current will be driven constantly. This should be way more than the optos motors drivers use. This method was chosen to protect the pins from some accidental mis-wires, like a short to ground or a positive voltage. Anything attempting to pull more current will cause them to PWM to lower the average current, or shut off completely.
They sink current which means the signals must be connected to the minus side of the optos and the plus side should be connect to +5V. In the off state the pins are floating (not connected to any voltage)
Any usused signal, plus the extra 6 i2so pins on the 8 pin header connector, can be used as outputs to control other features. Keep in mind that these current sync to ground in the active state and float in the inactive state.
# motor 1
standard_stepper:
step_pin: I2SO.1
direction_pin: I2SO.2
disable_pin: I2SO.0
# motor2
standard_stepper:
step_pin: I2SO.4
direction_pin: I2SO.5
disable_pin: I2SO.3
# motor3
standard_stepper:
step_pin: I2SO.7
direction_pin: I2SO.8
disable_pin: I2SO.6
# motor4
standard_stepper:
step_pin: I2SO.17
direction_pin: I2SO.18
disable_pin: I2SO.16
# motor 5
standard_stepper:
step_pin: I2SO.20
direction_pin: I2SO.21
disable_pin: I2SO.19
# motor 6
standard_stepper:
step_pin: I2SO.23
direction_pin: I2SO.24
disable_pin: I2SO.22

Most closed loop motor drivers can be used. See this wiki page for more details.
All inputs activate by closing the circuit to ground. You can use N.O. and N.C switch as long as one position closes to ground.
You can use electronic switches like proximity or inductive switches as long as the output signal switches to ground (typically called NPN). If the switches require external power you need to connect that elsewhere on the controller or an external power supply that shares a common ground.
All of the inputs have external pullup resistors. You do not need to add :pu in the config file.
For normally open switches you need the :low attribute on all inputs. Normally closed are active high. You can add the :high attribute, but it is not needed because that is default in FluidNC.
Here is the basic input circuit. SW# represents your switch.

The 5V outputs are on the (4) 2 pin red connectors. They can do digital or PWM. They are driven by a 74AHCT125 chip. They can do 20mA each, but only 50mA in total for all 4 outputs.
The outputs are from left to right.
This uses an op-amp and a low pass filter to create an analog voltage. It can be adjusted with a trim pot for a max voltage of 5V to 10V. Measure and adjust the voltage before connecting to your spindle speed controller. A good way to do this is to send the gcode for max spindle speed like (M3 S24000 or whatever your max is) and then adjust the pot until you get the desired max voltage. It is best to set the max voltage before connecting to your VFD.
Most VFDs have a 10V output. Do not connect this to the controller. Connect the 10V signal to the 10V input on the VFD.
The forward and reverse signals use opto to connect to a common ground. This ground needs to come from the VFD.

10V:
forward_pin: gpio.7
reverse_pin: gpio.8
pwm_hz: 5000
output_pin: gpio.6
enable_pin: NO_PIN
direction_pin: NO_PIN
disable_with_s0: false
s0_with_disable: true
spinup_ms: 0
spindown_ms: 0
tool_num: 0
speed_map: 0=0.000% 1000=0.000% 24000=100.000%
off_on_alarm: false
If you are not using this type of spindle or are not using both FWD and REV, the FWD and REV circuits can be used to control other things, like directly drive a relay (24vdc max 45mA max).
The RS485 circuit is fully isolated. It also has automatic direction control, so it does not use an rts_pin
There are LEDs to show and help debug communications issues.
Note: The circuit is a UART to RS485 converter. The LEDs represent the state of UART side IO.
RS485 is a lot more complicated to setup than other types of spindles. It requires a lot of setup on the VFD side and good wiring. If you are having trouble, you should consider using the 0-10V method to control the spindle. It is very hard for us to support RS485 remotely.
You should use 22-24AWG wires that are tightly twisted with at least 1 twist per inch. You can also use a twisted pair from some CAT5/6 cable.
You generally do not need a shield over the wires. If you do use a shield it should be grounded at the Doberman side. Do not connect the ground on the Doberman side to the VFD. This will defeat the isolation feature of the circuit.
VFDs are very noisy devices, especially the cheap ones. Some people have persistent communication problems that cannot be fixed.
Here is a typical RS485 config file section. You must also setup the VFD and get the wiring correct. For general information about VFD setup see the spindle wiki page.
For the my Huanyang, I connect the terminal labeled RS485 A on the controller to RS+ on the VFD and RS485 B on the controller to RS- on the VFD. Most people should not connect the ground terminal.
# Begin Huanyang
uart1:
txd_pin: gpio.12
rxd_pin: gpio.11
baud: 9600
mode: 8N1
Huanyang:
uart_num: 1
modbus_id: 1
tool_num: 0
speed_map: 0=0% 0=25% 6000=25% 24000=100%
off_on_alarm: false
Use the 5V outputs to control PWM spindles and lasers. You can also use the 5V outputs for enables and direction signals.
The (2) NPN MOSFETs are rated for 3A continuous and 5A peak. There are flyback diodes connected to Vin to make them safe for use with inductive loads, such as relays and solenoids.
The MOSFETs share pins with (2) 5V outputs. If you are using the wizard, please assign the MOSFET beforee the 5V outputs so you know which 5v pins are still available.
The VMot terminals are always connected to VMot. Terminals labeled with the io pin numbers switch to ground when the io pins are active. If you need to operate devices with other voltages than VMot, you can use a separate DC power supply as long as it shares a common ground with the controller.
Here is a config file example.
uart1:
txd_pin: gpio.0
rxd_pin: gpio.35
rts_pin: NO_PIN
cts_pin: NO_PIN
baud: 1000000
mode: 8N1
uart_channel1:
report_interval_ms: 75
uart_num: 1
See this page if you are using the the expansion port for an Airedale.
The expansion socket is compatible with all existing CNC I/O Module designs (4 I/O pins). It also adds (3) extra pins that are connected to the SPI bus that the SD card also uses.

You need to install a separately purchased ethernet module and install it like this.

Here is what you need in the config file. See this wiki page on how to use wired Ethernet.
ethernet:
cs_pin: gpio.14
int_pin: gpio.13
rst_pin: gpio.10
phy_type: w5500
phy_addr: 1
frequency_hz: 1000000
The config wizard is also very good way to determine the pin numbers.