PiBot V4.7B — Pin Definition Overview

FluidNC / grblHAL · Plug-in classic ESP32 module · Six external-driver signal groups

FluidNC ports are assigned by the YAML file, so the software functions are configurable rather than permanently fixed.

The definitions on this page match the supplied V4.7B I/O-test YAML. Check your active YAML and board revision before wiring a machine.

PiBot V4.7B pinmap diagram with numbered connector groups
The numbered groups on the diagram correspond to the sections below. Click the diagram to view it at full size.

Quick Reference — UART Channels

ChannelPhysical PortPins in Test YAMLTypical Use
UART0Main USB 12On plug-in ESP32 moduleFirmware, console and G-code sender
UART1RS485 3TX GPIO.15 · RX GPIO.16 · RTS GPIO.14Modbus VFD, 9600 8N1 in test YAML
UART2RJ12 9TX GPIO.25 · RX GPIO.27 when enabledCompatible PiBot pendant / I/O expander

Key to the Numbered Groups

💡 Tip: use the pinmap for connector location, the quick-reference tables for signal names, and the full YAML at the bottom of this page for the active test assignment.
Inputs Outputs Power Drivers Interface

1 Eight Input Channels Inputs

Eight signal inputs are available along the board edge. The supplied test YAML assigns them as follows.

GPIOTest functionGPIOTest function
GPIO.2Probe, pull-up, active lowGPIO.26Tool setter, pull-up, active low
GPIO.33X limit −GPIO.32X limit +
GPIO.35Y motor 0 limitGPIO.34Y motor 1 limit
GPIO.39Z limitGPIO.36A limit

2 5 V Signal Outputs Outputs

  • Header signals: GPIO.12, GPIO.4, GPIO.13 and GPIO.14, with GND.
  • Test YAML: GPIO.4 = PWM tool 0, GPIO.12 = laser tool 1, GPIO.13 = 0–10 V generator.
  • GPIO.4 and GPIO.12 also drive the matching MOSFET channels in ; they are shared signals, not independent outputs.

3 RS485 Interface

  • On-board MAX3485 transceiver with A/B terminal for Modbus RTU devices.
  • Test YAML UART1: TX GPIO.15, RX GPIO.16, direction GPIO.14, 9600 baud, 8N1.
  • If communication fails, first confirm baud, slave address and A/B polarity.

4 0–10 V Interface Outputs

  • Analog output: GPIO.13; use the 0–10 V and GND terminals for the VFD analog input.
  • Forward uses GPIO.15 and Reverse uses GPIO.14 with the contact common terminal.
  • GPIO.14/15 are shared with RS485. The supplied test YAML leaves Forward/Reverse unassigned while UART1 is enabled.

5 10 V Adjustment Outputs

  • Issue the maximum spindle command used by the YAML, then measure the analog output.
  • Turn the trimmer slowly until full-scale output reaches the required voltage.
  • Do not adjust by guesswork; keep the multimeter connected while calibrating.

6 MOSFET Outputs Outputs

  • Two low-side channels: io.12-MOS-GND follows GPIO.12 and io.4-MOS-GND follows GPIO.4.
  • Connect the load between Vmot-main (+) and the corresponding switched MOS-GND terminal.
  • Maximum current: 1.5 A per channel. These outputs are for light loads only.
⚠ Do not connect a heavy load directly. Use the MOSFET output to control an external relay or suitable power driver; overloading the channel can burn the MOSFET.

7 Main Power 12–24 V DC Power

  • Main carrier-board input: 12–24 V DC.
  • Confirm VIN and GND polarity with a multimeter before power-on.
  • USB alone powers the ESP32-side connection but is not enough for complete carrier-board testing.

8 OLED Interface Interface

  • GND, 3.3 V, SCL GPIO.25, SDA GPIO.27.
  • The test YAML enables a 128×64 OLED at I2C address 0x3C.
  • The OLED shares both signal pins with RJ12 ; enable only one interface at a time.

9 RJ12 Pendant / Expander Interface

  • Provides GND, Vmot-main, +5 V and UART2 signals on GPIO.25/GPIO.27 for a compatible PiBot pendant or I/O expander.
  • The supplied YAML keeps UART2 commented while the OLED is active.
  • Power off before connecting an accessory. Do not assume a telephone cable or third-party pinout is compatible.
⚠ RJ12 and OLED share GPIO.25/GPIO.27 and cannot be enabled at the same time.

10 Six External-Driver Signal Groups Drivers

Each connector provides EN / STP / DIR / GND. All six groups are intended for compatible external stepper drivers; V4.7B has no on-board StepStick sockets.

ConnectorEnableStepDirectionTest YAML use
XI2SO.0I2SO.2I2SO.1X motor
YI2SO.7I2SO.5I2SO.4Y motor 0
Z connectorI2SO.8I2SO.10I2SO.9Y motor 1
A connectorI2SO.15I2SO.13I2SO.12Z motor
B connectorI2SO.16I2SO.18I2SO.17A motor
C connectorI2SO.23I2SO.21I2SO.20M7 / M8 / M64 P0 signal test

11 microSD Interface

  • SPI MISO GPIO.19, MOSI GPIO.23, SCK GPIO.18.
  • Card select: GPIO.5.
  • Insert or remove the card only when it is safe to do so and confirm it appears in FluidNC WebUI.

12 Main USB Interface

  • The micro-USB connector is on the plug-in classic ESP32 module.
  • Use a data-capable cable for FluidNC installation, serial console, boot logs and a USB G-code sender.
  • If no serial port appears, try another data cable before troubleshooting the board.

Complete V4.7B Test YAML

📄 The complete test file is displayed below. Click the filename in the code block header to download it. This is an I/O-test profile, not a ready-to-run machine configuration.
############################################################################## ## THIS EXAMPLE IS ONLY FOR I/O TESTING. MODIFY IT BEFORE USING IT ON A MACHINE. #### ############################################################################# board: PiBot V47B name: PiBot V47B IO Test YAML stepping: engine: I2S_STATIC idle_ms: 255 pulse_us: 4 dir_delay_us: 4 disable_delay_us: 0 segments: 6 ###################################START TEST UART################################### ## uart0 main usb port ## uart1 RS485 tx rx ## uart2 RJ12 TX rx ##################################################################################### ## Begin expansion port uart and channel setup (test the rj12 port) ##uart2: ## txd_pin: gpio.25 ## rxd_pin: gpio.27 ## baud: 1000000 ## mode: 8N1 ##uart_channel2: ## report_interval_ms: 75 ## uart_num: 2 ###################################END TEST UART#################################### spi: miso_pin: gpio.19 mosi_pin: gpio.23 sck_pin: gpio.18 sdcard: card_detect_pin: NO_PIN cs_pin: gpio.5 i2so: bck_pin: gpio.22 data_pin: gpio.21 ws_pin: gpio.17 ## Begin OLED i2c0: sda_pin: gpio.27 scl_pin: gpio.25 oled: i2c_num: 0 i2c_address: 60 width: 128 height: 64 radio_delay_ms: 1000 ## END OLED probe: pin: gpio.2:pu:low toolsetter_pin: gpio.26:pu:low check_mode_start: true hard_stop: false coolant: mist_pin: I2SO.23 flood_pin: I2SO.21 ## m7 m8 user_outputs: digital0_pin: I2SO.20 ##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.33:low limit_pos_pin: gpio.32: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 ######disable_pin:This is used if your controller uses individual disable pins for each driver. ######Most basic controllers use a common disable pin for all drivers and that is set elsewhere in the config file. ######You can invert the direction by changing the active state attribute (:high or :low) 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.35:low limit_pos_pin: NO_PIN 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 motor1: limit_neg_pin: gpio.34: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 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.39: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 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.36:low limit_pos_pin: NO_PIN limit_all_pin: NO_PIN hard_limits: false pulloff_mm: 3.000 standard_stepper: step_pin: I2SO.18 direction_pin: I2SO.17 disable_pin: I2SO.16 # Begin PWM pwm: pwm_hz: 5000 # direction_pin: NO_PIN output_pin: gpio.4 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.12 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: NO_PIN reverse_pin: NO_PIN pwm_hz: 5000 output_pin: gpio.13 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.15 rxd_pin: gpio.16 rts_pin: gpio.14 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