Skip to the content
PCBKitNew board
2 layers25.2 × 64.4 mmBeogram esp32, the printed circuit board in 3D

Beogram esp32

wr/beonos2

Control your vintage Bang & Olufsen Beogram turntable from Home Assistant or Sonos.

Size
25.2 × 64.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
19
Nets
17
Pads
65
Tracks, vias
60, 6
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
12 May 2026
Updated
5 Oct 2026

Overview

Beogram esp32 is an open-source printed circuit board by wr, from the wr/beonos repository on GitHub. It is a 2-layer board of 25.2 × 64.4 mm with 19 parts on 17 nets, routed with 60 tracks and 6 vias.

It is built around the LTV-356T. Its parts include 6 resistors, 4 capacitors, 3 ICs and 2 connectors. It belongs with the home automation and IoT and retro computing and games boards and the ESP32 and RISC-V boards of this library.

Main components

1

README

README.md

Beonos logo

Beonos Controller

Control your vintage Bang & Olufsen Beogram turntable from Home Assistant or Sonos.

What is it? ⬪ Buy a board ⬪ Which turntables ⬪ Hardware ⬪ Firmware ⬪ Repo layout ⬪ License

YouTube player

I recorded a full build video that you can watch here.


Buy a board

Get it as a kit, pre-soldered or not, from the Wells Workshop shop.

Or order your own Beonos Controller from PCBway. You can use my referral code to get $5 off your order, if you want. In my experience they're usually pretty fast and high quality, especially for the price.

What is it?

A small ESP32-C6-powered custom PCB that splices into a Beogram's keyboard cable, reads what the turntable is doing, and sends play/pause/stop commands. The result is a 'smart' vintage turntable that behaves like a digital Sonos source.

  • Turntable → Sonos: start the turntable and the speaker switches to Line-In and plays. Pause or switch off, and the speaker pauses.
  • Sonos → turntable: pick Line-In on the speaker and the turntable starts (it presses Cue). Switch away or pause, and the turntable stops. If there's no record on the platter, the firmware notices and pauses Sonos rather than leaving it playing silence.

The board splices in-line, so nothing about the turntable is modified permanently — unplug the two headers and it's stock again.

Which turntables

The Beogram 1800 family — the last generation of radial-arm Beograms — all share one control board, so the splice is the same across them:

ModelYearsStatus
Beogram RX 21985–90Built and tested against this
Beogram 18001983–84Confirmed from service manuals
Beogram 20001983Confirmed from service manuals
Beogram 50001984Confirmed from service manuals
Beogram RX1984Very likely, not yet verified

The RX-2 service manual is published as a supplement to the Beogram 1800/2000/5000 manual, and the three share the same power supply (PCB 8005076) and control board (PCB 8005117). Their keyboards are the same two sub-boards — 8005070 for PLAY/STOP and 8005109 for 45/CUE/33 — landing on the same P7 pins, which is what this board splices into. The RX is unverified only because no manual was to hand; it replaced the 1800 and differs from the RX 2 mainly in being supplied with a pickup.

Not compatible. The Beogram 2200 looks close but wires its speed switches straight to the control board alongside indicator lamps and a motor relay, with no separate keyboard board and no CUE or PLAY/STOP lines to intercept. Tangential-arm Beograms (4002, 8000, 6500, 7000, 9000, 5005 and relatives) use a different arm and control system entirely, and pre-1983 radial decks predate this microcomputer control.

To identify an unknown deck, look for a control PCB stamped 8005117, a 24-pin MCU marked B040680 / ETL 5410N, and a keyboard on its own cable whose buttons switch +12V.

Hardware

  • MCU: Seeed Studio XIAO ESP32-C6 (castellated edge-mount module)
  • Button drivers: 2× LTV-356T optocouplers, switching the turntable's +12V onto the CUE and PLAYPAUSE lines exactly as the real buttons do
  • Level shifters: 2× 1M/1.5M dividers dropping the COP410's 5.3V logic to ~3.18V for the ESP's 3.3V inputs. The values are deliberately high so the divider barely loads the COP410's weak CMOS outputs, and any overvoltage is current-limited into the ESP's ESD clamps.
  • Power: an off-board MP1584EN buck module (PS1) steps the +12V button rail down to 5V, so the board draws everything from the button cable and never taps the 5.3V supply. The module hangs on flying leads; the board carries four wire pads for it.
  • Decoupling: 10µF + 100nF on the buck's 5V output
  • Input filtering: 10nF from each divider midpoint to ground, below R6/R8. The dividers present ~600kΩ to the ESP on wires that run past a motor; the caps give a ~6ms time constant, well inside the firmware's 50 ms debounce.
  • Connectors: two 1×8 horizontal headers for the in-line splice — J1 (socket, silkscreened TO BOARD) and J2 (header, silkscreened TO KEYBOARD). Pins 1, 2, 4, 6, 7, 8 pass straight through; pins 3 and 5 also land on the optocoupler emitters.
  • Flying leads: the two COP410 sense signals and a ground reference arrive on test pads (TP2, TP3, TP5); four more pads go out to the buck module. Everything is silkscreened by function — On-Off IN, PlayPause IN, GND IN, 12V, 5V, GND — so solder by the printed label, not the designator.

Board is 25 × 64 mm, two layers. Sources are beogram-esp32.kicad_pcb / .kicad_sch / .kicad_pro, with the BOM in bom.csv.

Pin map

XIAO pinPadGPIONetPurpose
D01GPIO0IN_OnOff_3V3COP410 pin 11 → ESP. LOW = arm in (turntable on)
D34GPIO21IN_PlayPause_3V3COP410 pin 12 → ESP. HIGH = playing
D89GPIO19DRV_PlayPauseESP → U2 opto LED. Pulse 500 ms to "press" PLAYPAUSE
D1011GPIO18DRV_CueESP → U3 opto LED. Pulse 500 ms to "press" CUE
5V14—VCC5V in from the MP1584 buck (PS1)
GND13—GNDCommon ground

D6/D7 (GPIO16/17) are UART0 and are left unconnected on purpose, so the ROM bootloader's serial output can't reach an optocoupler on reset.

Firmware (ESPHome)

bash
pip install esphome
cp secrets.yaml.example secrets.yaml
# fill in WiFi creds in secrets.yaml
esphome run beogram-rx2.yaml

First flash needs USB-C; after that, updates go over the air.

Configuring the Sonos speaker

Once it joins WiFi the device shows up in Home Assistant. Set the "Sonos IP" entity to your speaker's address. That's the only setup — the RINCON UUID is discovered from the speaker on boot.

Exposed entities

EntityTypeNotes
Turntable Onbinary_sensortrue = arm in / playing position
Turntable Playingbinary_sensortrue = motor on, arm down
Sonos Playingbinary_sensorderived from polled transport state
Sonos On Line-Inbinary_sensortrue if speaker is on line-in
Sonos Transport Statetext_sensorPLAYING / PAUSED_PLAYBACK / STOPPED
Sonos Current URItext_sensorwhat the speaker is currently playing
Sonos IPtext (config)edit in HA, persists across reboots
Press Play/Pausebuttonmanually fire the turntable's PLAYPAUSE
Press Cuebuttonmanually fire the turntable's CUE
Sonos Play / Pausebuttonsmanual SOAP commands
Sonos Switch to Line-Inbuttonmanual SOAP command
WiFi SignalsensordBm, 60s update

Repo layout

text
beogram-esp32.kicad_pro     KiCad project
beogram-esp32.kicad_sch     Schematic
beogram-esp32.kicad_pcb     PCB layout
fp-lib-table                Registers the project footprint libraries
sym-lib-table               Registers the project symbol library
beogram.pretty/             Project footprints (MP1584 wire pads)
beogram.kicad_sym           Project symbols
New_XIAO_Series_Footprints/ Seeed's XIAO footprint library (vendor)
beogram-rx2.yaml            ESPHome firmware config
secrets.yaml.example        Template for WiFi/OTA/API creds
bom.csv                     Bill of materials
bang-olufsen_beogram_rx2_sch.pdf   RX 2 service-manual schematic, for reference

Credits

ESPHome, the Seeed Studio XIAO ESP32-C6, KiCad, and Bang & Olufsen's engineers, who documented the RX2 well enough to reverse a splice point out of it forty years later.

Donate

While beonos is free and open source, donations are deeply appreciated, and make ongoing development and support possible. Donate now

License

CC BY-NC-SA 4.0. © 2026 Wells Riley.

Parts

19
QtyValueFootprintReferences
21.5MResistor_SMD:R_0402_1005MetricR6, R8
210nFCapacitor_SMD:C_0402_1005MetricC3, C4
21MResistor_SMD:R_0402_1005MetricR5, R7
2470RResistor_SMD:R_0402_1005MetricR1, R2
2LTV-356TPackage_SO:SO-4_4.4x3.6mm_P2.54mmU2, U3
1100nFCapacitor_SMD:C_0402_1005MetricC2
110uFCapacitor_SMD:C_0402_1005MetricC1
12.54-1*40P right-angle(C2334)Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_HorizontalJ2
1GND INTestPoint:TestPoint_Pad_1.5x1.5mmTP5
1MP1584EN modulebeogram:MP1584_Module_WiredPS1
1On-Off INTestPoint:TestPoint_Pad_1.5x1.5mmTP2
1PM254-1-08-W-8.5(C2897390)Connector_PinSocket_2.54mm:PinSocket_1x08_P2.54mm_HorizontalJ1
1PlayPause INTestPoint:TestPoint_Pad_1.5x1.5mmTP3
1SEEED STUDIO XIAO ESP32C6New_XIAO_Series_Footprints:XIAO-ESP32-C6-SMDU1

Questions

How big is the Beogram esp32 PCB?

It measures 25.2 × 64.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Beogram esp32 use?

19 parts, built around the LTV-356T. 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 Beogram esp32 KiCad files?

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

Can I use the Beogram esp32 design in my own project?

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

Similar boards

  • 2 layers170 × 140 mmLibreVerter Controller, the printed circuit board in 3D

    LibreVerter Controller

    imendizabal/LibreVerter

    Open Source Power Converter - Hardware Components

    215 parts22
  • 2 layers125 × 56 mmML2, the printed circuit board in 3D

    ML2

    brucemack/microlink

    An open source EchoLink/AllStarLink implementation that runs on a simple microcontroller.

    73 parts18GPL-3.0
  • 2 layers108 × 55 mmPower control pcb, the printed circuit board in 3D

    Power control pcb

    HacklabJKL/sergei_cnc2

    Second version of Hacklab's custom built CNC machine

    89 parts6
  • 2 layers50.8 × 22.9 mmMinimain esp32-s2, the printed circuit board in 3D

    Minimain esp32-s2

    DepartmentOfAlchemy/minimain-esp32-s2

    PCB files for the MiniMain ESP32-S2 in an Adafruit Feather compatible format.

    39 parts4
  • 2 layers60 × 52 mmADuM3165 USB ISOLATION, the printed circuit board in 3D

    ADuM3165 USB ISOLATION

    Fominsky/HIGH-SPEED-USB-ISOLATOR

    High-speed USB isolator with external power based on ADuM3165/ADuM3166

    68 parts4
  • 2 layers100 × 100 mmXaar128-Driver, the printed circuit board in 3D

    Xaar128-Driver

    tuwrraphael/inkjet-printer

    Inkjet printer for printing ceramic thin films: software, electronics and CAD designs

    188 parts4Apache-2.0
  • 2 layers230 × 160 mmAntcontroller, the printed circuit board in 3D

    Antcontroller

    cr1tbit/antcontroller

    402 parts1
  • 2 layers120.1 × 46 mmGeiger EDW, the printed circuit board in 3D

    Geiger EDW

    Sidolux/geiger_counter

    Geiger Counter (STS-5) designed with KiCad

    60 parts1