PiBot IsoSwitch V4

Three relay channels · documented for V5.88, V4.96, V5.77 and V4.7B
Mains voltage never touches the controller. The controller only ever supplies a low-voltage signal. All mains wiring stays on the relay’s contact side, inside a rated enclosure, with fusing, wire size and grounding to your local wiring rules. Switch everything off and confirm the LEDs are out before changing a wire or a jumper.
This is the common relay-board reference for four FluidNC controllers. The terminals, trigger jumpers and first-test method are shared. The available controller outputs differ, so use the compatibility table below to open the correct board-specific 4.3 wiring page.

The relay board

The PiBot IsoSwitch V4 carries three independent relays. Each gives you a dry changeover contact — NC, COM and NO. The input stage uses optocouplers, while the relay contacts keep the switched circuit physically separate from the controller-side signal wiring. That separation does not replace correct enclosure, fusing, spacing or load ratings.

Two quite different jobs are worth knowing about. The obvious one is switching a load. The other is using a contact as an enable signal: some servo drives will not run until an external contact is closed, and wiring that enable input through one of these relays lets G-code arm and disarm the drive.

The Always on and Always off jumper positions act as a manual override for bench checks, so the contact wiring can be proved before a controller signal is connected.

Terminal groupPinsWhat it is
Power in− +4.5–40 V DC, 24 V by default. This powers the relay coils — it does not come from the controller.
INPUTGND S1 S2 S3The three trigger signals, one per relay, plus the shared return. Accepts 5 V or 3.3 V logic from the mainboard.
ContactsNC COM NO ×3The switched side. NO is open until the relay is energised; NC is closed until it is.
OUTPUTO1…O4 GNDMarked (future) on the silkscreen — reserved, not used by this procedure.
The GND wire is not optional. The relay board runs from its own DC supply, so its INPUT GND must be connected to the mainboard GND. Without that shared return the S1/S2/S3 inputs have no reference and the relays will behave unpredictably or not at all.

Trigger jumpers — JP4 / JP5 / JP6

Each relay has its own two-jumper block: JP4 → S1, JP5 → S2, JP6 → S3. The block decides what the signal on that input means. The silkscreen numbers the three rows 1 (bottom), 2 (middle) and 3 (top), and each column takes one jumper — down bridges 1–2, up bridges 2–3.

PiBot IsoSwitch V4: NC/COM/NO contacts, 4.5-40 VDC input, GND/S1/S2/S3 inputs, and the JP4/JP5/JP6 trigger jumper settings for Active High, Active Low, Always on and Always off
PiBot IsoSwitch V4. The jumper block sets Active High (default), Active Low, Always on or Always off, per relay. Click the image to view it full size.
SettingJumpersLeft columnRight columnWhat the relay does
Active High — defaultdown (1–2)down (1–2)A high signal on that input energises the relay.
Active Lowup (2–3)up (2–3)A low signal energises the relay — the inverse of the above.
Always onup (2–3)down (1–2)Relay stays energised, ignoring the input.
Always offdown (1–2)up (2–3)Relay stays de-energised, ignoring the input.
Active High ↔ Active Low reverses which input level energises the coil. With the controller at a given idle level, this reverses which contact path is closed, giving the practical NO/NC behaviour requested without changing the signal wire or YAML. It does not rename the physical terminals: whenever the relay coil is de-energised, COM–NC is closed and COM–NO is open. As the drawing says, the NC and NO states are opposite and triggering refers to the change in the NC state.

Choose the jumper polarity and the physical NO or NC terminal together. Decide what the machine must do while booting, after reset or alarm, and when either supply is removed; then confirm every state with a continuity meter before connecting the load.
💡 Always on / Always off are bench aids, not machine settings: they let you prove the contact wiring and the load circuit before any signal wiring exists. Put the jumpers back to Active High or Active Low before you run the machine.

Controller compatibility

The four documented controllers use the same relay board but expose different signal sources. Each controller has its own wiring drawing and pin notes on its 4.3 page — use the links in the last column.

Controller5 V buffered output headerI2SO outputExtra GPIO (3.3 V)Its 4.3 page
V5.88 UltraGPIO.4 GPIO.5 GPIO.45 GPIO.46I2SO.23 I2SO.21 I2SO.20yes — GPIO.3 GPIO.10 GPIO.15V5.88 4.3
V4.96 ProGPIO.4 GPIO.12 GPIO.14 GPIO.13I2SO.23 I2SO.21 I2SO.20—V4.96 4.3
V5.77 CarrierGPIO.4 GPIO.5 GPIO.45 GPIO.46I2SO.23 I2SO.21 I2SO.20—V5.77 4.3
V4.7BGPIO.12 GPIO.4 GPIO.13 GPIO.14I2SO.23 I2SO.21 I2SO.20—V4.7B 4.3
💡 The I2SO numbers shown are the C motor connector in each board’s test YAML. Use them only when that connector is unused. Another unused axis can also supply three signals, but its exact I2SO numbers must come from that board’s Pinout Reference. A signal can have only one job: an I2SO line used for a relay is unavailable to that axis, and a 5 V header pin used for a relay is unavailable to any spindle, laser, MOSFET or 0–10 V function sharing it.

Wiring drawings by controller

Choose the drawing for your controller. The orange boxes in each drawing are alternative signal sources; use one route, not all of them. Open the matching 4.3 page for its jumper, shared-pin and YAML notes.

Wiring and first test

  1. Everything off. Controller and relay-board supply both disconnected; LEDs out.
  2. Set the jumpers on JP4/JP5/JP6 for the behaviour you want. Leave them at the default Active High unless you have a reason not to.
  3. Wire three signals and a ground from one of your board’s outputs to S1 S2 S3 and GND. Use fewer than three if you only need one or two relays — the unused inputs simply stay unconnected.
  4. Power the relay board from its own 4.5–40 V DC supply on the − / + terminals. 24 V is the default.
  5. Declare the pins in your YAML — see below — and reload the configuration.
  6. Test with no load connected. Send one command at a time and confirm only the intended relay clicks and its LED changes.
  7. Check the contact with a meter before wiring the real load, so you know NO and NC are where you expect in the resting state.
  8. Only then wire the load through the contacts, on the far side of the relay, with its own protection.

YAML — a worked example

This worked I2SO example uses I2SO.23 → S1, I2SO.21 → S2 and I2SO.20 → S3, matching all four board-specific drawings. Coolant gives two relays the simple M7/M8/M9 commands; a user output gives the third.

coolant:
  mist_pin: I2SO.23        # S1 - M7 on, M9 off
  flood_pin: I2SO.21       # S2 - M8 on, M9 off
  delay_ms: 0

user_outputs:
  digital0_pin: I2SO.20    # S3 - M64 P0 on, M65 P0 off
RelayInputSignal in this exampleTurn onTurn off
K1S1I2SO.23 — mistM7M9
K2S2I2SO.21 — floodM8M9
K3S3I2SO.20 — user output 0M64 P0M65 P0
💡 Which command drives which relay is entirely your YAML’s business, not the relay board’s. Swap the pin names above and the commands follow. If you are wiring from the 5 V header instead of I2SO, put that header’s GPIO numbers in the same places — for example mist_pin: gpio.4.
Pass: each command switches only its assigned relay, the LED follows, M9 releases K1/K2 in this example, and M65 P0 releases K3. The measured COM–NO / COM–NC state matches the selected jumper polarity.
Fail: more than one relay changes, a relay starts in an unsafe state, a command does not release it, or the continuity reading disagrees with the selected contact. Disconnect both supplies and correct the signal mapping, jumper positions or NO/NC wiring before adding a load.

Quick troubleshooting

  • Nothing clicks at all. The relay board has no supply of its own, or the INPUT GND is not tied to the mainboard GND. Both are required.
  • A relay is on the moment power is applied and never turns off. Its jumper block is on Always on, or on Active Low while the output rests low.
  • A relay never turns on. Its jumper block is on Always off, or on the wrong one of Active High / Active Low for that output’s resting level.
  • The load is on when the machine is idle. You are on the NC contact when you wanted NO, or the trigger polarity is inverted. Decide the safe state first, then pick the contact and the jumper to match.
  • The command does nothing. The pin is not declared in the YAML, or it is declared on a pin you did not wire. On V4.96 Pro, the I2SO route also needs the slot routing jumpers installed.
  • V4.96 Pro: the axis stopped working, or something got damaged. A slot must never have both the routing jumpers installed and an on-board driver fitted.
  • The spindle, laser or 0–10 V output stopped working after wiring a relay. You took a pin that shares that function — especially likely on V4.7B. Move the relay to an I2SO output instead.