Skip to the content
4 layers61.8 × 79.8 mmOwl mainboard, the printed circuit board in 3D

Owl-shaped Spotify remote for your desk and pocket: ESP32-S3 firmware, LVGL UI, KiCad PCB, 3D-printed enclosure, and owl v0 on the Waveshare AMOLED kit

Size
61.8 × 79.8 mm
Copper layers
4
Thickness
1 mm
Parts
107
Nets
78
Pads
427
Tracks, vias
1,066, 262
Pours
8
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
12 Nov 2023
Updated
3 Nov 2026

Overview

Owl mainboard is an open-source printed circuit board by danieltyukov, from the danieltyukov/owltunes repository on GitHub, published under the MIT licence. It is a 4-layer board of 61.8 × 79.8 mm with 107 parts on 78 nets, routed with 1,066 tracks and 262 vias.

It is built around the ESP32-S3-WROOM-1-N16R8, OPT3001DNPR and TPS63802DLAR, with the BQ24073RGTR, LIS2DW12TR-MS and MAX17048G+T10 among its other parts. Its parts include 30 capacitors, 30 resistors, 10 ICs, 6 connectors and 5 diodes. It belongs with the computers and single-board computers boards and the ESP32 boards of this library.

Main components

12

README

README.md

OwlTunes

Your music, one turn away.
A Spotify remote with a round AMOLED face and a rotating ring. It charges on your desk and goes with you in your pocket.

Website | Setup guide | System design | Hardware

OwlTunes on its perch

OwlTunes controls the music that is already playing on your phone, laptop or speakers. Turn the ring to change the volume, tap the cover to pause, press an ear to skip. Drop it on its perch and it becomes a desk display that charges while it shows what is playing.

Spotify switched off every Car Thing in December 2024. Nobody can do that to OwlTunes: the firmware, boards and enclosure are open source, it talks to Spotify's Web API directly over Wi-Fi, and Bluetooth media keys keep working when there is no internet.

On the deskIn your pocket
Docked on a deskIn a jeans pocket

The device

Display1.75 inch round AMOLED, 466 x 466, capacitive touch, behind 1.1 mm cover glass
ControlsRotating ring with haptic detents, two ear buttons, a beak button, touch and swipe
BrainESP32-S3 with 16 MB flash and 8 MB PSRAM
ConnectivityWi-Fi to the Spotify Web API (home network or phone hotspot); Bluetooth LE media keys offline
SensorsHall sensor for the ring, accelerometer (pick up to wake), ambient light
PowerSingle-cell LiPo, USB-C, and spring-contact charging on the perch
Size66 x 84 x 24 mm
PerchWeighted magnetic desk dock that holds the owl at 17.5 degrees

How you use it

ControlAction
RingVolume on Now Playing; scroll in lists, one haptic tick per item
Tap the coverPlay or pause
Swipe left or rightNext or previous track
Left or right earPrevious or next track
Hold the left ear, turn the ringPick one of 8 presets, release to play
Hold the right earLike the current track
BeakBack; hold for Now Playing

It also browses your playlists and library, searches, manages the queue and moves playback between your Spotify Connect devices.

What it looks like

The screens below come from the desktop simulator, which runs the same UI code as the firmware.

Now playingPlaylistsPreset wheelLooking for your phone
Now playingPlaylistsPreset wheelNo device

Inside

Exploded view

A 4-layer main board (KiCad 10, assembled by JLCPCB) inside a printed nylon enclosure (build123d, MJF PA12). The ring carries magnets that a Hall sensor on the board reads, and a small linear motor gives each detent its click. Every board passes ERC, DRC and a check against the enclosure's mechanical contract in CI.

The renders on this page are made from the same files: the enclosure and board meshes go into Blender with tools/render.sh, and the screen shows the simulator's output. The album art is a generated placeholder. The renders were computed on the DelftBlue supercomputer of the Delft High Performance Computing Centre (DHPC, https://www.tudelft.nl/dhpc), and the owl v0 renders on a TU Delft EWI compute server.

Owl v0

Owl v0Inside owl v0
Owl v0 standing on a deskOwl v0 exploded

The first owl to be built is owl v0: the same face, ring, ears and beak, built round Waveshare's ESP32-S3-Touch-AMOLED-1.75 kit, which brings the display, the ESP32-S3, USB-C and the battery charger, so there is no board to order. Six nylon prints hold it, a Hall sensor module reads the ring's magnets, and tact switches sit under the ears and the beak. It has no perch, haptics or light sensor yet, and it is 19.7 mm deep. kit-owl.md has the parts, wiring and assembly.

Status

  • Firmware: Wi-Fi setup, Spotify linking and playback control run on an ESP32-S3 dev board against a real Spotify account, and are tested on the host and in QEMU. Display and touch drivers for the rev A board and the Waveshare AMOLED kit build in CI and wait for first light.
  • Owl v0: the owl built round the Waveshare AMOLED kit, with the ring, ear and beak buttons and a 400 mAh cell, ready to order and print (kit-owl.md).
  • Hardware rev A: main board and perch board designed and checked; ordered after owl v0.
  • Enclosure v1: owl, ring, bezel and perch ready for printing, with the face built around the panel's 52.6 mm cover glass.
  • Next: owl v0 assembled and brought up, the button and ring drivers, then rev A.

Read the system design for the full picture and docs/hardware for the boards.

Set it up

OwlTunes needs Spotify Premium and your own free Spotify developer app (client ID). It uses the Authorization Code flow with PKCE, so no client secret is stored on the device or in this repository. Open the setup page in Chrome or Edge, connect the owl over USB, add your Wi-Fi networks and client ID, and log in with Spotify. The setup guide walks through every step.

The owl's setup screen with a QR code for the setup page

Build it

Commands (Linux with CMake 3.22+, Ninja and a C compiler)
WhatCommand
Unit tests (with sanitizers)tools/test_host.sh
Simulator screenshot teststools/sim.sh
Interactive simulator (needs libsdl2-dev)cmake -S sim -B build/sim-sdl -G Ninja -DOWL_SIM_SDL=ON && cmake --build build/sim-sdl && build/sim-sdl/owl_sim sdl
Firmware (ESP-IDF v6.1 activated)tools/firmware.sh build
Firmware for the Arduino Nano ESP32, and flashing ittools/firmware.sh build nano_esp32, then tools/firmware.sh flash nano_esp32
Firmware for the owl's rev A board or the Waveshare ESP32-S3-Touch-AMOLED-1.75 kit (display and touch; not yet run on hardware)tools/firmware.sh build owltunes_reva or tools/firmware.sh build waveshare_amoled_175, then flash with the same board name
Hardware tests on the Nano ESP32 (board on USB)tools/hil_nano.py --wifi; with a linked board and your consent, tools/hil_spotify.py --real-account
Firmware in the QEMU emulatortools/qemu_smoke.sh
Setup protocol in QEMU, including a real HTTPS call to Spotifytools/qemu_prov_test.py
Setup site: unit and browser tests (Node.js 22)cd web && npm ci && npm test && npm run e2e
Setup site: local development servercd web && npm run dev
Enclosure tests and exportssee enclosure/README.md
Hardware checks (KiCad 10)tools/hw/check_all.sh
Product renders (Blender 5.2, kicad-cli, uv)tools/render.sh
Regenerate the UI fonts (needs Node.js)tools/gen_fonts.sh
PathContents
firmware/ESP-IDF firmware; shared C code in firmware/components/, board support in firmware/boards/
sim/Desktop simulator and golden screenshots
web/The setup site (TypeScript and Vite), published on GitHub Pages
enclosure/build123d sources for the owl, owl v0 on the Waveshare kit, the ring and the perch
hardware/KiCad 10 projects for the owl main board and the perch board
docs/Design documents, hardware notes, setup and protocol guides
tools/Build, test, style, render and font scripts

The UI font is Inter (SIL Open Font License, see firmware/components/owl_ui/fonts/LICENSE-Inter.txt).

Licences

Not affiliated with Spotify

OwlTunes is an independent, non-commercial project. It is not affiliated with, endorsed by or sponsored by Spotify. Spotify is a trademark of Spotify AB.

Parts

107
QtyValueFootprintReferences
10100kResistor_SMD:R_0402_1005MetricR103, R104, R105, R106, R108, R109, R207, R208, R209, R308
10100nFCapacitor_SMD:C_0402_1005MetricC106, C109, C112, C202, C302, C305, C306, C307, C309, C310
510kResistor_SMD:R_0402_1005MetricR206, R210, R211, R303, R309
54.7kResistor_SMD:R_0402_1005MetricR212, R301, R302, R305, R306
41uFCapacitor_SMD:C_0402_1005MetricC104, C303, C304, C308
422uFCapacitor_SMD:C_0603_1608MetricC102, C107, C108, C201
4M2 bezelMountingHole:MountingHole_2.2mm_M2H1, H2, H3, H4
4M2 bodyMountingHole:MountingHole_2.2mm_M2H5, H6, H7, H8
310nFCapacitor_SMD:C_0402_1005MetricC206, C207, C208
310uFCapacitor_SMD:C_0603_1608MetricC103, C105, C111
218pFCapacitor_SMD:C_0402_1005MetricC204, C205
222Resistor_SMD:R_0402_1005MetricR203, R204
247kResistor_SMD:R_0402_1005MetricR205, R304
25.1kResistor_SMD:R_0402_1005MetricR201, R202
2PMEG2020EHDiode_SMD:D_SOD-123FD101, D102
2SMF5.0ADiode_SMD:D_SOD-123FD201, D301
1+3V3TestPoint:TestPoint_Pad_D1.0mmTP104
10.47uHowltunes:L_Murata_DFE201612EL101
110k NTC B3950Resistor_SMD:R_0402_1005MetricRT101
11kResistor_SMD:R_0402_1005MetricR307
11nFCapacitor_SMD:C_0402_1005MetricC110
1220nFCapacitor_SMD:C_0402_1005MetricC203
13.3kResistor_SMD:R_0402_1005MetricR101
13.6kResistor_SMD:R_0402_1005MetricR102
132.768kHz 12.5pFCrystal:Crystal_SMD_3215-2Pin_3.2x1.5mmY201
14.7uFCapacitor_SMD:C_0402_1005MetricC301
14.7uFCapacitor_SMD:C_0603_1608MetricC101
1560kResistor_SMD:R_0402_1005MetricR107
1AMOLED FPCowltunes:Hirose_FH26W-31S-0.3SHW_1x31-1MP_P0.30mm_HorizontalJ301
1BOOTTestPoint:TestPoint_Pad_D1.5mmTP202
1BQ24073RGTRowltunes:VQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm_ThermalVias_Drill0.3U101
1Battery +, -Connector_JST:JST_PH_S2B-PH-SM4-TB_1x02-1MP_P2.00mm_HorizontalJ101
1BeakButton_Switch_SMD:SW_SPST_TS-1088-xR020SW203
1DISP_3V3TestPoint:TestPoint_Pad_D1.0mmTP105
1DOCK: GND, VBUS, DET, GNDConnector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_HorizontalJ303
1DRV2605LDGSRPackage_SO:TSSOP-10_3x3mm_P0.5mmU301
1ESP32-S3-WROOM-1-N16R8owltunes:ESP32-S3-WROOM-1_Drill0.3U201
1EXP: GND, 3V3, A, BConnector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_HorizontalJ202
1Ear leftButton_Switch_SMD:SW_SPST_EVQP7ASW201
1Ear rightButton_Switch_SMD:SW_SPST_EVQP7ASW202
1GAUGE_ALRTTestPoint:TestPoint_Pad_D1.0mmTP107
1GNDTestPoint:TestPoint_Pad_D1.5mmTP203
1GNDTestPoint:TestPoint_Pad_D1.0mmTP106
1LESD5D5.0CT1GDiode_SMD:D_SOD-523D302
1LIS2DW12TRPackage_LGA:LGA-12_2x2mm_P0.5mmU303
1LRAConnector_JST:JST_SH_SM02B-SRSS-TB_1x02-1MP_P1.00mm_HorizontalJ302
1MAX17048G+T10owltunes:Maxim_TDFN-8-1EP_2x2mm_P0.5mmU102
1OPT3001DNPRowltunes:TI_DNP_USON-6-1EP_2x2mm_P0.65mmU304
1RESETTestPoint:TestPoint_Pad_D1.5mmTP201
1RXTestPoint:TestPoint_Pad_D1.0mmTP205
1TMAG5273A2QDBVRPackage_TO_SOT_SMD:SOT-23-6U302
1TPS22917DBVRPackage_TO_SOT_SMD:SOT-23-6U104
1TPS63802DLARowltunes:TI_DLA_VSON-10_2x3mm_P0.5mmU103
1TXTestPoint:TestPoint_Pad_D1.0mmTP204
1USB-CConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J201
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U202
1VBATTestPoint:TestPoint_Pad_D1.0mmTP103
1VIN_CHGTestPoint:TestPoint_Pad_D1.0mmTP101
1VSYSTestPoint:TestPoint_Pad_D1.0mmTP102

More from danieltyukov/owltunes

1
  • 2 layers34 × 29 mmPerch dock, the printed circuit board in 3D

    Perch dock

    danieltyukov/owltunes

    Owl-shaped Spotify remote for your desk and pocket: ESP32-S3 firmware, LVGL UI, KiCad PCB, 3D-printed enclosure, and owl v0 on the Waveshare AMOLED kit

    22 partsMIT

Similar boards

  • 6 layers66 × 66 mmPD240W kicad, the printed circuit board in 3D

    PD240W kicad

    theohg/PD240W

    PD240W is a complete hardware and firmware project converting USB-C Power Delivery into a programmable 240W (48V 5A) bench power supply, featuring C++ code for Raspberry Pi Pico, custom PCB Gerbers, and a 3D-printable…

    299 parts125
  • 8 layers28 × 125 mmCompact tablet, the printed circuit board in 3D

    Compact tablet

    CopperPilot/tablet

    An 8.4-inch tablet around a chip-down RK3566 + LPDDR4X: 8-layer 0.8 mm mainboard, USB-C daughter board, 1600x2560 dual-DSI display, CNC aluminium shell. Designed end to end by CopperPilot, open for review.

    431 partsCERN-OHL-S-2.0
  • 4 layers80 × 105.5 mmNetdaq, the printed circuit board in 3D

    Netdaq

    Gherkin/netdaq

    913 partsCERN-OHL-P-2.0
  • 12 layers68 × 40 mmTeresina Rack, the printed circuit board in 3D

    Teresina Rack

    marcoallegretti/Teresina-Rack

    The goal is an open, self-fabricatable Daisy Patch SM-compatible Eurorack submodule: the same carrier interface and libDaisy application compatibility through a small Teresina firmware variant.

    214 parts
  • 4 layers38 × 64 mmAk display 38x64 SPLIT POWER CANDIDATE, the printed circuit board in 3D

    Ak display 38x64 SPLIT POWER CANDIDATE

    LeeSpo/portable-display-epass-EVT1-minboot-r1

    当前自研硬件为 38 × 64 mm、四层 split-power 工程候选,尚未放行生产。

    147 parts
  • 4 layersDial me spinner main, the printed circuit board in 3D

    Dial me spinner main

    tyevco/dial-me-spinner

    A Bluetooth dial spinner about 70 mm across, built on the nRF52840. A heavy, balanced stainless flywheel ring spins around a stationary centre that holds a colour OLED and a ring of 48 addressable RGB LEDs.

    209 parts
  • 8 layersRound pendant, the printed circuit board in 3D

    Round pendant

    sequoia-hope/ultraroute

    PCB autorouting experiments around copperroute: route jobs, leaderboards, board morphing

    342 parts1MIT
  • 4 layers59 × 101 mmEnku mainboard r0.1, the printed circuit board in 3D

    Enku mainboard r0.1

    aliaksei-lameyka/ENKU-Base-reader

    Open enku-mainboard-r0.1.kicadpro with KiCad10.0.7. Matching PCB/root schematic and power.kicadsch, mcuio.kicadsch, epdhv.kicadsch, connectors.kicadsch are canonical.

    127 parts1CERN-OHL-W-2.0

Questions

How big is the Owl mainboard PCB?

It measures 61.8 × 79.8 mm and has 4 copper layers, 1 mm thick.

What parts does the Owl mainboard use?

107 parts, built around the ESP32-S3-WROOM-1-N16R8, OPT3001DNPR, TPS63802DLAR and BQ24073RGTR. 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 Owl mainboard KiCad files?

From the danieltyukov/owltunes repository on GitHub, at the commit this page was made from: the board is hardware/owl-mainboard/owl-mainboard.kicad_pcb and its schematic hardware/owl-mainboard/mcu_usb.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Owl mainboard design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).