Skip to the content
4 layers100 × 90 mmOpentouch s3, the printed circuit board in 3D

A modern remake of the Bare Conductive Touch Board: 12 capacitive touch electrodes, MP3/WAV/MIDI audio, and now WiFi, Bluetooth LE, USB-C, a proper LiPo power path, a fuel gauge, line-in, MIDI out, Qwiic and an RGB LED.

Size
100 × 90 mm
Copper layers
4
Thickness
1.6 mm
Parts
185
Nets
116
Pads
649
Tracks, vias
1,670, 361
Pours
9
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
30 Sep 2026
Updated
15 Oct 2026

Overview

Opentouch s3 is an open-source printed circuit board by JoeMighty, from the JoeMighty/opentouch-s3 repository on GitHub. It is a 4-layer board of 100 × 90 mm with 185 parts on 116 nets, routed with 1,670 tracks and 361 vias.

It is built around the SN74LV1T125DBVR-TP, ESP32-S3-WROOM-1-N16R8 and MPR121QR2, with the SRV05-4-P-T7, BQ24074RGTR and MAX17048G+T10 among its other parts. Its parts include 54 resistors, 44 capacitors, 15 connectors, 10 diodes and 9 ICs. It belongs with the radio and wireless and audio and music boards and the ESP32 boards of this library.

Main components

12

README

README.md

OpenTouch S3

Rev B1 · an open hardware remake of the Bare Conductive Touch Board

MCU ESP32-S3 Touch MPR121 x12 Audio VS1053B USB Type-C Power LiPo + BQ24074 MIDI TRS Type A I2C Qwiic

KiCad 7 PCB 4 layer, 100 x 90 mm Assembly JLCPCB ready Arduino ESP32 core Python generator scripts Freerouting autorouted

License CC BY-SA 3.0 Status not yet fabricated Docs GitHub Pages

Top of the OpenTouch S3 PCB

Project page · Schematic · Fab files · Order it


A modern remake of the Bare Conductive Touch Board: 12 capacitive touch electrodes, MP3/WAV/MIDI audio, and now WiFi, Bluetooth LE, USB-C, a proper LiPo power path, a fuel gauge, line-in, MIDI out, Qwiic and an RGB LED.

Based on the Bare Conductive Touch Board open hardware files (CC BY-SA 3.0, https://github.com/BareConductive/touch_board_cad_files). This is an independent adaptation, not affiliated with or endorsed by Bare Conductive, and released under the same licence (CC BY-SA 3.0).

Status: Rev B1, design complete, not yet fabricated or tested. Read "Before you order" below.

What's in this repository

PathWhat it is
hardware/kicad/KiCad 7 project: hierarchical schematic (5 sheets), 4-layer PCB
hardware/kicad/lib/Project symbols (VS1053B, MAX17048, electrode pad) and the edge electrode footprint
hardware/fab/OpenTouch_S3_gerbers_JLCPCB.zipGerbers + drill files, upload this to JLCPCB
hardware/fab/OpenTouch_S3_BOM_JLCPCB.csvAssembly BOM with LCSC part numbers (57 lines, 145 placed parts)
hardware/fab/OpenTouch_S3_CPL_JLCPCB.csvPick-and-place file (rotations pre-corrected for JLCPCB)
hardware/fab/OpenTouch_S3_BOM_full.csvFull BOM including hand-fit (DNP) parts and notes
hardware/fab/OpenTouch_S3_schematic.pdfSchematic / wiring diagram
hardware/gen/Python scripts that generate the schematic and PCB from one netlist (design.py)
docs/index.htmlProject page for GitHub Pages
docs/renders/Board renders: top, bottom, inner GND plane, inner 3V3 plane, routing

Project page

To publish the project page: repo Settings > Pages > Source: Deploy from a branch > Branch: main, folder /docs > Save. It will appear at https://<your-username>.github.io/opentouch-s3/.

Board summary

  • 100 x 90 mm, 4 layers (signal / GND plane / 3V3 plane / signal), 1.6 mm, ENIG recommended (the electrode pads are exposed)
  • MCU: ESP32-S3-WROOM-1-N16R8 (16 MB flash, 8 MB PSRAM), native USB (CDC + MIDI capable), WiFi, Bluetooth LE. The module is pre-certified for radio (FCC / CE-RED / UKCA), so the board needs no intentional-radiator certification of its own.
  • Touch: NXP MPR121 at I2C 0x5C (same address as the Touch Board), 12 electrodes on crocodile-clip pads, 3.5 mm screw terminals and a 2.54 mm header. Every electrode has ESD protection (SRV05-4).
  • Audio: VS1053B. Headphone out (AC coupled, safe into any amplifier), stereo line-in (record to SD), microSD, real-time MIDI synth mode.
  • Power: USB-C sink (5.1 k CC resistors, works with C-to-C cables), BQ24074 power-path charger (input OVP to 10.5 V, 1 A input limit, 500 mA charge, cut JP1 for 250 mA), JST-PH LiPo input with reverse polarity MOSFET and PTC fuse, TPS63001 buck-boost 3.3 V (runs the board across the whole LiPo range), MAX17048 fuel gauge (I2C 0x36). The power switch turns the board off while charging continues. External 4.5-10 V input on the VIN header pin.
  • I/O: Arduino R3 header pattern (3.3 V logic, do not feed 5 V into IO pins), Qwiic / STEMMA QT, MIDI OUT on a 3.5 mm TRS type A jack (tip = MIDI pin 5, ring = pin 4, MMA CA-033 3.3 V signalling), WS2812B-2020 RGB LED, BOOT and RESET buttons, test points on every rail.

ESP32-S3 pin map

FunctionGPIOHeader
I2C SDA / SCL (MPR121, MAX17048, Qwiic)IO8 / IO9D2 / D3
MPR121 IRQIO10D4
SPI MOSI / SCK / MISO (VS1053 + microSD)IO11 / IO12 / IO13D11 / D13 / D12
microSD CSIO14
VS1053 XCS / XDCS / DREQ / XRESETIO15 / IO16 / IO17 / IO46
Serial MIDI into VS1053 (close JP5)IO18
MIDI OUT (UART TX)IO47
RGB LED (WS2812B)IO48
L LEDIO45
USB power present (PGOOD, active low)IO21
A0 A1 A2 A3 A4 A5 (ADC1, also ESP32 touch pins)IO1 IO2 IO4 IO5 IO6 IO7A0-A5
D0 RX / D1 TXIO44 / IO43D0 / D1
D5 D6 D7 D8 D9 D10IO3 IO41 IO42 IO38 IO39 IO40
BOOT buttonIO0

Strapping pins are handled: IO0 has the BOOT button, IO45 drives an LED to ground (low at boot), IO46 holds the VS1053 in reset through a 100 k pull-down (low at boot), IO3 is only used as a plain digital pin.

Solder jumpers

JumperDefaultChange
JP1bridged: 500 mA chargecut for 250 mA (small cells under 500 mAh)
JP2bridged: no battery thermistorcut when you fit a 10 k NTC to J2
JP31-2: power-save mode2-3: forced PWM, lowest audio noise, slightly higher idle current
JP4openclose to boot the VS1053 into real-time MIDI synth mode
JP5openclose to send serial MIDI from IO18 into the VS1053

Ordering at JLCPCB

  1. Upload OpenTouch_S3_gerbers_JLCPCB.zip. Choose 4 layers, 1.6 mm, ENIG surface finish (for the touch pads), any mask colour.
  2. Enable PCB Assembly, top side. Upload the BOM and CPL files.
  3. Check the part placement preview. Rotations were corrected for JLCPCB's conventions, but always confirm pin 1 on the ICs (U2, U3, U4, U5, U6, U10) and the connectors before confirming.
  4. The Arduino headers (J13-J16), the touch header (J9) and the NTC header (J2) are left unfitted on purpose. Solder them yourself if you want them.
  5. Stock note: the 12.288 MHz crystal (Y1, NX3225GA) has low stock at LCSC. Any 3.2 x 2.5 mm 12.288 MHz crystal with 8 pF load works (e.g. ABM8-12.288MHZ-8-D1X-T). With a different load capacitance change C18/C19 to 2 x (CL - 3 pF).

First power-up

  1. Before connecting anything, measure resistance from 3V3 (TP2) and VSYS (TP1) to GND (TP4). Both should read well above 100 ohms.
  2. Plug in USB-C with the switch ON: the green PWR LED lights, TP2 reads 3.3 V, TP1 about 4.4 V. With a battery attached the yellow CHG LED shows charging.
  3. The ESP32-S3 appears as a USB serial device. If it doesn't, hold BOOT, tap RESET, release BOOT.

Before you order

  • Open it in KiCad and review the layout. The board was placed by script and routed with Freerouting plus scripted repairs. KiCad's DRC reports 0 unconnected pads and 0 clearance, hole or edge errors, and the PCB, schematic and design.py netlist agree on all 609 pads. Some routes are longer than a hand layout would be, so it is worth a look, especially the 3.3 V buck-boost loop (U4, L1, C8-C10) and the USB D+/D- pair.
  • Remaining DRC warnings are cosmetic: silkscreen touching silkscreen or pads (pads are cleared automatically in the Gerbers), edge-connector outlines crossing the board edge, and courtyard overlaps between the interlocking screw terminals.
  • Input current limit is about 1 A. From a laptop USB-A port (500 mA) with WiFi busy and a battery charging, the port may current-limit. Use a USB-C charger, or cut JP1 to halve the charge current.
  • The 5V header pin is USB VBUS. Don't power the board through it; use VIN (4.5-10 V) instead.
  • Confirm which slide-switch position is ON with the green PWR LED; the silkscreen only says POWER.

Software

Arduino IDE with the Espressif ESP32 core (board: "ESP32S3 Dev Module", USB CDC On Boot enabled, PSRAM "OPI PSRAM", flash 16 MB). Libraries that work with this pin map:

  • Touch: Bare Conductive MPR121 library or Adafruit_MPR121 (address 0x5C, IRQ on IO10).
  • Audio: Adafruit_VS1053 with Adafruit_VS1053_FilePlayer player(46, 15, 16, 17, 14); (reset, CS, DCS, DREQ, card CS). Call SPI.begin(12, 13, 11) first so the ESP32 uses this board's SPI pins.
  • Fuel gauge: SparkFun MAX1704x or Adafruit_MAX1704X.
  • RGB LED: Adafruit_NeoPixel or FastLED on IO48.
  • MIDI out: Arduino MIDI library on Serial1 with TX mapped to IO47 (31250 baud).
  • USB MIDI: the ESP32-S3 USB stack (TinyUSB) can present the board as a class-compliant USB MIDI device.

Touch Board sketches port mostly by changing pin numbers: the MPR121 address and electrode numbering are unchanged.

Regenerating the design

hardware/gen/design.py is the single source of truth (every part, value, LCSC number and pin-to-net mapping). make_sch.py writes the schematic, make_pcb.py places the board, pipeline.sh runs autorouting and repairs, export_fab.py writes the JLCPCB files. The scripts need KiCad 7's Python module, Java and Freerouting 1.9, and use absolute paths from the machine they were written on, so adjust the paths at the top of each script first.

Licence

CC BY-SA 3.0, the same licence as the original Touch Board design. See LICENSE.md and NOTICE.md.

Parts

185
QtyValueFootprintReferences
19100nFC_0603_1608MetricC3, C11, C12, C14, C16, C17, C22, C23, C24, C25, C26, C29, C30, C32, C41, C42 +3
18100kR_0603_1608MetricR13, R22, R23, R24, R25, R26, R27, R28, R29, R31, R32, R33, R34, R41, R42, R48 +2
1110kR_0603_1608MetricR7, R9, R10, R11, R15, R16, R19, R30, R39, R40, R49
710uFC_0805_2012MetricC6, C8, C9, C10, C27, C28, C40
71uFC_0603_1608MetricC15, C20, C21, C31, C38, C39, C44
6ESD9B5.0ST5GD_SOD-923D6, D7, D8, D9, D10, D11
3100R_0603_1608MetricR12, R43, R44
310nFC_0603_1608MetricC35, C36, C37
31kR_0603_1608MetricR8, R14, R17
320R_0603_1608MetricR36, R37, R38
347kR_0603_1608MetricR45, R46, R47
3FiducialFiducial_1mm_Mask2mmFID1, FID2, FID3
3KF350-3.5-3PTerminalBlock_Phoenix_PT-1,5-3-3.5-H_1x03_P3.50mm_HorizontalJ4, J5, J6
3M3MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3
3SRV05-4SOT-23-6U7, U8, U9
2100uFC_1206_3216MetricC33, C34
210pFC_0603_1608MetricC18, C19
21MR_0603_1608MetricR3, R35
222uFC_0805_2012MetricC4, C13
23.6kR_0603_1608MetricR5, R6
233R_0603_1608MetricR51, R54
24.7kR_0603_1608MetricR20, R21
25.1kR_0603_1608MetricR1, R2
2AO3401ASOT-23Q1, Q2
2GNDElectrodePad_Edge_5.6x7mm_D3.2mmE13, E14
2KF350-3.5-2PTerminalBlock_Phoenix_PT-1,5-2-3.5-H_1x02_P3.50mm_HorizontalJ7, J8
2SN74LV1T125DBVRSOT-23-5U12, U13
2SS54D_SMAD1, D2
1+1V8TestPoint_Pad_D1.5mmTP7
1+3V3TestPoint_Pad_D1.5mmTP2
11.1AFuse_1206_3216MetricF1
11.5kR_0603_1608MetricR4
11.5uHL_Changjiang_FNR4020SL1
110R_0603_1608MetricR50
112.288MHzCrystal_SMD_3225-4Pin_3.2x2.5mmY1
12N7002SOT-23Q3
14.7nFC_0603_1608MetricC1
14.7uFC_0805_2012MetricC2
1600R@100MHzL_0805_2012MetricFB1
175kR_0603_1608MetricR18
1ANALOGPinSocket_1x06_P2.54mm_VerticalJ14
1BOOTSW_Push_1P1T_XKB_TS-1187ASW3
1BQ24074RGTRVQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mmU2
1CHG 500mASolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP1
1D0-D7PinSocket_1x08_P2.54mm_VerticalJ15
1D8-D13PinSocket_1x10_P2.54mm_VerticalJ16
1E0ElectrodePad_Edge_5.6x7mm_D3.2mmE1
1E1ElectrodePad_Edge_5.6x7mm_D3.2mmE2
1E10ElectrodePad_Edge_5.6x7mm_D3.2mmE11
1E11ElectrodePad_Edge_5.6x7mm_D3.2mmE12
1E2ElectrodePad_Edge_5.6x7mm_D3.2mmE3
1E3ElectrodePad_Edge_5.6x7mm_D3.2mmE4
1E4ElectrodePad_Edge_5.6x7mm_D3.2mmE5
1E5ElectrodePad_Edge_5.6x7mm_D3.2mmE6
1E6ElectrodePad_Edge_5.6x7mm_D3.2mmE7
1E7ElectrodePad_Edge_5.6x7mm_D3.2mmE8
1E8ElectrodePad_Edge_5.6x7mm_D3.2mmE9
1E9ElectrodePad_Edge_5.6x7mm_D3.2mmE10
1ESP32-S3-WROOM-1-N16R8ESP32-S3-WROOM-1U5
1FG_ALRTTestPoint_Pad_D1.5mmTP6
1GNDTestPoint_Pad_D1.5mmTP4
1GREENLED_0603_1608MetricD4
1HEADPHONEJack_3.5mm_CUI_SJ-3523-SMT_HorizontalJ10
1LED DOUTTestPoint_Pad_D1.5mmTP8
1LED VDDTestPoint_Pad_D1.5mmTP9
1LINE INJack_3.5mm_CUI_SJ-3523-SMT_HorizontalJ11
1LiPo JST-PHJST_PH_S2B-PH-SM4-TB_1x02-1MP_P2.00mm_HorizontalJ3
1MAX17048G+T10TDFN-8-1EP_2x2mm_P0.5mm_EP0.8x1.2mmU3
1MIDI OUTJack_3.5mm_CUI_SJ-3523-SMT_HorizontalJ18
1MIDI>VSSolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP5
1MPR121QR2UQFN-20_3x3mm_P0.4mmU6
1NO NTCSolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP2
1NTC 10kPinHeader_1x02_P2.54mm_VerticalJ2
1POWERPinSocket_1x08_P2.54mm_VerticalJ13
1POWERSW_SPDT_PCM12SW1
1PS/PWMSolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mm_NumberLabelsJP3
1QwiicJST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_HorizontalJ17
1REDLED_0603_1608MetricD5
1RESETSW_Push_1P1T_XKB_TS-1187ASW2
1RT-MIDISolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP4

The 173 most common of 185 parts.

Similar boards

  • 4 layers99 × 70 mmRowOne, the printed circuit board in 3D

    RowOne

    Zoomwag/Vantis-X

    A UAB

    71 parts
  • 2 layers42 × 54 mmClick counter Q5, the printed circuit board in 3D

    Click counter Q5

    dudgeon/count-fidget

    A lightweight, rechargeable two-key fidget that counts clicks, resets with a second key, and remembers its count while asleep or unpowered. Designed for a home-printed enclosure and professionally assembled electronics.

    96 parts
  • 4 layers65 × 56 mmSensor HAT, the printed circuit board in 3D

    Sensor HAT

    Eniemooo/Sensor-HAT

    Open-hardware indoor air sensor (CO2, VOC/NOx, T/RH, light, sound): HAT for Raspberry Pi or standalone with Seeed XIAO + ESPHome. KiCad 10.

    112 parts
  • 4 layers44 × 48.1 mmDimmer esp v1 main, the printed circuit board in 3D

    Dimmer esp v1 main

    dagroe/zigbee-rotary-dimmer-switch

    a rotary dimmer switch

    59 parts24MIT
  • 4 layers100 × 80 mmR2022-12, the printed circuit board in 3D

    R2022-12

    karlp/hubbish

    Cascading, per port power switching usb2.0-HS 7 port hub

    138 parts3
  • 4 layers94 × 52 mmR2024-02-single, the printed circuit board in 3D

    R2024-02-single

    karlp/das-kb4-bara2

    das keyboard 4 replacement controller

    60 parts
  • 4 layers31.4 × 31 mmEsp32c6 ble sensor, the printed circuit board in 3D

    Esp32c6 ble sensor

    xmyoot/esp32c6-ble-sensor-coin-cell

    Ultra-compact 4-layer circular BLE sensor pod with ESP32-C6, CR2032 coin-cell power and environmental sensors

    71 parts
  • 2 layers100 × 100 mmHour meter board microfit can handroute, the printed circuit board in 3D

    Hour meter board microfit can handroute

    ilomon10/embedded-totalizer-hour-meter

    ESP32 engine hour meter & totalizer: firmware, SensorFrame protocol, Node host tools, KiCad PCB and a Deno device simulator

    152 parts

Questions

How big is the Opentouch s3 PCB?

It measures 100 × 90 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Opentouch s3 use?

185 parts, built around the SN74LV1T125DBVR-TP, ESP32-S3-WROOM-1-N16R8, MPR121QR2 and SRV05-4-P-T7. 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 Opentouch s3 KiCad files?

From the JoeMighty/opentouch-s3 repository on GitHub, at the commit this page was made from: the board is hardware/kicad/OpenTouch_S3.kicad_pcb and its schematic hardware/kicad/OpenTouch_S3.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Opentouch s3 design in my own project?

Its repository states no licence, so its author keeps all rights: ask JoeMighty before reusing the design.