Skip to content
foonerd edited this page Oct 16, 2026 · 6 revisions

Just OLED

The spectrum face on a 128x128 colour panel The amber theme on a 128x128 colour panel

Spectrum, VU bars, the track and a clock on a small OLED, moving with the music on a Volumio player. An audio tap in the player's ALSA chain measures every source, files, radio, streaming, AirPlay and Spotify alike, without touching the sound. While music plays the display shows the face you choose: the spectrum, the stereo spectrum, the spectrum with left and right levels, the levels alone, the track alone in larger type, or the spectrum across the whole panel, with the track's time, the format and a progress line, in the colours you pick on a colour panel; while nothing plays, the time and date in your formats, with the player's address, going dark after a while; and it tells you when the player boots, restarts and shuts down.

One plugin for the whole family of small OLED modules, monochrome, greyscale and colour, over I2C or SPI: the Displays page lists every controller and panel the daemon knows, and says which have been verified on a module and which are described from the data sheet.

Where the project stands. Version 0.1.3 is on the releases page. The tap, the daemon, the faces, the colours and the drivers for every common controller are in; two modules have drawn them on the bench, a Waveshare 1.5" RGB OLED (SSD1351, SPI) and a 2.42" OLED (SSD1309, over SPI and over I2C), and the rest are described from the data sheets until a module of each has been through it. Screens shows the pages; Wiring has the drawings; Settings has every choice.

Start here

Page What it is for
Quick-Start Install the plugin, wire the display, see the music.
Wiring The I2C and SPI wiring on a Raspberry Pi, with drawings.
Displays Every controller and panel the plugin drives, and what stands behind each entry.
Screens The pages the panel shows, per panel class.
Settings Every setting on the plugin's page.
Troubleshooting When nothing shows, when the picture is offset or mirrored, when the bars stand still.

How it fits together

flowchart LR
    subgraph Player
        S[Sources: files, radio, streaming, AirPlay, Spotify] --> T[justoledtap, the audio tap in the ALSA chain]
        T --> H[Sound card]
        T --> R[(Ring under /dev/shm: peak, RMS and spectrum per channel)]
        R --> D[just-oled, the display daemon]
        P[Plugin: settings, player state, boot and shutdown] -- control socket --> D
        D -- I2C or SPI --> L[OLED]
    end
Loading

The tap sits in the chain between the player and the sound card and passes every stream through unchanged; it measures on a thread of its own and publishes the peak, the RMS and a bank of spectrum bands for each channel into a small ring in shared memory. The daemon reads the ring, draws the page the settings ask for, and writes the frame to the panel over I2C or SPI. The plugin tells the daemon the player's state over a Unix socket and hands it the boot, ready, restart and shutdown moments; the daemon runs as a systemd service, so the boot message is on the panel before Volumio itself is up.

Clone this wiki locally