

Bench
Wi-Fi upload dock for Arduino
- Size
- 85 × 45 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 58
- Nets
- 63
- Pads
- 206
- Tracks, vias
- 316, 115
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 22 Jul 2026
- Updated
- 21 Aug 2026
Overview
Bench is an open-source printed circuit board by Amir-Vered, from the Amir-Vered/Bench repository on GitHub, published under the CERN-OHL-P-2.0 licence. It is a 2-layer board of 85 × 45 mm with 58 parts on 63 nets, routed with 316 tracks and 115 vias.
It is built around the ESP32-S3-WROOM-1-N8R8, TLV62569DBVR-TP and TPS2553DBV, with the USBLC6-2SC6 among its other parts. Its parts include 17 resistors, 9 capacitors, 4 ICs, 3 connectors and 1 diode. It belongs with the ESP32 boards of this library.
Main components
4ESP32-S3-WROOM-1-N8R8
SMD,25.5x18mm-104.5dBm -40℃~+65℃ 2.4GHz 20.5dBm 330mA 3V~3.6V 97mA Bluetooth5.0 ESP32-S3R8 On-board PCB Antenna UART、SPI、I2C、GPIO、I2S、USB SMD,25.5x18mm WiFi Modules ROHSEspressif SystemsWiFi ModulesTLV62569DBVR-TP
SOT-23-51 1.5MHz 2.7V~5.5V 2A 40uA Adjustable Buck Built-in No SOT-23-5 DC-DC Converters ROHSTECH PUBLICDC-DC ConvertersTPS2553DBV
SOT-23-6-40℃~+150℃ 1 1.5A 2.5V~6.5V 85mΩ Active High High Side Switch 过压保护、软启动、欠压锁定、反向电压保护、集成电荷泵、Overcurrent Protection、Over temperature protection、锁存保护、Short-Circuit Protection SOT-23-6 Power Distribution Switches ROHSTexas InstrumentsPower Distribution SwitchesUSBLC6-2SC6
SOT-23-60.35pF、0.8pF 100nA 150W@8/20us 15V 2 5V 6A@8/20us 6V ESD SOT-23-6 ESD and Surge Protection (TVS/ESD) ROHSUMWESD And Surge Protection (TVS/ESD)
README
README.mdBench
Project Goals • System Overview • Diagrams • Hardware • Software • License
Bench... and it's not made out of wood?
Here's the pitch:
TL;DR wires are annoying, let's put Bench in the middle of the Arduino workflow.
I love Arduino, it's perfect for prototyping your projects before making your PCBs. But, idk about you, the most annoying thing to me is the fact that the board is tied to my laptop. And it's not a graceful connection, no, these wires are some of the most stale twisted things you've ever used, especially the uni lab ones. This gets even worse when you're using a desktop computer. But what if we put a device in the middle?
Enter: Bench.
Bench is a wifi upload dock for Arduino (built primarily for the Uno R3 because it's the one I use most). Compile your sketch, run a command, and boom, it uploads to your device somewhere else. No more wire, Arduino dev becomes a little less life-draining.
This is a simple little project, but it's open source, and I hope you find some use out of it. Feel free to leave issues, fork, or really do whatever you want with it.
Project Goals
My goals for this project were to:
- Improve the Arduino dev experience
- Develop my hardware, firmware, and software design skills
- Document a project from beginning to end
System Overview
Let's get into the details.
At a high level:
- The laptop compiles an Arduino sketch into a
.hexfile. - The CLI sends the
.hexfile to Bench over Wi-Fi. - The ESP32-S3 on Bench receives the upload request.
- Bench opens a USB host serial connection to the Arduino Uno R3.
- Bench triggers the Uno bootloader window.
- Bench uploads the program to the ATmega328P flash memory.
Bench does not compile Arduino code on-board; compilation happens on the laptop.
Diagrams
Labeled Board
System Block Diagram
Power Path
Upload/Data Flow
Repository Structure
bench/
├── hardware/
│ ├── kicad/
│ └── exports/
├── software/
│ ├── mock/
│ │ └── bench-mock-server/
│ ├── cli/
│ │ └── bench-upload/
│ └── firmware/
│ └── bench-fw/
├── media/
│ ├── diagrams/
│ ├── renders/
│ └── screenshots/
├── LICENSE-SOFTWARE
├── LICENSE-HARDWARE
└── README.mdHardware
Bench is built around the ESP32-S3-WROOM-1.
Major hardware blocks include:
- USB-C 5V input
- Input protection using a PTC fuse and TVS diode
- 3.3V buck regulator for the ESP32-S3
- ESP32-S3-WROOM-1 Wi-Fi microcontroller
- USB-A host output for the Arduino Uno R3
- TPS2553 current-limited USB power switch
- USB data ESD protection
- Status LEDs for power, Wi-Fi, target, upload, and fault states
- Reset and boot/config buttons
Software
Bench includes three software components:
software/
├── mock/
│ └── bench-mock-server/
├── cli/
│ └── bench-upload/
└── firmware/
└── bench-fw/Mock Server
The mock server simulates a Bench device on a local computer. It is used to test the CLI without Bench hardware.
cd software\mock\bench-mock-server
python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e .
bench-mock --port 8080Test the mock server:
http://127.0.0.1:8080/api/v1/statusCLI
The Bench Upload CLI runs on the laptop, and can communicate with the firmware or mock server.
cd software\cli\bench-upload
python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e .Here's how to use the commands, demoed on the mock server...
Check Bench status:
bench status --device http://localhost:8080Upload a precompiled Intel HEX file:
bench upload --hex path\to\sketch.ino.hex --device http://localhost:8080Upload without target reset:
bench upload --hex path\to\sketch.ino.hex --no-reset --device http://localhost:8080Upload without verify:
bench upload --hex path\to\sketch.ino.hex --no-verify --device http://localhost:8080Compile an Arduino sketch with Arduino CLI, then upload:
bench upload path\to\Blink --fqbn arduino:avr:uno --device http://localhost:8080Firmware
The firmware is an ESP-IDF project for the ESP32-S3.
cd software\firmware\bench-fw
idf.py set-target esp32s3
idf.py buildWi-Fi settings are configured locally with:
idf.py menuconfigThen open:
Bench Configurationand set:
Wi-Fi SSID
Wi-Fi passwordFirmware Features
Current firmware includes:
- Wi-Fi station startup
- HTTP API server
GET /api/v1/statusPOST /api/v1/target/powerPOST /api/v1/target/resetGET /api/v1/logsPOST /api/v1/uploadGET /api/v1/upload/{job_id}
- ESP32-S3 USB host CDC
- Arduino Uno R3 Optiboot/STK500 upload path (🤞😩)
- GPIO control for TPS2553 target power
- GPIO control for status LEDs
The firmware builds successfully for ESP32-S3, but I haven't had the chance to test it on hardware, so be careful.
API Overview
Bench firmware and the mock server expose the same main HTTP API shape.
GET /api/v1/status
POST /api/v1/upload
GET /api/v1/upload/{job_id}
POST /api/v1/target/power
POST /api/v1/target/reset
GET /api/v1/logsPrimary upload states:
idle
receiving
opening_target
bootloader_sync
uploading
verifying
success
failed
faultPrimary error codes:
INVALID_HEX
NO_TARGET
POWER_FAULT
USB_OPEN_FAILED
BOOTLOADER_TIMEOUT
UPLOAD_FAILED
VERIFY_FAILED
POWER_DISABLEDCurrent Status
Bench Rev A is a complete prototype, but I haven't had the chance to fabricate it yet.
I'm confident in my hardware and software design, but the firmware, well, let's just say it was my first time programming an ESP32-S3... 😅
Something else pretty cool about this project is the documentation. I've created a video, a post on my website, this repo, and so much more, with full diagrams and explanations. It's been part of my goal to build more in public, and this is one of the projects I'm most proud of so far. My chess board (ICB, 1/26-6/26) was awesome, but its docs were scattered. Bench is hopefully the start of a more cohesive online doc cycle, stay tuned for more.
In terms of future Bench additions, if there is a Rev B, expect:
- more in-depth CLI
- hardware redesign, maybe
- 3D printable exterior / mounts
- and more
License
- Software: Licensed under the MIT License.
- Hardware: Schematics and PCB layouts are licensed under the CERN-OHL-P-2.0 (CERN Open Hardware Licence Version 2 - Permissive).
- Media & Documentation: Renders, diagrams, and written assets are © 2026 Amir Vered unless otherwise stated. All rights reserved.
Parts
58| Qty | Value | Footprint | References |
|---|---|---|---|
| 5 | 1k | Resistor_SMD:R_0603_1608Metric | R11, R12, R13, R14, R15 |
| 4 | 0.1uF | Capacitor_SMD:C_0603_1608Metric | C2, C5, C7, C9 |
| 4 | 10uF | Capacitor_SMD:C_0805_2012Metric | C1, C3, C4, C6 |
| 3 | 100k | Resistor_SMD:R_0603_1608Metric | R4, R5, R9 |
| 3 | 10k | Resistor_SMD:R_0603_1608Metric | R6, R7, R10 |
| 2 | 22R | Resistor_SMD:R_0603_1608Metric | R16, R17 |
| 2 | 5.1k | Resistor_SMD:R_0603_1608Metric | R1, R2 |
| 1 | 120uF | Capacitor_SMD:CP_Elec_6.3x5.8 | C8 |
| 1 | 1A hold | Fuse:Fuse_1812_4532Metric | F1 |
| 1 | 2.2uH | Inductor_SMD:L_Bourns-SRN4018 | L1 |
| 1 | 453k | Resistor_SMD:R_0603_1608Metric | R3 |
| 1 | 59k | Resistor_SMD:R_0603_1608Metric | R8 |
| 1 | Boot | Button_Switch_SMD:SW_SPST_TL3342 | Boot |
| 1 | ESP32-S3-WROOM-1-N8R8 | RF_Module:ESP32-S3-WROOM-1 | U2 |
| 1 | J_ESP_PROG | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | J2 |
| 1 | LED_FAULT | LED_SMD:LED_0603_1608Metric | FLT |
| 1 | LED_PWR | LED_SMD:LED_0603_1608Metric | PWR |
| 1 | LED_TARGET | LED_SMD:LED_0603_1608Metric | TRG |
| 1 | LED_UPLOAD | LED_SMD:LED_0603_1608Metric | UPL |
| 1 | LED_WIFI | LED_SMD:LED_0603_1608Metric | WIFI |
| 1 | Reset | Button_Switch_SMD:SW_SPST_TL3342 | Reset |
| 1 | TLV62569DBVR | Package_TO_SOT_SMD:SOT-23-5 | U1 |
| 1 | TPS2553DBV | Package_TO_SOT_SMD:SOT-23-6 | U4 |
| 1 | TP_3V3 | TestPoint:TestPoint_Pad_D1.0mm | TP2 |
| 1 | TP_5V_PROTECTED | TestPoint:TestPoint_Pad_D1.0mm | TP1 |
| 1 | TP_ESP_BOOT | TestPoint:TestPoint_Pad_D1.0mm | TP10 |
| 1 | TP_ESP_EN | TestPoint:TestPoint_Pad_D1.0mm | TP11 |
| 1 | TP_GND | TestPoint:TestPoint_Pad_D1.0mm | TP5 |
| 1 | TP_TPS_EN | TestPoint:TestPoint_Pad_D1.0mm | TP9 |
| 1 | TP_TPS_FAULT | TestPoint:TestPoint_Pad_D1.0mm | TP8 |
| 1 | TP_USB_A_VBUS | TestPoint:TestPoint_Pad_D1.0mm | TP4 |
| 1 | TP_USB_D+ | TestPoint:TestPoint_Pad_D1.0mm | TP7 |
| 1 | TP_USB_D- | TestPoint:TestPoint_Pad_D1.0mm | TP6 |
| 1 | TP_VBUS_IN | TestPoint:TestPoint_Pad_D1.0mm | TP3 |
| 1 | TSD05 | Diode_SMD:D_SOD-323 | D1 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U3 |
| 1 | USB_A | Connector_USB:USB_A_Wuerth_614004134726_Horizontal | J3 |
| 1 | USB_C | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J1 |
The 54 most common of 58 parts.
Questions
How big is the Bench PCB?
It measures 85 × 45 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Bench use?
58 parts, built around the ESP32-S3-WROOM-1-N8R8, TLV62569DBVR-TP, TPS2553DBV and USBLC6-2SC6. 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 Bench KiCad files?
From the Amir-Vered/Bench repository on GitHub, at the commit this page was made from: the board is hardware/kicad/Bench.kicad_pcb and its schematic hardware/kicad/Bench.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Bench design in my own project?
Its repository publishes it under the CERN-OHL-P-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
- 4 layers66 × 90 mm

- 6 layers140 × 100 mm

Sbc baseboard
calicopizzadelivery/sbc-development-baseboard
Baseboard for remote management of an attached SBC: K64 MCU as USB HID to the target and Ethernet to the workstation, six switched USB-A ports, isolated SPDT relays, level-shifted console, switched target power
271 partsApache-2.0 - 2 layers75 × 60 mm

Circuit design
heresiarch/esp32-wifi-eth-gateway
This is proof of concept of a Wifi to Ethernet Gateway with ESP32
10 parts1Apache-2.0 - 4 layers100 × 60 mm

- 2 layers90 × 60 mm

FanCtrl3-Pro
mikagosz/FanCtrl3
USB-powered controller for three 4-pin PWM fans, driven by the CPU temperature of a Proxmox VE host - KiCad, MicroPython, OpenSCAD
39 partsMIT - 4 layers106 × 110 mm

RearCircuitBoard 10
ssbingo/samba-solar-track
Samba Solar Track – Solarnachführung mit Sturmschutz: Handbuch, Platine und Gehäuse für den Nachbau (10,1-Zoll-Version)
329 parts - 4 layers42 × 100 mm

Psu
xdylanm/modular-system-psu
A PSU for a modular Eurorack system, featuring +/-12V and 5V rails, USB-C input, and a regulated USB-A output.
68 partsMIT - 6 layers100 × 120 mm

Astra piNas
jlcjak/astra_piNas
Six-layer CM5 Lite dual-NVMe carrier with PCIe switch, Ethernet, microSD, USB-C PD and PoE. Review design; fabrication hold documented.
176 parts30