Skip to the content
PCBKitNew board
4 layers125 × 100 mmRC controller, the printed circuit board in 3D

RC controller

tyke01/bonk

An open source RC controller.

Size
125 × 100 mm
Copper layers
4
Thickness
1.6 mm
Parts
72
Nets
99
Pads
338
Tracks, vias
0, 0
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
7 Oct 2026
Updated
7 Oct 2026

Overview

RC controller is an open-source printed circuit board by tyke01, from the tyke01/bonk repository on GitHub. It is a 4-layer board of 125 × 100 mm with 72 parts on 99 nets.

It is built around the ESP32-SL, COM-09032 and AP2112K-3.3, with the DW01A, TP4056-42-ESOP8 and USBLC6-2SC6 among its other parts. Its parts include 26 resistors, 17 capacitors, 10 ICs, 5 diodes and 5 switches. It belongs with the ESP32 boards of this library.

Main components

12

README

README.md

BONK

An open-source handheld RC transmitter built around the ESP32. Designed by Spectral Systems.

BONK PCB render

Status: Rev 1 (first PCB revision). The schematic passes ERC with 0 errors and the PCB passes DRC. Boards have been ordered but not yet assembled or tested, so expect errata. See Known issues before building one.


Contents


Features

  • MCU: ESP32 module (Ai-Thinker ESP32-SL) with on-board PCB antenna
  • Inputs: 2 analog joysticks, 2 potentiometers, 2 toggle switches, a rotary encoder with push switch, and BOOT/EN buttons
  • Display: 2.8" ILI9341 320x240 SPI TFT module (its SD card slot is not used)
  • Radio: nRF24L01 breakout on the shared SPI bus. ESP-NOW/WiFi/BLE are also available from the ESP32 itself
  • USB-C: programming and charging through a CP2102N USB-UART bridge with automatic reset into the bootloader
  • Battery: 2x 18650 cells in parallel (1S), with a TP4056 charger, DW01A + FS8205A protection, and USB/battery load sharing
  • Battery monitoring: INA226 voltage and current monitor on I2C, which measures both charge and discharge current
  • PCB: 4 layers, 125 x 100 mm, 1.6 mm thick

Repository layout

text
RC controller.kicad_pro     KiCad project
RC controller.kicad_sch     Schematic (single sheet, with design notes)
RC controller.kicad_pcb     PCB layout
RC controller.png           3D render
bom/
  ibom.html                 Interactive BOM (open in a browser for assembly)
  RC controller.csv         Raw BOM export
production/
  RC_controller.zip         Gerbers + drill files, ready to upload to JLCPCB
  bom.csv                   BOM for JLCPCB assembly
  positions.csv             Pick-and-place (CPL) file
  designators.csv
  netlist.ipc               IPC netlist (lets the fab run electrical tests)
placement/
  RC controller-all.pos     KiCad component placement file

Designed in KiCad 10.0.6. Open RC controller.kicad_pro to view everything.


Hardware overview

BlockMain partsNotes
MCUL1 ESP32-SLAntenna overhangs the bottom board edge
USB-UARTU8 CP2102N (QFN-24), Q1/Q2 BC817DTR/RTS drive EN and IO0 for automatic bootloader entry
USB-CX1 GCT USB4085-GF-A, U7 USBLC6-2SC65.1k pull-downs on CC1/CC2 (sink, default 5 V). USBLC6 provides ESD protection on D+/D-
ChargerU6 TP4056 (ESOP-8)About 1.1 A charge current, set by R24
ProtectionU9 DW01A, Q4 FS8205ADisconnects the cells on overcharge, overdischarge, or overcurrent
Load sharingQ3 AO3401A, D3 SS34Runs the system from USB when plugged in, otherwise from the battery
RegulatorU2 AP2112K-3.3600 mA LDO, single 3.3 V rail for everything
Battery monitorU3 INA226, R11 20 mΩI2C address 0x40
DisplayU1 ILI9341 2.8" SPI modulePowered from 3.3 V
RadioU10 nRF24L01 breakoutShares the SPI bus with the display
SticksU4/U5 SparkFun COM-09032Powered from 3.3 V
PotsRV1/RV2Powered from 3.3 V
EncoderS1 Bourns PEC12R-4217F-S002410k pull-ups plus 10k/10 nF RC hardware debounce
TogglesS2/S3 Würth 472123010111Switch to GND
ButtonsSW3 (EN/reset), SW4 (BOOT)R18/C13 delay the release of EN at power-up
Battery holderBT1 Keystone 10482x 18650, mounted on the bottom side

Power architecture

Net names

NetWhat it is
+5VUSB VBUS
+VBAT_INCell positive terminal
BAT_PBattery positive after the shunt. Charger output and Q3 drain connect here
+VBAT_OUTSystem rail (VSYS). Feeds the 3.3 V regulator
+3V3Regulated 3.3 V for all logic
BAT-Raw cell negative
GNDSystem ground (the switched negative, P-). Connected to BAT- through Q4

Charging path

TP4056 BAT → BAT_P → R11 shunt → +VBAT_IN → cells → BAT- → Q4 (FS8205A) → GND → back to the TP4056

The return path goes through the protection MOSFETs. That's what allows the DW01A to stop charging if a cell reaches its overcharge limit.

Load sharing

  • USB connected: 5 V feeds +VBAT_OUT through D3 (about 4.5 V). Q3's gate sits at 5 V, so Q3 is off, and its body diode is reverse biased. The battery is isolated from the load and only the charger talks to it. Charge termination is therefore not confused by system current.
  • USB disconnected: R27 pulls Q3's gate to GND, Q3 turns on, and the battery powers +VBAT_OUT through Q3's low channel resistance. D3 blocks the battery from back-feeding the USB side.
  • During the handover, Q3's body diode keeps the rail up so the ESP32 doesn't brown out.

Protection

The DW01A watches the cell voltage and the voltage drop across the FS8205A. If it detects overcharge, overdischarge, or overcurrent, it turns off one of the two MOSFETs and disconnects BAT- from GND. R26 only feeds the DW01A's CS sense pin and carries no load current.

Battery monitoring

R11 (20 mΩ) is in series with the battery, so the INA226 sees both directions of current:

  • Positive current = discharging
  • Negative current = charging

The full-scale range is about ±4 A (81.92 mV / 20 mΩ). The INA226's Vin+/Vin- traces are Kelvin-connected directly at R11's pads.


ESP32 pin map

GPIOModule pinNetFunction
36 (SENSOR_VP)4JL_LRLeft stick X
39 (SENSOR_VN)5JL_UDLeft stick Y (throttle)
346JR_LRRight stick X
357JR_UDRight stick Y
328POT_LLeft potentiometer
339POT_RRight potentiometer
2510SW_LLeft toggle switch (to GND)
2611SW_RRight toggle switch (to GND)
2712CLKEncoder channel A
1413DTEncoder channel B
1627SWEncoder push switch (to GND)
1316LEDTFT backlight
1523CSTFT chip select
224DCTFT data/command
529CSNnRF24 chip select
426CEnRF24 chip enable
1830SCKSPI clock (through R7, 50 Ω)
1931MISOSPI MISO (through R6, 50 Ω)
2337MOSISPI MOSI
2133SDAI2C data
2236SCLI2C clock
1 (TXD0)35To CP2102N RXD
3 (RXD0)34From CP2102N TXD
025BOOTBOOT button and auto-reset
EN3RSTReset button, auto-reset, and TFT reset

Unused: IO12 and IO17. The SD0 to SD3, CMD and CLK pins are reserved for the module's flash and must stay unconnected.

Why these pins:

  • All analog inputs (sticks and pots) are on ADC1 pins, because ADC2 can't be used while WiFi (including ESP-NOW) is active.
  • GPIO34 to 39 are input-only with no internal pull-ups, which makes them a good fit for the analog sticks.
  • IO0, IO2, IO5, IO12 and IO15 are strapping pins. Nothing on the board forces them to a level that would break booting. IO12 is deliberately left unconnected.

Buses and addresses

SPI (shared)

DeviceChip selectOther pins
ILI9341 TFTIO15 (CS)DC = IO2, reset = EN, backlight = IO13
nRF24L01IO5 (CSN)CE = IO4, IRQ not connected

SCK = IO18, MOSI = IO23, MISO = IO19. Only one device is selected at a time.

I2C

DeviceAddressPull-ups
INA2260x40 (A0 = A1 = GND)R9/R10, 4.7k to 3.3 V

Firmware notes

Firmware is developed separately with PlatformIO (Arduino framework). The following points are for anyone writing firmware for this board:

  • Toggle switches and the encoder push switch (IO25, IO26, IO16) have no external pull-ups. Use INPUT_PULLUP. A closed switch reads LOW.
  • Encoder A/B (IO27, IO14) already have 10k external pull-ups and RC debounce.
  • TFT_eSPI configuration: MISO 19, MOSI 23, SCLK 18, CS 15, DC 2, RST -1 (tied to EN), backlight 13. The breadboard prototype used setRotation(3); check that this still fits the PCB orientation.
  • INA226: address 0x40, shunt 0.020 Ω. Discharge reads positive, charging reads negative.
  • Low-battery cutoff: the AP2112K is an LDO. Once the battery falls below roughly 3.5 V, the 3.3 V rail starts following it down. Use the INA226 bus voltage to warn the user, and shut down before the DW01A's overdischarge protection trips.
  • Uploading: the CP2102N's DTR/RTS lines drive EN and IO0 through Q1/Q2, so uploads should start automatically. If they don't, hold BOOT, tap EN, then release BOOT.

Bill of materials

LCSC numbers are the parts matched for the Rev 1 JLCPCB order. Stock and part numbers change, so verify each one before ordering. Full BOM files are in bom/ and production/.

DesignatorValuePackageLCSCAssembled by
C1, C210 nF 50 V X7R0603C57112JLC
C3, C5, C7, C9, C10, C14, C17100 nF 50 V X7R0603C14663JLC
C114.7 µF 16 V X5R0603C19666JLC
C12, C131 µF 50 V X5R0603C15849JLC
C4, C6, C8, C15, C1610 µF 10 V X5R0603C19702JLC
D1, D2, D4, D5LED, green0603C2289 (verify colour and Vf)JLC
D3SS34 SchottkySMAC8678JLC
Q1, Q2BC817 NPNSOT-23C22400355JLC
Q3AO3401A P-FETSOT-23C15127JLC
Q4FS8205A dual N-FETTSSOP-8Choose a TSSOP-8 variant (see Known issues)JLC
R2-R5, R18-R2110k 1%0603C25804JLC
R6, R750 Ω0603C849792JLC
R8, R12470 Ω 1%0603C23179JLC
R9, R104.7k 1%0603C23162JLC
R1120 mΩ 1% 1 W current sense1206C7420010JLC
R13, R22, R23, R261k 1%0603C21190JLC
R1447.5k 1%0603C137715JLC
R1522.1k 1%0603C2960862JLC
R16, R175.1k 1%0603C23186JLC
R241.1k 1%0603C54531154JLC
R25100 Ω 1%0603C22775JLC
R27100k 1%0603C25803JLC
U2AP2112K-3.3SOT-23-5C23380830JLC
U3INA226VSSOP-10C49851JLC
U6TP4056ESOP-8C16581JLC
U7USBLC6-2SC6SOT-23-6C2827654JLC
U8CP2102N-A02-GQFN24QFN-24 4x4C969151JLC
U9DW01ASOT-23-6C351410JLC
L1ESP32-SL moduleSMD moduleC2764058Hand (was out of stock)
X1USB4085-GF-A USB-CThrough-holeC7095263Hand
S1PEC12R-4217F-S0024 encoderThrough-holeC49671241Hand
S2, S3472123010111 toggleThrough-holeC20040218Hand
U4, U5SparkFun COM-09032 joystickThrough-holeC3283715Hand
RV1, RV2PotentiometerVishay T93YA footprintHand
SW3, SW4Tactile switch 6 mmThrough-holeHand
U12.8" ILI9341 SPI TFT moduleHeaderHand
U10nRF24L01 breakout2x4 headerHand
BT1Keystone 1048 2x 18650 holderSMD, bottom sideHand

Manufacturing

Fabricated at JLCPCB. Upload production/RC_controller.zip.

SettingValue
Layers4
Size125 x 100 mm
Thickness1.6 mm
Outer copper1 oz
Surface finishHASL works for hand soldering. ENIG is better for the 0.5 mm pitch parts (U3, U8)

Stackup:

LayerUse
F.CuSignals and components, with GND pour
In1.CuSolid GND plane
In2.CuGND plane
B.CuSignals, plus the battery holder

Design rules used: 0.2 mm default tracks and clearance, 0.5 mm power tracks, 1.0 mm battery tracks, 0.6/0.3 mm vias. USB D+/D- are routed as a differential pair over the In1 GND plane. There is a copper keepout under the ESP32 antenna on all layers.

Notes:

  • The USB-C connector (X1) has very fine pin spacing, so the board allows bridged solder-mask openings between its pads. Take care not to bridge pins when soldering it.
  • U6 (TP4056) uses a modified footprint with 0.3 mm thermal vias, and pad B12 on X1 has a solid zone connection. Both changes are stored on the board, so don't run "Update Footprints from Library" on U6 or X1 without reapplying them.

Assembly

The Rev 1 order uses JLCPCB partial assembly: JLC places the SMT parts on the top side, and the rest is hand-soldered.

Before ordering assembly:

  1. Q4 must be a TSSOP-8 part. JLC's automatic match picked a SOT-23-6 FS8205A, which will not fit the footprint. Open the part details and confirm the package.
  2. Check every rotation in the placement preview: U8, U3, U6, U9, U2, U7, Q1 to Q4, D3 (cathode band) and the LEDs. Compare each part's pin 1 with the pin-1 mark on the silkscreen.
  3. Mounting holes H1 to H4 appear in the CPL but not in the BOM. JLC warns about this; it's safe to continue.

Hand-soldering order (suggested):

  1. ESP32-SL module (L1)
  2. USB-C connector (X1)
  3. Battery holder (BT1, bottom side)
  4. Buttons, toggles, encoder, pots
  5. Joysticks
  6. Display and nRF24 headers last, since they cover other parts

The interactive BOM (bom/ibom.html) highlights where each part goes.


Bring-up checklist

Work through this in order, and don't insert the cells until step 4.

  1. Visual inspection. Look for solder bridges, especially on U8, U3 and X1.
  2. Short-circuit check (power off). Measure resistance from GND to +5V, +VBAT_OUT, +3V3 and BAT_P. None of them should read close to 0 Ω.
  3. USB power, no cells, ideally before soldering the ESP32. Use a current-limited supply or a USB power meter if you have one. Expect:
    • +5V ≈ 5 V
    • +VBAT_OUT ≈ 4.5 V (5 V minus the SS34 drop)
    • +3V3 ≈ 3.3 V
  4. Insert the cells. Check polarity. Both cells must be at about the same voltage before you insert them, because cells in parallel at different voltages push a large current into each other. If the board doesn't run from the battery after you insert the cells, plug in USB once: some DW01-based circuits need a charger connection to leave the protected state.
  5. Charging. With USB connected, the charge LED should light, and the INA226 should report a negative current.
  6. USB-UART. Connect to a PC and confirm the CP2102N appears as a serial port. Older systems may need Silicon Labs' CP210x driver.
  7. Firmware. Upload a test sketch. Uploads should start without pressing BOOT, thanks to auto-reset.
  8. Peripherals, one at a time: display, sticks and pots, switches and encoder, INA226, nRF24.

Known issues (Rev 1)

  • Q4 package: see Assembly. Make sure a TSSOP-8 FS8205A is placed.
  • No dedicated bulk capacitor at the nRF24. nRF24L01 modules are known to need a local bulk capacitor for stable operation. If the radio is unreliable, solder a 10 to 100 µF capacitor across the module's VCC and GND pins. Add a footprint for it in Rev 2.
  • 10 µF capacitors are 10 V, 0603. At 5 V, DC bias derating significantly reduces their effective capacitance. Consider 16 V or higher, or 0805, in Rev 2.
  • Shared MISO. The ILI9341 and the nRF24 share MISO. Some ILI9341 modules reportedly don't release MISO when deselected, which can corrupt nRF24 reads. If this happens, disconnect the display's MISO; the display only needs MISO for read-back.
  • 3.3 V regulation at low battery. The AP2112K is an LDO, so below about 3.5 V battery the 3.3 V rail drops with it. Handle this with a firmware cutoff.
  • R6/R7 = 50 Ω is a non-standard value (0.1% thin-film part). 51 Ω works the same and is cheaper to source.
  • LED forward voltage. D1 and D2 are powered from 3.3 V through 470 Ω. Pick LEDs with a forward voltage around 2 V. Some "green" 0603 LEDs are about 3 V and will be very dim at 3.3 V.

License

The hardware design files are licensed under the CERN Open Hardware Licence Version 2, Permissive (CERN-OHL-P-2.0). See the LICENSE file.

Under this licence you may use, study, modify, make and sell the design, as long as you keep the copyright and licence notices. Firmware, once published, will be licensed separately.


Credits

Designed by Victor Macharia (Syb0rg), Spectral Systems. Repository: github.com/tyke01/bonk

Contributions, issue reports, and build photos are welcome. Please open an issue if you build one.

Parts

72
QtyValueFootprintReferences
810KResistor_SMD:R_0603_1608MetricR2, R3, R4, R5, R18, R19, R20, R21
70.1uCapacitor_SMD:C_0603_1608MetricC3, C5, C7, C9, C10, C14, C17
510uCapacitor_SMD:C_0603_1608MetricC4, C6, C8, C15, C16
41kResistor_SMD:R_0603_1608MetricR13, R22, R23, R26
4LEDLED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolderD1, D2, D4, D5
210nfCapacitor_SMD:C_0603_1608MetricC1, C2
21uCapacitor_SMD:C_0603_1608MetricC12, C13
2470Resistor_SMD:R_0603_1608MetricR8, R12
2472123010111toggle_switch:toggle_switchS2, S3
24k7Resistor_SMD:R_0603_1608MetricR9, R10
250Resistor_SMD:R_0603_1608MetricR6, R7
25k1Resistor_SMD:R_0603_1608MetricR16, R17
2BC817Package_TO_SOT_SMD:SOT-23Q1, Q2
2COM-09032XDCR_COM-09032:XDCR_COM-09032U4, U5
2R_PotentiometerPotentiometer_THT:Potentiometer_Vishay_T93YA_VerticalRV1, RV2
2SW_PushButton_Switch_THT:SW_PUSH_6mm_H7.3mmSW3, SW4
1100Resistor_SMD:R_0603_1608MetricR25
1100kResistor_SMD:R_0603_1608MetricR27
11048Battery_Holder_18650_2_Cell_SMD:Battery_Holder_18650_2_Cell_SMDBT1
11k1Resistor_SMD:R_0603_1608MetricR24
120mResistor_SMD:R_0603_1608MetricR11
122k1Resistor_SMD:R_0603_1608MetricR15
14.7uCapacitor_SMD:C_0603_1608MetricC11
147k5Resistor_SMD:R_0603_1608MetricR14
1AO3401APackage_TO_SOT_SMD:SOT-23Q3
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U2
1CP2102N-Axx-xQFN24Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mmU8
1CR2013-MI2120Display:CR2013-MI2120U1
1DW01APackage_TO_SOT_SMD:SOT-23-6U9
1ESP32-SLWIFIM-SMD_ESP32-SL:WIFIM-SMD_ESP32-SLL1
1FS8205ASOP65P640X120-8N:SOP65P640X120-8NQ4
1INA226Package_SO:TSSOP-10_3x3mm_P0.5mmU3
1NRF24L01_BreakoutRF_Module:nRF24L01_BreakoutU10
1PEC12R-4217F-S0024XDCR_PEC12R-4217F-S0024:XDCR_PEC12R-4217F-S0024S1
1SS34Diode_SMD:D_SMAD3
1TP4056-42-ESOP8Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.3mm_ThermalViasU6
1USB4085-GF-AUSB4085_CONNECTOR:USB4085_CONNECTORX1
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U7

Questions

How big is the RC controller PCB?

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

What parts does the RC controller use?

72 parts, built around the ESP32-SL, COM-09032, AP2112K-3.3 and DW01A. 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 RC controller KiCad files?

From the tyke01/bonk repository on GitHub, at the commit this page was made from: the board is _restore_backup_2026-09-24T16-39-22-534/RC controller.kicad_pcb and its schematic RC controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the RC controller design in my own project?

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

Similar boards

  • 2 layers45 × 100 mmWalkiepcb, the printed circuit board in 3D

    Walkiepcb

    houseofthe051010/ESP32-Walkie-Talkie-V2

    This ESP32 Walkie Talkie is redesigned with a SX1262 radio, a PCB, and a full case redesign.

    93 parts1
  • 2 layers69.1 × 56.6 mmDFPLAYER PCB, the printed circuit board in 3D

    DFPLAYER PCB

    Erolctk/ATmega328P-DFPlayer-PCB

    Custom DFPlayer Mini PCB designed with KiCad.

    62 parts
  • 2 layers151 × 95 mmDeneme, the printed circuit board in 3D

    Deneme

    g210101021/OpenStylophone-RP2040

    Overview • Technical Summary • Architecture • Hardware Audit & Remediation • Schematic Subsystems • PCB Layout • Firmware Roadmap • Bill of Materials • Author

    143 parts
  • 2 layers62 × 6 mmTableLight, the printed circuit board in 3D

    TableLight

    jonny190/TableLight

    A 3D-printable, battery-powered, USB-C rechargeable table lamp in the classic "Poldina" shape - honeycomb disc base, thin stem, down-firing cone shade with a white top - running WLED on an ESP32, with a capacitive touch…

    72 partsMIT
  • 2 layers49.4 × 95.7 mmPhysiowand, the printed circuit board in 3D

    Physiowand

    1tsMS/Physiowand

    91 parts
  • 2 layers102.9 × 103.7 mmDrone ESP32, the printed circuit board in 3D

    Drone ESP32

    Asaf66/Drone_ESP32

    Rev 2 fixes the issues found while assembling the first board:

    80 parts
  • 4 layers150 × 100 mmRun3, the printed circuit board in 3D

    Run3

    John-ODell/pocket-chance

    rp2040-plus and 1.3 inch LCD screen for pi pico by waveshare

    150 parts
  • 2 layers50.2 × 19.4 mmHead3, the printed circuit board in 3D

    Head3

    kntzn/head

    77 parts