Skip to the content
PCBKitNew board
2 layers53.9 × 177.5 mmMainboard placed, the printed circuit board in 3D

Mainboard placed

ssjowowo/bleep

Most universal remotes either have a screen and few buttons, or lots of buttons and no screen. Bleep has both. The touchscreen shows activities, now-playing and smart-home controls.

Size
53.9 × 177.5 mm
Copper layers
2
Thickness
0.8 mm
Parts
80
Nets
59
Pads
348
Tracks, vias
0, 0
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
7 Oct 2026
Updated
9 Oct 2026

Overview

Mainboard placed is an open-source printed circuit board by ssjowowo, from the ssjowowo/bleep repository on GitHub. It is a 2-layer board of 53.9 × 177.5 mm with 80 parts on 59 nets.

It is built around the ESP32-S3-WROOM-1-N8R2, LTR-303ALS-01 and IRM-H638T/TR2, with the MAX17048G+T10, ME6211C33M5G-N and MMA8452QR1 among its other parts. Its parts include 18 resistors, 17 capacitors, 14 switches, 8 ICs and 3 diodes. It belongs with the computers and single-board computers boards and the ESP32 boards of this library.

Main components

12

README

README.md

Bleep

A DIY touchscreen universal remote. It's built around an ESP32-S3 on a main board of our own, with a 3.5″ IPS touch display, 14 physical keys, IR send and learn, haptics, and Home Assistant control over Wi-Fi. The case is 3D-printed and only 13 mm thick.

Bleep front outlines in four styles and a side profile   Render of the Bleep v1 main board, top side

What it is

Most universal remotes either have a screen and few buttons, or lots of buttons and no screen. Bleep has both. The touchscreen shows activities, now-playing and smart-home controls. The keys you use without looking stay physical: a D-pad ring with OK, Back, Home, Mute, three app keys (YouTube, Netflix, Plex) and a volume rocker.

  • IR out: two side-view 940 nm IR LEDs at the top end control TVs, receivers and boxes.
  • IR learning: a 38 kHz receiver behind a small window under the screen copies codes from your old remotes.
  • Wi-Fi: Home Assistant control of lights, scenes and media through the ESP32-S3.
  • Feel: a coin vibration motor driven by a DRV2605L haptics driver.
  • Smart power: lift-to-wake (accelerometer), wake on touch or any key, auto-brightness (light sensor), and a fuel gauge for an accurate battery percentage. Asleep it draws about 0.1–0.15 mA, so a charge lasts months.
  • USB-C for charging and flashing.

The hardware is designed for all of this. The firmware's app and UI run today in an emulator (on the PC or in a browser) while the boards are being made; the ESP32-S3 port comes when they arrive. See firmware/README.md.

The industrial design comes from a concept pack made in Claude Design (design 1b "Pebble", in design/). The brand (wordmark, logo lockup) comes from the Bleep brand book.

Status

PartState
Main board v1Ordered from JLCPCB on 2026-10-08 (5 boards, 2 assembled). The design is locked: the files in hardware/mainboard/ are the ones in production.
EnclosureReady to print. The back plate is flat, with room for a 4.0 × 50 × 85 mm Li-Po (405085) under the screen.
DisplayBuyDisplay ER-TFT035IPS-6 + capacitive touch, ordered 2026-10-09. Its cable fold gets checked on the real panel before assembly.
BatteryOrdered 2026-10-09 (405085 planned; if the cell differs, set BATT in layout.py and rebuild the back plate).
FirmwareApp and UI (C + LVGL 9) running in a PC/browser emulator with 32 scripted test scenarios; ESP-IDF port next. firmware/

Hardware at a glance

Size60.7 × 182.2 × 13.0 mm
MCUESP32-S3-WROOM-1-N8R2 (8 MB flash, 2 MB PSRAM), antenna at the right edge beside the D-pad
Display3.5″ IPS 320 × 480, ILI9488 on an 8-bit parallel bus (much faster than SPI), FT6236 capacitive touch
Keys14 tactile switches, each on its own wake-capable GPIO
IR2 × VSMB2948SL LEDs (≈ 125 mA peaks), IRM-H638T receiver for learning
SensorsMMA8452Q accelerometer, LTR-303ALS light sensor, MAX17048 fuel gauge
Power1-cell Li-Po, TP4056 charger with load sharing, ME6211 3.3 V LDO
Board2 layers, 0.8 mm, 54 × 178 mm. JLCPCB assembles the top side; you solder the ESP32 module, battery and motor on the underside.
CasePETG, two colours for the key labels (flush inlays), plus translucent blue PETG for the IR and sensor windows (two small separate prints); the board screwed to the front shell (4 × M2×4) and the back plate held by 2 × M2×8 and two snap fingers, all into heat-set inserts

The parts list, pin map, assembly steps, ordering guide (≈ €130 in total, delivered to Cyprus) and firmware notes are in hardware/README.md.

How it's built

Everything mechanical comes from one file, hardware/layout.py. It holds the display and part sizes, the key layout, where each part sits, the z stack and the screw points, and it runs fit checks on all of them. Two generators read it:

  • Enclosure: layout.py writes enclosure/params.scad, and enclosure/remote.scad (OpenSCAD) builds the front shell, its two windows, back plate, key caps and label inlays as STLs, plus interference checks.
  • Main board: mainboard/gen_mainboard.py places the parts in KiCad 10 from the same numbers. Freerouting routes it, then the generator adds ground pours, runs DRC and exports Gerbers, BOM and CPL for JLCPCB.

The board and the case can't drift apart. Since the board was ordered, layout.py checks every value the board was built from against mainboard/pcb_lock.json. It refuses to run if a case change would move one of them.

Repository layout

text
design/              concept pack (open the .dc.html files in a browser), brand assets, outline drawings
hardware/
  layout.py          the single source of truth for the mechanics
  build.sh           rebuilds everything from layout.py
  enclosure/         OpenSCAD source and the printable STLs (enclosure/stl/)
  mainboard/         KiCad board, generator, routing logs; fab/ = Gerbers, BOM, CPL (locked)
  viewer/            3D colour viewer (three.js) for trying colourways
  docs/              datasheets and renders
HANDOFF.md           current working state, for picking the project up on another machine

Building

bash
cd hardware
./build.sh enclosure   # STLs, renders and fit checks
./build.sh viewer      # meshes for the 3D viewer (viewer/index.html)

You need Python 3 (no extra packages) and OpenSCAD 2021.01 or newer, on the PATH or set with OPENSCAD=. The board rebuild (./build.sh pcb) also needs KiCad 10 and Freerouting, and it's disabled while v1 is locked.

To open the 3D viewer locally, run python3 -m http.server -d hardware/viewer 8742 and go to http://localhost:8742.

Roadmap

  1. Boards and display arrive: check the display cable fold, solder the underside parts, print the case.
  2. Firmware: LVGL UI (activities, now playing, Home Assistant), IR send and learning through the RMT peripheral, deep sleep with key, touch and lift wake.
  3. Fixes found on the real hardware go into a v2 board.

Parts

80
QtyValueFootprintReferences
14TS-1187A-B-A-BSW_Push_1P1T_XKB_TS-1187ASW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8, SW9, SW10, SW11, SW12, SW13, SW14
71uFC_0603_1608MetricC3, C4, C7, C8, C15, C17, C18
6M2MountingHole_2.2mm_M2H1, H2, H3, H4, H5, H6
510uFC_0805_2012MetricC5, C11, C12, C14, C16
4100kR_0603_1608MetricR5, R9, R11, R19
4logo LED dotLOGO_BACK1, LOGO_BACK2, LOGO_FRONT1, LOGO_FRONT2
3100nFC_0603_1608MetricC2, C9, C13
2100RR_0603_1608MetricR4, R8
210kR_0603_1608MetricR1, R10
222RR_0603_1608MetricR2, R3
222RR_1206_3216MetricR6, R7
24.7kR_0603_1608MetricR12, R13
25.1kR_0603_1608MetricR17, R18
2AO3400ASOT-23Q1, Q2
2VSMB2948SLVSMB2948SL_SideViewD1, D2
2battery lead padTestPoint_Pad_2.0x2.0mmTP1, TP2
2reset padTestPoint_Pad_1.5x1.5mmTP3, TP4
110uFC_0603_1608MetricC6
1220RR_0603_1608MetricR20
122uFC_0805_2012MetricC1
13.3kR_0603_1608MetricR16
1AO3401ASOT-23Q3
1B5819WD_SOD-123D3
1DRV2605LDGSTMSOP-10_3x3mm_P0.5mmU3
1ESP32-S3-WROOM-1-N8R2ESP32-S3-WROOM-1U1
1FPC-05F-50PH15FPC-05F-50PH15J1
1IRM-H638T/TR2IRM-H638TU6
1LRA 0832 (8 mm coin, wired)LRA_8mm_WirePadsM1
1LTR-303ALS-01LTR-303ALS-01U7
1MAX17048G+T10MAX17048_TDFN-8_2x2mmU8
1ME6211C33M5G-NSOT-23-5U2
1MMA8452QR1MMA8452Q_QFN-16_3x3mm_P0.5mmU4
1TP4056SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.3mmU5
1TYPE-C 16PIN 2MD(073)USB_C_Receptacle_HRO_TYPE-C-31-M-12J3

Questions

How big is the Mainboard placed PCB?

It measures 53.9 × 177.5 mm and has 2 copper layers, 0.8 mm thick.

What parts does the Mainboard placed use?

80 parts, built around the ESP32-S3-WROOM-1-N8R2, LTR-303ALS-01, IRM-H638T/TR2 and MAX17048G+T10. 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 Mainboard placed KiCad files?

From the ssjowowo/bleep repository on GitHub, at the commit this page was made from: the board is hardware/mainboard/mainboard_placed.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Mainboard placed design in my own project?

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

Similar boards

  • 2 layers64 × 22.9 mmConsole s3, the printed circuit board in 3D

    Console s3

    jmcpheron/pico-quorum

    Several people, several keys, one Safe. Hardware approvals for Safe multisig wallets.

    45 partsMIT
  • 2 layers44.1 × 10 mmIRBridge, the printed circuit board in 3D

    IRBridge

    harbra/IRBridge

    Controlling IR devices via Alexa and Webinterface

    45 parts12
  • 2 layers14 × 15.5 mmVsop breakout, the printed circuit board in 3D

    Vsop breakout

    ExplodingWaffle/vsop-breakout

    VSOP98260 IR Transceiver Breakout Board PCB

    9 parts2MIT
  • 4 layers60 × 45 mmTracker, the printed circuit board in 3D

    Tracker

    Sanu0910/RFMW-ANT

    180 parts
  • 4 layers64.6 × 55.2 mmWhisker, the printed circuit board in 3D

    Whisker

    HeyPCB/whisker

    Drop-in controller for Petoi's Nybble robot cat running the stock OpenCat firmware: ATmega328P, PCA9685, MPU-6050, USB-C, 3 A buck, protected battery input. 4-layer KiCad 10 board plus printed cradle.

    118 partsCERN-OHL-S-2.0
  • 4 layers88 × 54 mmDefcon badge, the printed circuit board in 3D

    Defcon badge

    LastZactionHero/defcon-silent-disco

    RP2040-based DEF CON silent disco badge — KiCad project + tooling

    82 parts
  • 2 layers64 × 37 mmBefore silk, the printed circuit board in 3D

    Before silk

    mitra42/frugal-iot-hw-sensor

    A simple, un-opinionated, multi-purpose sensor board, that can be wired to sensors using most common interfaces (I2C, ModBus, OneWire, Analog) with onboard charging and external antenna.

    67 parts
  • 2 layers55 × 35 mmBaconbits, the printed circuit board in 3D

    Baconbits

    e-ale/BaconBitsCapeHW

    Design files for the Bacon Bits MiniCape for the PocketBeagle

    64 parts23