Introduction
Open-Source Brain-Computer Interface

PiEEG Documentation

From electrode wiring to live WebSocket streams — complete coverage of PiEEG hardware, PiEEG Server software, and all integrations.

What Is PiEEG?

PiEEG is a family of EEG shields and boards that turn a Raspberry Pi, Jetson Nano, or standalone USB host into a multi-channel brain-computer interface. The companion PiEEG Server software acquires, streams, records, and exposes real-time EEG data over WebSocket, LSL, OSC, and webhooks — with a built-in browser dashboard out of the box.

New to PiEEG? Follow the Quick Start to get streaming in minutes. Setting up hardware for the first time? Start with Hardware and pick your device.

Explore the Docs

What's Covered

AreaTopics
HardwarePiEEG, PiEEG-16, JNEEG, ardEEG, IronBCI, MicroBCI, IronBCI-32, electrodes, caps, power
SoftwareServer install, dashboard, WebSocket streaming, data format, recording, detectors
IntegrationsLSL, Jupyter notebooks, VRChat OSC, webhooks, IFTTT, Zapier
OperationsAuthentication, security, troubleshooting, development, signal quality

Install the Server

One-line install (Linux / Raspberry Pi OS)

curl -sSL https://raw.githubusercontent.com/pieeg-club/PiEEG-server/main/install.sh | bash

Open the dashboard

Navigate to http://<device-ip>:1617 in your browser.

Stream data

Connect any WebSocket client to ws://<device-ip>:1616.

Platform Architecture

┌──────────────────────────────────────────────────────────┐
│  Raspberry Pi + PiEEG Shield (8 or 16 ch)                │
│  or IronBCI / EAREEG board (8 ch, Bluetooth LE)          │
│  or IronBCI-32 board (32 ch, USB serial)                 │
│                                                          │
│  hardware.py     → SPI/GPIO init, ADS1299 config         │
│  ironbci.py      → BLE scan, GATT notifications, parsing │
│  ironbci_32.py   → USB serial (pyserial), FreeEEG frames │
│       ↓                                                  │
│  acquisition.py  → 250 Hz read loop (background thread)  │
│       ↓ pub/sub                                          │
│       ├── server.py     → WebSocket broadcast            │
│       ├── recorder.py   → CSV writer                     │
│       ├── monitor.py    → Terminal sparklines             │
│       ├── osc_vrchat.py → VRChat OSC bridge              │
│       └── lsl.py        → Lab Streaming Layer outlet     │
│                                                          │
│  ws://0.0.0.0:1616  │  http://0.0.0.0:1617              │
└──────────┬───────────────────────────────────────────────┘
           │  Local network / internet
           ├── Browser dashboard (React + Vite)
           ├── Python / Jupyter notebook
           ├── VRChat (OSC over UDP)
           ├── LSL consumers (OpenViBE, MNE, LabRecorder…)
           ├── IFTTT / Zapier (webhooks)
           └── Any WebSocket client