PIEEG / PLATFORMWS :1616 · UI :1617LOCAL / OPEN

PiEEG Server / signal infrastructure

Give every signalan address.

One Python server turns EEG, EMG, ECG, and EOG hardware into a live WebSocket stream, a browser dashboard, and an open endpoint for whatever you build next.

SERVER / BOOT ONLINE

01$ pip install pieeg-serverPACKAGE READY

02$ pieeg-serverHARDWARE DETECTED

03ws://raspberrypi.local:1616STREAM OPEN

InstallOne pip command
Stream250–500 Hz
ProtocolPlain JSON / WebSocket
DashboardBrowser / :1617
SystemsPi · Linux · macOS · Windows

The server is not the destination.

It is the transparent middle: hardware enters on one side, timestamped channel data leaves on the other. The format stays simple enough for a browser, Python script, XR environment, notebook, or real-time integration to understand.

Choose the instrument.
Choose where it goes.

Switch the source hardware and destination to see the exact local route PiEEG Server creates.

01 / Select input32 CH
02 / Select routeOUTPUT
LIVE ROUTE / CONFIGURATION READY
INPUTIronBCI-32USB Serial / 32 CH
PROCESSPiEEG ServerPYTHON / LOCAL
OUTPUTWebSocketJSON / :1616
CHANNEL FIELD32 ACTIVE
DEVICE COMMAND$ pieeg-server --device ironbci32 --serial-port /dev/ttyACM0
DESTINATIONLanguage-agnostic stream

High-density USB serial acquisition

Three moves from hardware to live data.

01

Install

$ pip install pieeg-serverPython 3.10+ · hardware auto-detection
02

Stream

$ pieeg-serverWebSocket :1616 · dashboard :1617
03

Open

$ http://raspberrypi.local:1617Inspect the live stream in any browser

If the signal changes, you should see it.

The PiEEG Server dashboard keeps the live acquisition, frequency structure, and signal quality visible in the browser.

PIEEG SERVER / LIVE DASHBOARDHTTP :1617
PiEEG Server dashboard showing live multichannel waveforms, spectrograms, and signal informationLIVE WAVEFORMSFREQUENCY VIEWSIGNAL QUALITY
01

Live waveforms

Inspect every active channel as the stream moves through the server.

02

FFT and spectrograms

Move between time-domain signals and their frequency structure.

03

Signal quality

Monitor the acquisition before building decisions on top of it.

04

Record and replay

Capture annotated CSV sessions and replay them at 0.5×–2× speed.

Plain JSON.
No private language.

Every frame carries a timestamp, a monotonic sample number, and an array of channel values. Any language with WebSocket support can listen.

t
Unix timestamp / seconds
n
Monotonic sample number
channels
Array of µV values
PYTHON / CLIENT
import asyncio, json, websockets

async def main():
    uri = "ws://raspberrypi.local:1616"
    async with websockets.connect(uri) as ws:
        async for message in ws:
            frame = json.loads(message)
            print(frame["n"], frame["channels"])

asyncio.run(main())
FRAME / JSON
{
  "t": 1711234567.123,
  "n": 42,
  "channels": [12.34, -5.67, ...]
}

A stream becomes useful when it leaves the dashboard.

01

VRChat OSC

--osc

Stream band powers to avatar parameters

02

Lab Streaming Layer

--lsl

Connect with OpenViBE, MNE, and LabRecorder

03

Webhooks

JSON control

Create HTTP callbacks from EEG events

04

Jupyter

notebooks/

Load CSV or inspect a live stream

Install the server.
Keep the signal open.
Build from there.