PiBot V5.77 Carrier — Pin Definition Overview

FluidNC / grblHAL · 6 Dedicated + 2 Configurable Axes · Plug-in ESP32-S3 Module · Up to 8 Axes

The ports of FluidNC can all be freely defined and allocated through the YAML file, so there is no fixed PinMap.

Our current definition is based on the test YAML we use.

When applying it to your machine, you will need to define the pins yourself.

PiBot V5.77 Carrier pinmap diagram with circled numbers 1-17
The circled numbers ①–⑰ on the diagram correspond to the sections below. Click the diagram to view it at full size.

Quick Reference — UART Channels

ChannelPhysical PortPins (Test YAML)Typical Use
UART0Main USB 16Firmware flashing, gcode sender
UART1RS485 terminal 4TX: GPIO.12 · RX: GPIO.11 · DE/RE: GPIO.15Modbus VFD
UART2RJ12 port 6TX: GPIO.0 · RX: GPIO.35Pendant / IO Expander
UART3Second USB 17USB-Host (usb_host)USB pendant / HID device

Key to the Circled Numbers

💡 Tip: If you find the following section challenging, don't worry. You can complete the checklist steps first and then come back — it will make much more sense.
Inputs Outputs Power Drivers Interface

1 Input Terminals Inputs

  • 10 input channels arranged along the top edge, each a 3-pin header: signal / GND / SW-VCC.
  • Compatible input types: standard ON/OFF switches, 5V signal switches, or industrial 12V/24V PNP/NPN switches — match the switch supply with the SW-VCC jumper (see ).
  • NPN/PNP trigger mode: configure in YAML by adding or removing the :low parameter.
  • The GPIO.38/48 terminal is routed through a selection jumper first (see ).
TerminalTest YAML FunctionTerminalTest YAML Function
GPIO.42X limit −GPIO.36B limit −
GPIO.41X limit +GPIO.10C limit −
GPIO.40Y limit −GPIO.47Probe
GPIO.39Y limit +GPIO.3Toolsetter
GPIO.38/48Z limit − (jumper-selected, see )

2 GPIO.38 or GPIO.48 Selection Inputs

  • Why this jumper exists: early ESP32-S3 modules use GPIO.48 for the on-board RGB LED (leaving IO38 free); the latest modules use GPIO.38 for the LED (leaving IO48 free).
  • Function: selects which of the two pins reaches the input terminal, excluding the one occupied by the LED on your module.
  • Options: GPIO.38 (jumper on left, default) OR GPIO.48 (jumper on right).
  • Test YAML: uses IO38 as the Z limit − input. If your module's LED sits on GPIO.38, move the jumper to GPIO.48 and change the pin in your YAML accordingly.

3 PWM 5V Outputs

  • Header: GPIO.4 / GPIO.5 / GPIO.45 / GPIO.46 / GND — 5V PWM or 5V switching signals for spindles, lasers, servos, etc. Connect any GND on the board to complete the circuit.
  • Test YAML: GPIO.45 = spindle PWM (tool 0), GPIO.46 = laser (tool 1).
  • MOSFET linkage: GPIO.4 and GPIO.5 also drive the onboard MOSFET channels (see ) — in the test YAML they are the coolant outputs (M7 / M8).
  • Boot note: GPIO.45 and GPIO.46 are ESP32-S3 strapping pins. Make sure external circuitry does not hold them firmly high or low during power-up, or the module may fail to boot.

4 RS485 Outputs

  • Pins (UART1): TX: GPIO.12, RX: GPIO.11, DI (DE/RE): GPIO.15; terminal: +3V3 / +5V / RS485_A / RS485_B / GND.
  • Interface type: standard on-board RS485 transceiver (non-isolated) for Modbus RTU devices such as VFDs.
  • A/B polarity: if A and B are reversed, simply swap them. Reversed connections will not cause device damage.
  • Configuration reference: see the ModbusVFD section of the test YAML (Huanyang VFD commands, 9600 baud).

5 SW-VCC Voltage Selection Inputs

  • Function: selects the supply voltage on the SW-VCC pin of every input terminal (see ).
  • Options: 5V (jumper on left, default) OR Vmot-Main (jumper on right).
  • Usage: keep 5V for standard switches and 5V sensors; select Vmot-Main for industrial 12V/24V switches. Your industrial switch voltage must match Vmot-Main.
  • Voltage limit: never exceed 24V on Vmot-Main (see ).

6 To Expander or Pendant (RJ12) Interface

  • Function: this port provides UART signals for a pendant or an IO expander module.
  • Pins: UART2 — TX: GPIO.0, RX: GPIO.35 (test YAML baud: 1,000,000).
  • Compatibility: the RJ12 port and the OLED () use independent pins — they can be used at the same time.
  • Boot note: GPIO.0 is the ESP32-S3 boot strap pin. If a connected device holds it low during power-up, the module enters download mode and will not start normally.

7 Variable Resistor for 10V Adjustment Outputs

  • Function: adjusts the maximum voltage of the 0–10V output.
  • Calibration scenario: when issuing maximum output commands (e.g., M3 S24000), if the output voltage does not reach 10V.
  • Adjustment method: fine-tune this variable resistor until the output voltage reaches exactly 10V.

8 0–10V Output Group Outputs

  • 0–10V: GPIO.6 provides the analog output for frequency converters — connect the 0–10V pin and GND to the VFD analog input.
  • Optocoupler switches: GPIO.7 (Out1/Fwd) and GPIO.8 (Out2/Rev) with out Common form switch pairs (both ends of optocouplers), usable as standard digital outputs to signal frequency converters.
  • Start/stop function: for frequency converters requiring start/stop control, use these forward/reverse optocoupler outputs as the control signals.

9 MOSFET Outputs Outputs

  • Two channels: io.4-MOS-GND and io.5-MOS-GND (Vmot-Main).
  • Output capability: can output the same voltage as Vmot-Main or switch it off; used to drive small inductive loads such as solenoid valves.
  • Maximum current: 1.5 A per channel. The onboard channels are for light loads.
  • Control principle: controlled via GPIO.4 or GPIO.5 by switching the GND connection to complete the circuit (low-side switching).
  • Flyback protection: onboard flyback diodes are provided for inductive loads.
  • Test YAML: GPIO.4 = mist (M7), GPIO.5 = flood (M8) — M9 switches both off.
⚠ For heavier loads, use these outputs to drive an external relay, SSR or suitable power driver instead of connecting the load directly. Overloading can burn the MOSFET. Reverse connection of the load will damage the device — always verify with a multimeter before use.

10 VIN Main Power 12–24V Power

  • Function: the main power input for the whole board — logic, RS485, the 0–10V amplifier, and the input circuits are all powered from here.
  • Terminal: + / / GND. Verify polarity with a multimeter before connecting.
  • Recommended voltage: 24V input is recommended.
Never exceed 24V — the onboard amplifier and input circuits are designed for a maximum of 24V.

11 OLED Interface Interface

  • Pins: GND / 3V3 / GPIO.13 (SCL) / GPIO.14 (SDA) — I2C address 0x3C, 128×64.
  • Pinout caution: please note the positions of VCC and GND, as some OLED modules have different pin arrangements.
  • Compatibility: the OLED can be used at the same time as the pendant/expander port ().

12 I2SO Logic Voltage Selection Drivers

  • Function: selects the signal level of the I2SO outputs that carry EN / STP / DIR to your external drivers (see ).
  • Options: 5V (jumper on left, default) OR 3.3V (jumper on right).
  • Usage: keep 5V for typical external stepper drivers with optocoupler inputs; select 3.3V only if your driver requires 3.3V logic.

13 EN / STP / DIR — Direct to External Drivers Drivers

  • PH2.0 connectors along the bottom edge output EN / STP / DIR (plus GND) for all six main axes directly to your external stepper drivers — the V5.77 has no on-board driver sockets.
  • The signals are generated by an I2S shift-register chain (I2SO); the signal level follows the I2SO jumper ().
AxisENSTPDIRAxisENSTPDIR
XI2SO.0I2SO.2I2SO.1 AI2SO.15I2SO.13I2SO.12
YI2SO.7I2SO.5I2SO.4 BI2SO.16I2SO.18I2SO.17
ZI2SO.8I2SO.10I2SO.9 CI2SO.23I2SO.21I2SO.20

14 Extra I/O / Reserved I2SO Output Outputs

  • Header pins: I2SO.3 / I2SO.6 / I2SO.11 / I2SO.14 / I2SO.19 / I2SO.22 / GND — six configurable Extra I/O shift-register signals.
  • Two possible uses: use these six signals as ordinary outputs, or configure them as two additional Step / Dir / Enable motor groups, increasing the controller from six dedicated axes to a maximum of eight axes. The same signals cannot be motor-control signals and ordinary outputs at the same time.
  • Configuration: the exact motor-group assignment must be defined in the machine-specific FluidNC configuration or compatible grblHAL board map/build.
  • Test YAML: mapped to user digital outputs 0–5 — M64 P0 on / M65 P0 off, up to M64 P5 / M65 P5.
  • Signal level: follows the I2SO jumper ().

15 TF Card Slot Interface

  • Pins (test YAML): MISO: GPIO.2, MOSI: GPIO.1, SCK: GPIO.21, CS: GPIO.9.
  • Compatibility warning: avoid using high-speed or high-capacity TF cards, as some may not be compatible with the ESP32 library.

16 Main USB Interface

  • Function (UART0): used for firmware flashing, configuration, and gcode sender connection.

17 Secondary USB (USB-Host) Interface

  • Function (UART3): native USB port that can be configured as USB-Host (usb_host, baud 115200).
  • First-time setup: set $USBCDC/Enable=Off before using this port for the first time.
  • Power note: the controller cannot be powered through this USB port.
Clicking the file name .yaml in the upper left corner allows you to download it. ############################################################################## ## THIS EXAMLE ONLY FOR IOTEST, DO NOT USE FOR YOUR MACHINE BEFORE MODIFY ########## ############################################################################# board: PiBot V577 name: PiBot V577 IO Test YAML stepping: engine: I2S_STATIC idle_ms: 254 pulse_us: 4 dir_delay_us: 1 disable_delay_us: 0 ###################################START TEST UART################################### ## uart0 main usb port ## uart1 RS485 tx rx ## uart2 RJ12 TX rx ## uart3 second usb port ##################################################################################### ## Begin expansion port uart and channel setup (test the rj12 port) uart2: txd_pin: gpio.0 rxd_pin: gpio.35 baud: 1000000 mode: 8N1 uart_channel2: report_interval_ms: 75 uart_num: 2 ## End expansion port set up. ## Start USB-HOST FIRST TIME NEED SET $USBCDC/Enable=Off (test the second usb port) #uart3: # usb_host: # baud: 115200 # the baud almost=115200 #uart_channel3: # report_interval_ms: 0 # uart_num: 3 # message_level: Verbose ## Start USB-HOST ###################################END TEST UART#################################### spi: miso_pin: gpio.2 mosi_pin: gpio.1 sck_pin: gpio.21 sdcard: card_detect_pin: NO_PIN cs_pin: gpio.9 i2so: bck_pin: gpio.16 data_pin: gpio.17 ws_pin: gpio.18 ## Begin OLED i2c0: scl_pin: gpio.13 sda_pin: gpio.14 oled: i2c_num: 0 i2c_address: 60 width: 128 height: 64 radio_delay_ms: 1000 ## END OLED probe: pin: gpio.47:low toolsetter_pin: gpio.3:low check_mode_start: true hard_stop: false coolant: mist_pin: gpio.4 flood_pin: gpio.5 ## m7 m8 user_outputs: digital0_pin: I2SO.3 digital1_pin: I2SO.6 digital2_pin: I2SO.11 digital3_pin: I2SO.14 digital4_pin: I2SO.19 digital5_pin: I2SO.22 ##M64 P0 / on -- M65 P0 / off // M64 P1 on -- M65 P1 off start: must_home: false axes: shared_stepper_disable_pin: NO_PIN x: steps_per_mm: 800.000 max_rate_mm_per_min: 5000.000 acceleration_mm_per_sec2: 100.000 max_travel_mm: 300.000 soft_limits: false homing: cycle: 2 positive_direction: false mpos_mm: 150.000 feed_mm_per_min: 100.000 seek_mm_per_min: 200.000 settle_ms: 500 seek_scaler: 1.100 feed_scaler: 1.100 motor0: limit_neg_pin: gpio.42:low limit_pos_pin: gpio.41:low limit_all_pin: NO_PIN hard_limits: false pulloff_mm: 1.000 standard_stepper: step_pin: I2SO.2 direction_pin: I2SO.1 disable_pin: I2SO.0 y: steps_per_mm: 800.000 max_rate_mm_per_min: 5000.000 acceleration_mm_per_sec2: 100.000 max_travel_mm: 300.000 soft_limits: false homing: cycle: 2 positive_direction: false mpos_mm: 150.000 feed_mm_per_min: 100.000 seek_mm_per_min: 200.000 settle_ms: 500 seek_scaler: 1.100 feed_scaler: 1.100 motor0: limit_neg_pin: gpio.40:low limit_pos_pin: gpio.39:low limit_all_pin: NO_PIN hard_limits: false pulloff_mm: 1.000 standard_stepper: step_pin: I2SO.5 direction_pin: I2SO.4 disable_pin: I2SO.7 z: steps_per_mm: 800.000 max_rate_mm_per_min: 5000.000 acceleration_mm_per_sec2: 100.000 max_travel_mm: 300.000 soft_limits: false homing: cycle: 2 positive_direction: false mpos_mm: 150.000 feed_mm_per_min: 100.000 seek_mm_per_min: 200.000 settle_ms: 500 seek_scaler: 1.100 feed_scaler: 1.100 motor0: limit_neg_pin: gpio.38:low limit_pos_pin: NO_PIN limit_all_pin: NO_PIN hard_limits: false pulloff_mm: 1.000 standard_stepper: step_pin: I2SO.10 direction_pin: I2SO.9 disable_pin: I2SO.8 a: steps_per_mm: 800.000 max_rate_mm_per_min: 5000.000 acceleration_mm_per_sec2: 100.000 max_travel_mm: 300.000 soft_limits: false homing: cycle: 2 positive_direction: false mpos_mm: 150.000 feed_mm_per_min: 100.000 seek_mm_per_min: 200.000 settle_ms: 500 seek_scaler: 1.100 feed_scaler: 1.100 motor0: limit_neg_pin: gpio.37:low limit_pos_pin: NO_PIN limit_all_pin: NO_PIN hard_limits: false pulloff_mm: 1.000 standard_stepper: step_pin: I2SO.13 direction_pin: I2SO.12 disable_pin: I2SO.15 b: steps_per_mm: 800.000 max_rate_mm_per_min: 5000.000 acceleration_mm_per_sec2: 100.000 max_travel_mm: 300.000 soft_limits: false homing: cycle: 2 positive_direction: false mpos_mm: 150.000 feed_mm_per_min: 100.000 seek_mm_per_min: 200.000 settle_ms: 500 seek_scaler: 1.100 feed_scaler: 1.100 motor0: limit_neg_pin: gpio.36:low limit_pos_pin: NO_PIN limit_all_pin: NO_PIN hard_limits: false pulloff_mm: 1.000 standard_stepper: step_pin: I2SO.18 direction_pin: I2SO.17 disable_pin: I2SO.16 c: steps_per_mm: 800.000 max_rate_mm_per_min: 5000.000 acceleration_mm_per_sec2: 100.000 max_travel_mm: 300.000 soft_limits: false homing: cycle: 2 positive_direction: false mpos_mm: 150.000 feed_mm_per_min: 100.000 seek_mm_per_min: 200.000 settle_ms: 500 seek_scaler: 1.100 feed_scaler: 1.100 motor0: limit_neg_pin: gpio.10:low limit_pos_pin: NO_PIN limit_all_pin: NO_PIN hard_limits: false pulloff_mm: 1.000 standard_stepper: step_pin: I2SO.21 direction_pin: I2SO.20 disable_pin: I2SO.23 # Begin PWM pwm: pwm_hz: 5000 # direction_pin: NO_PIN output_pin: gpio.45 enable_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% 10000=100.000% off_on_alarm: false # Begin Laser Laser: pwm_hz: 5000 output_pin: gpio.46 enable_pin: NO_PIN disable_with_s0: false s0_with_disable: true tool_num: 1 speed_map: 0=0.000% 255=100.000% off_on_alarm: true ## Start 0-10V 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: 2 speed_map: 0=0.000% 1000=0.000% 24000=100.000% off_on_alarm: false ## Start only for test the RS485chip communication uart1: txd_pin: gpio.12 rxd_pin: gpio.11 rts_pin: gpio.15 baud: 9600 mode: 8N1 ModbusVFD: uart_num: 1 modbus_id: 1 debug: 0 poll_ms: 250 retries: 5 spinup_ms: 6000 spindown_ms: 6000 tool_num: 3 speed_map: 0=0.00% 24000=100.00% off_on_alarm: false atc: m6_macro: s0_with_disable: false disable_with_s0: false model: Huanyang min_RPM: 6000 max_RPM: 24000 cw_cmd: 03 01 01 > echo ccw_cmd: 03 01 11 > echo off_cmd: 03 01 08 > echo set_rpm_cmd: 05 02 rpm*100/60 > echo get_min_rpm_cmd: 01 03 0b 00 00 > 01 03 0B minRPM*60/100 get_max_rpm_cmd: 01 03 05 00 00 > 01 03 05 maxRPM*60/100 get_rpm_cmd: 04 03 01 00 00 > 04 03 01 rpm*60/100