PiEEG Server

Stream biosignals
in 60 seconds

Real-time EEG/EMG/ECG/EOG streaming at 250–500 Hz. WebSocket API. Browser dashboard. Works on Raspberry Pi, Linux, macOS, Windows.

cloud.pieeg.com
PiEEG Server — live 16-channel EEG dashboard with spectrogram, mental state and signal statistics
Live Waveforms
All channels, real-time
Spectrogram
Full frequency map
Mental State
Focus & Relax scores
Signal Stats
Per-channel metrics

Quick Start

Three commands to live EEG streaming

1

Install

pip install pieeg-server

Requires Python 3.10+. Auto-detects your hardware.

2

Stream

pieeg-server

Starts WebSocket server on :1616 and dashboard on :1617

3

Connect

http://raspberrypi.local:1617

Open in any browser. Click Connect to start streaming.

Server Features

Everything you need for real-time biosignal acquisition

One-Line Install

pip install pieeg-server

WebSocket Streaming

Plain JSON at 250–500 Hz. No SDK, no binary protocol. Works in any language with WebSocket support.

Live Dashboard

React-based web UI with real-time waveforms, FFT, spectrograms, topographic maps, and signal quality monitoring.

Record & Replay

CSV recording with annotations. Session library with playback controls (0.5×–2× speed).

WebSocket API

Plain JSON. No SDK. Works in any language.

Python Client

stream_eeg.py
import asyncio, json, websockets

async def main():
    async with websockets.connect("ws://raspberrypi.local:1616") as ws:
        async for msg in ws:
            frame = json.loads(msg)
            # frame = {"t": 1711234567.123, "n": 42, "channels": [12.34, -5.67, ...]}
            print(f"Sample #{frame['n']}: {len(frame['channels'])} channels @ {frame['t']}")

asyncio.run(main())

JavaScript Client

stream.js
const ws = new WebSocket("ws://raspberrypi.local:1616");

ws.onmessage = (e) => {
  const frame = JSON.parse(e.data);
  console.log(`#${frame.n}: ${frame.channels.length} channels`);
  
  // frame.channels = array of µV values per channel
  // frame.t = Unix timestamp (seconds)
  // frame.n = sample number (monotonic)
};

Data Format

Every frame is a JSON object with three fields:

t

Unix timestamp (seconds)

n

Sample number (monotonic)

channels

Array of µV values

Supported Devices

One server, multiple hardware platforms

PiEEG

Raspberry Pi shield via SPI interface

8 / 16 ch
SPI
$ pieeg-server

IronBCI

Wireless BLE streaming

8 ch
Bluetooth LE
$ pieeg-server --device ironbci8

IronBCI-32

High-density USB serial acquisition

32 ch
USB Serial
$ pieeg-server --device ironbci32 --serial-port /dev/ttyACM0

Mock Mode

Synthetic EEG with alpha rhythm, drift, noise, artifacts

16 ch
Simulated
$ pieeg-server --mock

Real-time Control

Send commands to the server over WebSocket

Filtering

Real-time Butterworth bandpass

{"cmd": "set_filter", "enabled": true, "lowcut": 1.0, "highcut": 40.0}

Recording

Start/stop CSV recording

{"cmd": "start_record"} {"cmd": "stop_record"}

ADS1299 Registers

Live hardware configuration

{"cmd": "reg_read"} {"cmd": "reg_write", "regs": {"0x05": "0x00"}}

Webhooks

HTTP callbacks on EEG events

{"cmd": "webhook_create", "rule": {...}}

Integrations

Connect to your favorite tools and platforms

🎮

VRChat OSC

Stream band powers to VRChat avatar parameters

--osc
🔬

Lab Streaming Layer

Compatible with OpenViBE, MNE, LabRecorder

--lsl

IFTTT & Zapier

Trigger webhooks when EEG conditions are met

webhooks
📊

Jupyter Notebooks

Load CSV or stream live for analysis

notebooks/

Supported Signal Types

Acquire any biosignal with the same hardware

EEG

Electroencephalography

Amplitude
10–100 µV
Frequency
0.5–100 Hz
Delta (0.5–4 Hz)Theta (4–8 Hz)Alpha (8–13 Hz)Beta (13–30 Hz)Gamma (30–100 Hz)

EMG

Electromyography

Amplitude
50–5000 µV
Frequency
20–500 Hz
Motor Units (20–150 Hz)High Frequency (150–500 Hz)

ECG

Electrocardiography

Amplitude
0.5–4 mV
Frequency
0.5–150 Hz
P WaveQRS ComplexT Wave

EOG

Electrooculography

Amplitude
50–3500 µV
Frequency
0.1–30 Hz
Horizontal (saccades)Vertical (blinks)

Start streaming in 60 seconds

No hardware? Try the live demo with synthetic EEG data.