Skip to the content
2 layers73.2 × 58.4 mmPicoIO, the printed circuit board in 3D

An affordable, simple, and feature-rich PIU controller IO board

Size
73.2 × 58.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
53
Nets
55
Pads
193
Tracks, vias
224, 19
Pours
1
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
5 Jan 2023
Updated
20 Feb 2023

Overview

PicoIO is an open-source printed circuit board by dj505, from the dj505/PicoIO repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 73.2 × 58.4 mm with 53 parts on 55 nets, routed with 224 tracks and 19 vias.

It is built around the BSS138. Its parts include 15 connectors, 10 resistors, 10 transistors and 1 IC. It belongs with the RP2040 boards of this library.

Main components

1

README

README.md

PicoIO

An affordable, simple, and feature-rich PIU controller IO board

What is this?

The PicoIO is an extension of the PicoFX that's meant for building larger hand controllers or buttonboards. It's possible to build dance pads too, but as this board lacks multiplexing and is made with 5V LED lighting in mind, it's not ideal. I may design a pad IO PCB in the future, though!

If you're not comfortable with soldering surface mount components, there is a second board revision in the "PicoFX-THT" directory (gerbers included) that only uses through-hole components. Check the components list to see which parts are required for which PCB!

Use cases

  • Hand controller (10 buttons, 12 if you include test/service)
  • Arcade buttonboard, for machines that don't already have a buttonboard (TODO - add support in firmware)
  • Simple dance pad (with limitations)
    • No multiplexing support; all sensors will need to be combined into one signal
    • Limited maximum power supply for LEDs; only designed for 10-20 LEDs total, with a maximum of ~0.7A draw
      • This can be bypassed/remedied by using the expansion IO to control external LEDs with their own external power supply and some MOSFETs. I encourage you to be creative!
  • Upgrade existing hand controllers, in case of broken/defective/underperforming IO

THT vs SMD Boards

The PicoIO has two current revisions, one using surface mount components, and one using through-hole components. There are some notable differences between the two!

  • As the dense traces on the through-hole revision were a challenge to route, the traces used for LED power are thinner, which limits the maximum safe current consumption per button LED to around 0.4A or below.
  • The surface mount revision of the board has much more room for routing, resulting in thicker power traces that can safely handle roughly 1.2A per button LED.
  • The through-hole revision lacks debug headers, but the debug pins on the Pico are still easily accessible. This shouldn't be an issue for anyone anyway, though.

Components

Components (per 1 PCB)SpecsNotesRecommended Purchase LinkApproximate Min. Cost of Components
1x Raspberry Pi PicoAny, however WiFi/Bluetooth is currently unsupportedCan be soldered with pin headers or surface mounted.Link$4
JST XH connectors
  • 10x 4 Pin
  • 1x 6 Pin
  • 1x 3 Pin
  • 1x 2 Pin
2.5mm pin pitch. Designed with vertical headers in mind. Horizontal ones may work but are untested. Recommended purchase link has a minimum order number of 50-100 depending on the connector, but they're still super cheap.$2.50
10x BSS138 MOSFET *SOT23 PackageRequired for button LEDs. Recommendation - buy extras.Link$0.40
10x 2N7002 MOSFET **TO-92 PackageRequired for button LEDs.Link$0.40
10x Resistors *10k Ohm, 0805 Surface MountRequired for button LEDs. Recommendation - buy extras.Link$1
10x Resistors **10k Ohm, 1/4W Through HoleRequired for button LEDs.Link$1
1x Pin Header *3 pinsOptional, only used for debugging.N/AN/A

* Surface mount board ** Through-hole board

Instructions

Assembly is dead simple. The surface mount PCB are as follows:

  1. Solder the surface mount components.
    • Start with the BSS138 MOSFETs as they're the smallest. Use tweezers to hold them in place, tack down one pin with a bit of solder. It's okay if it's messy, you can clean it up after. Once it's tacked in place, solder the remaining 2 pins, then go back and clean up the first one by reflowing it after adding a bit of flux.
      • These can only go on one way, as long as they're not upside down. Make sure the pins are pointing down, not up.
    • Once done, move onto the resistors. Polarity doesn't matter here either. As with the MOSFETs, line them up with tweezers, tack down one side, solder the other side, then clean up the first side with some flux and reflowing. Easy! It's okay if they look messy, they should work just fine as long as the connection is solid.
  2. Solder the Raspberry Pi Pico.
    • Gently hold it in place, tack in one or two corners to keep it held down where you want it, and solder all the pins.
    • This can be done with or without pin headers, whichever you're more comfortable with!
  3. Solder the JST headers in place.
    • Keep the side with the holes facing forward, as per the printing on the silkscreen. Hold them against the PCB while soldering to make sure they're nice and even. Don't add too much solder; your joints should look like concave cones or tents, not spheres. These don't have to be perfect as long as they're solid!
  4. Flash the firmware.
    • Hold down the BOOTSEL button while plugging the PicoIO into your PC. It should show up as a storage device.
    • Drag and drop your preferred .uf2 firmware file from the releases page onto the drive.
    • It should disconnect itself after a short moment. You're good to go!

And here are the steps for the through-hole PCB:

  1. Solder the 2N7001 MOSFETs.
    • The solder points are rather clost together, but if you use flux and don't go overboard on solder, you won't have any issues.
    • Make sure they're oriented according to the silkscreen!
  2. Solder the resistors.
    • These can technically go on either side of the board. If you're mounting the PCB directly against a flat surface, solder them on the top, overlapping the arrow icons. Otherwise, solder them on the bottom.
  3. Solder the Raspberry Pi Pico.
    • It's easiest to solder this before the JST connectors so they don't get in the way.
    • You can choose to surface mount it or use pin headers - both work just as well.
  4. Solder the JST headers in place.
    • Keep the side with the holes facing forward, as per the printing on the silkscreen. Hold them against the PCB while soldering to make sure they're nice and even. Don't add too much solder; your joints should look like concave cones or tents, not spheres. These don't have to be perfect as long as they're solid!
  5. Flash the firmware.
    • Hold down the BOOTSEL button while plugging the PicoIO into your PC. It should show up as a storage device.
    • Drag and drop your preferred .uf2 firmware file from the releases page onto the drive.
    • It should disconnect itself after a short moment. You're good to go!

Notes

Here are some things to keep in mind:

  • LEDs require a separate power input and aren't powered by the Pico itself. Pay close attention to the positive and negative polarity! It's marked on the PCB. LEDs up to 12V are supported but the trace width only allows approximately 0.7A of current. Don't overdo the LEDs!
    • If you're using a reasonable number of 5V LEDs (under 500mA total draw for the entire build), you can jump the 5V and GND pins on the 6 pin expansion port to the LED power input and power the LEDs through USB directly. Do not attempt to power 12V LEDs or anything requiring above 500mA this way.
  • If your LEDs don't have current limiting resistors built in, please make sure you add some! The resistors on this PCB are just for ensuring the MOSFETs work properly.
  • This kit should work equally well with 5V or 12V LEDs, but make sure you have a way to power the LEDs you pick. A reasonable number of 5V LEDs can be powered over USB, but pay attention to the total current draw and don't surpass the USB spec! Doing so is not recommended and would be done at your own risk. It's a good idea to just use a separate power supply or two USB cables for extra lighting.
  • The legend at the top of the PCB describes the pin layout for the 10 main 4 pin button connectors. Everything else has the pins labelled beside its respective connector.
  • Each MOSFET can handle up to 2A bursts if using the recommended parts, but that doesn't mean you should max them out. The trace width used allows for approximately 1.6A of total current draw which should be more than enough to light up each button. There is a second 5V pin broken out from the Pico's USB line that may be additionally used for a small number of WS2812B or similar LEDs.
  • Up to 12V lighting has been tested and works without a hitch. Once again, pay close attention to polarity!

Pinouts

Below are the pinouts for the buttons, as an easy reference in case you're playing around with the firmware.

PicoIORaspberry Pi Pico
P1 down left LEDGPIO0
P1 down left btnGPIO1
P2 down left LEDGPIO2
P2 down left btnGPIO3
P1 up left LEDGPIO4
P1 up left btnGPIO5
P2 up left LEDGPIO6
P2 up left btnGPIO7
P1 center LEDGPIO8
P1 center btnGPIO9
P2 center LEDGPIO10
P2 center btnGPIO11
P1 up right LEDGPIO12
P1 up right btnGPIO13
P2 up right LEDGPIO14
P2 up right btnGPIO15
P1 down right LEDGPIO21
P1 down right btnGPIO20
P2 down right LEDGPIO19
P2 down right btnGPIO18
TESTGPIO17
SERVICEGPIO16
GP26GPIO26
GP27GPIO27
GP28GPIO28

Parts

53
QtyValueFootprintReferences
11Conn_01x04Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ1, J2, J3, J4, J4, J5, J6, J7, J8, J9, J10
1010KResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R2, R3, R4, R5, R6, R7, R8, R9, R10
10BSS138Package_TO_SOT_SMD:SOT-23Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10
4LOGOLogoFootprints:Arrow_6G***, G***, G***, G***
2LOGOLogoFootprints:Btnboard_Arrow-2_8mmG***, G***
1Conn_01x02Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ14
1Conn_01x03Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ11
1Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ13
1Conn_01x06Connector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_VerticalJ12
1LOGOLogoFootprints:PicoIO-8_38mmG***
1LOGOLogoFootprints:PicoIOG***
1LOGOLogoFootprints:Arrow_3mmG***
1LOGOLogoFootprints:CenterStep_6mmG***
1LOGOLogoFootprints:InfinitesimalLoop_18mmG***
1LOGOLogoFootprints:Btnboard_Start-2_8mmG***
1LOGOLogoFootprints:InfinitesimalLogo_18mmG***
1LOGOLogoFootprints:Btnboard_Options-2_8mmG***
1PicoMCU_RaspberryPi_and_Boards:RPi_Pico_SMD_THU1

The 50 most common of 53 parts.

More from dj505/PicoIO

1
  • 2 layers73.2 × 58.4 mmPicoIO THT, the printed circuit board in 3D

    PicoIO THT

    dj505/PicoIO

    An affordable, simple, and feature-rich PIU controller IO board

    52 parts6GPL-3.0

Similar boards

  • 4 layers36 × 50.2 mmRacer, the printed circuit board in 3D

    Racer

    StuckAtPrototype/Racer

    These are structured into their own files. I could have used submodules, but decided against it.

    83 parts3.8kApache-2.0
  • 4 layers95 × 95 mmCube motherboard, the printed circuit board in 3D

    Cube motherboard

    willem-pennings/balancing-cube

    A cube that balances itself in a corner or edge using reaction wheels

    52 parts1.1kGPL-3.0
  • 2 layers54.6 × 70.9 mmBeagleLogic Cape, the printed circuit board in 3D

    BeagleLogic Cape

    abhishek-kakkar/BeagleLogic

    A Software Suite that implements a logic analyzer with the PRU on the BeagleBone / BeagleBone Black.

    22 parts479GPL-3.0
  • 2 layers44.2 × 29.3 mmI2c tiny usb, the printed circuit board in 3D

    I2c tiny usb

    harbaum/I2C-Tiny-USB

    Cheap and simple I²C to USB interface

    27 parts454
  • 2 layers21.6 × 52.3 mmPs2 pico hat, the printed circuit board in 3D

    Ps2 pico hat

    No0ne/ps2x2pico

    USB keyboard/mouse to PS/2 interface converter using a Raspberry Pi Pico

    17 parts399MIT
  • 2 layers45 × 45 mmAirCube, the printed circuit board in 3D

    AirCube

    StuckAtPrototype/AirCube

    Works standalone out of the box. Pairs with Home Assistant in minutes. Other platforms are supported through community-contributed extensions.

    61 parts379Apache-2.0
  • 4 layers74 × 104 mmBeepy, the printed circuit board in 3D

    Beepy

    sqfmi/beepy-hardware

    Beepy Hardware

    160 parts348MIT

Questions

How big is the PicoIO PCB?

It measures 73.2 × 58.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the PicoIO use?

53 parts, built around the BSS138. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the PicoIO KiCad files?

From the dj505/PicoIO repository on GitHub, at the commit this page was made from: the board is PicoIO.kicad_pcb and its schematic PicoIO-THT/PicoIO-THT.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the PicoIO design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).