Skip to the content
PCBKitNew board
2 layers56 × 80 mmRiver, the printed circuit board in 3D

a quick stepping stone

Size
56 × 80 mm
Copper layers
2
Thickness
1.6 mm
Parts
138
Nets
139
Pads
537
Tracks, vias
1,227, 247
Pours
2
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
26 Jul 2026
Updated
27 Sep 2026

Overview

River is an open-source printed circuit board by HenryLi-0, from the HenryLi-0/river repository on GitHub, published under the CERN-OHL-S-2.0 licence. It is a 2-layer board of 56 × 80 mm with 138 parts on 139 nets, routed with 1,227 tracks and 247 vias.

It is built around the RP2040, TPA6132A2RTE and PCM5101APW, with the SS14 among its other parts. Its parts include 52 capacitors, 26 resistors, 20 connectors, 13 diodes and 9 ICs. It belongs with the RP2040 boards of this library.

Main components

4

README

README.md

River

by @HenryLi-0

banner

All designs are open source! Hardware licensed under CERN OHL S v2.

River

a quick stepping stone


What this?

A couple of months ago, after listening to archived music on the Internet Archive with Webamp, I thought the graphics on the right side (powered by Milkdrop) were pretty cool. I've always liked how Geometry Dash levels typically have well synced gameplay, since it's just so satisfying. Additionally, I also dislike how everything is switching to streamsing services (both because of the subscription model and more importantly the amount of cellular data it uses lol), so I basically wanted to bring music-synced graphics onto a portable offline device!

So, River is a relatively small PCB, hosting a dual RP2040 setup, each having custom firmware! The first one handles all the user controls, file loading, and the audio jack, while the second handles the display math, communicating with the first RP2040 by SPI and UART. Through this (rather unconventional) setup, audio can play continously while the second RP2040 works on more taxing graphics using the Pico SDK for C, with the second RP2040 basically just doing the graphics. It does this by having a PCM5101A and a TPA6132A2RTE into a TRS audio jack!

In retrospect, this project wasn't exactly a quick stepping stone (as in, it took over fifty hours of development), but it sure did review many topics surrounding PCB design with KiCAD, building on to what I learned from Hackpad and Raven! Originally, this was in case fermion would require a custom PCB, but who knows if it'll need one in the end. Anyways, working on River did teach a lot, as well as letting me have fun creating art for it!


Huge thanks to this guide from Blueprint and this documentation from Raspberry Pi for valuable information on RP2040 wiring design. Thanks!


Pictures!


Directory

  • CAD
    • The case is made in Onshape!
  • Firmware
    • Two firmwares for the two RP2040s!
  • Updatelogs
    • As always, lots of behind the scenes content! It's also a decently long read as always :D
  • BOM
    • Want to build one yourself? Here's the BOM in CSV form! However, I suggest using the Google Sheets one, check down below for that!

Usage

Assembly

  1. First, one must obtain the PCB! It's not really made for hand-soldering, more so for JLCPCB's or any other PCBA service to assemble (but feel free to give it a try if super experienced!).
  2. The main PCB's here? Great! Flash the two RP2040s with their specific firmwares and make sure all status LEDs and storage works! (Same process as testing a devboard, except there's not really any free pins...)
  3. Once the RP2040s are confirmed to be in good condition, test the micro SD card slot and the audio jack! A micro SD card and a TRS audio plug (usually in random earbuds) are needed! Load music on and see if it works (after setting the firmware to play a song from the micro SD card).
  4. Once those also work, solder on the displays and keys! This should be fairly straightforward, watch a soldering tutorial if needed! (Yes, a soldering iron is also needed!)
  5. Assemble everything into the case and screw in the M2 screws! Adjust the case if needed if the audio plug doesn't fit well with the current slot!

BOM

Note: This list was made in mid-September 2026. Depending on a ton of factors, this price may change over time, so these prices may be different! Multiple parts are sourced by me (since I have a bunch of extra parts laying around), so it will likely cost a bit more. Currently, shipping and tax estimates are included (to NYC), check out the updatelogs whenever construction occurs to find the actual price it resulted in!

Here's the original Google Sheets BOM, color coded too! (It'll also be more updated, but I'll try to sync this one too!)

PartPriceLink
Board PCB (PCBA)$84.61JLCPCB
M2 Screws (16mm, 50pcs)$1.41AliExpress
128x32 OLED Display (White, 1pc)$2.44AliExpress
128x160 TFT Display (1.8 inch TFT)$4.06AliExpress
WS2812B LEDs (3)$0.00Anywhere
Micro SD Card (1)$0.00Anywhere
EC11 Rotary Encoder (1)$0.00Anywhere
Cherry MX Switch (3)$0.00Anywhere
Estimated Shipping (JLCPCB to NYC)$11.05JLCPCB
Estimated Shipping (AliExpress to NYC)$0.00AliExpress
Buffer$5.00
TOTAL$108.57

Parts

138
QtyValueFootprintReferences
220.1uFCapacitor_SMD:C_0402_1005MetricC2, C3, C11, C12, C17, C23, C24, C26, C27, C28, C29, C30, C31, C32, C33, C34 +6
101uFCapacitor_SMD:C_0402_1005MetricC1, C10, C20, C25, C45, C46, C47, C49, C50, C51
10LOGOLOGOG***, G***, G***, G***, G***, G***, G***, G***, G***, G***
8Conn_01x01TestPoint:TestPoint_Pad_D1.0mmJ6, J9, J17, J18, J19, J20, J21, J22
7330Resistor_SMD:R_0402_1005MetricR17, R18, R22, R23, R24, R25, R26
65.1KResistor_SMD:R_0402_1005MetricR1, R2, R8, R9, R10, R11
6LED_WS2812BScottoKeebs_Components:LED_WS2812BD11, D12, D13, D14, D15, D16
5LEDLED_SMD:LED_0603_1608MetricD3, D4, D5, D9, D10
4100nFCapacitor_SMD:C_0402_1005MetricC36, C38, C40, C43
410uFCapacitor_SMD:C_0603_1608MetricC13, C14, C18, C19
410uFCapacitor_SMD:C_0402_1005MetricC35, C37, C39, C48
41KResistor_SMD:R_0402_1005MetricR5, R6, R14, R16
42.2uFCapacitor_SMD:C_0402_1005MetricC41, C42, C44, C52
427Resistor_SMD:R_0402_1005MetricR3, R4, R12, R13
433pFCapacitor_SMD:C_0402_1005MetricC15, C16, C21, C22
3Conn_01x01Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ8, J15, J16
3SwitchButton_Switch_Keyboard:SW_Cherry_MX_1.00u_PCBSW3, SW4, SW5
210KResistor_SMD:R_0402_1005MetricR7, R15
212MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1, Y2
2470Resistor_SMD:R_0402_1005MetricR19, R20
2Conn_01x01TestPoint:TestPoint_Pad_1.0x1.0mmJ7, J13
2NCP1117-3.3_SOT223Package_TO_SOT_SMD:SOT-223-3_TabPin2U2, U4
2RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU1, U5
2SS14Diode_SMD:D_SMAD1, D2
2SW_PushButton_Switch_SMD:SW_Push_SPST_NO_Alps_SKRKSW1, SW2
2W25Q16JVZPIQ TRPackage_SON:Winbond_USON-8-1EP_3x2mm_P0.5mm_EP0.2x1.6mmU3, U6
1(A) USB_C_Receptacle_USB2.0_14PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1
1(B) USB_C_Receptacle_USB2.0_14PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J2
1(C) USB_C_Receptacle_USB2.0_14PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J3
1AudioJack3Connector_Audio:Jack_3.5mm_CUI_SJ-3523-SMT_HorizontalJ12
1DNFResistor_SMD:R_0402_1005MetricR21
1LCD_128x160Library:LCD_128x160J11
1Micro_SD_CardConnector_Card:microSD_HC_Molex_47219-2001J14
1OLED_128x32ScottoKeebs_Components:OLED_128x32J10
1PCM5101APackage_SO:TSSOP-20_4.4x6.5mm_P0.65mmU7
1RotaryEncoder_SwitchRotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mmSW6
1TLV70033_SOT23-5Package_TO_SOT_SMD:SOT-23-5U8
1TPA6132A2RTEPackage_DFN_QFN:WQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm_ThermalViasU9

Questions

How big is the River PCB?

It measures 56 × 80 mm and has 2 copper layers, 1.6 mm thick.

What parts does the River use?

138 parts, built around the RP2040, TPA6132A2RTE, PCM5101APW and SS14. 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 River KiCad files?

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

Can I use the River design in my own project?

Its repository publishes it under the CERN-OHL-S-2.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).

Similar boards

  • 2 layers134.3 × 80.6 mmMA12040PTest, the printed circuit board in 3D

    MA12040PTest

    Kbij/VolumioAmp

    A Raspberry Pi CM4 Volumio Amplifier combination

    153 parts
  • 4 layers85 × 56 mmPico vga sd aud, the printed circuit board in 3D

    Pico vga sd aud

    kuninet/KZ80-USBKBD

    KZ80 MSX USB Keyboard Adapter

    71 parts5MIT
  • 4 layers100 × 100 mmRpi pico kit, the printed circuit board in 3D

    Rpi pico kit

    999matej999/pico-kit-pcb

    198 parts1GPL-3.0
  • 2 layers40.6 × 25.5 mmPCM510xA I2S DAC, the printed circuit board in 3D

    PCM510xA I2S DAC

    CedarGroveStudios/PCB_PCM510xA_I2S_DAC

    An I2S stereo audio DAC with an internal master clock PLL and a charge pump for direct-coupled ground-centered audio output.

    34 parts1
  • 6 layers94 × 78 mmController, the printed circuit board in 3D

    Controller

    Iari-Lab/OpenAcousticCamera

    130 parts26
  • 4 layers65 × 30 mmSonatino, the printed circuit board in 3D

    Sonatino

    luminationlabs/Sonatino

    Audio development board based on ESP32-S3

    129 parts41CERN-OHL-P-2.0