Software
JNEEG works with two software stacks. Pick the one that fits what you want to do.
| Best for | Language | Effort | |
|---|---|---|---|
| PiEEG Server | Live dashboard, recording, streaming to apps, LSL, OSC, webhooks | Any (WebSocket JSON) | A few commands |
| Python scripts | Learning how the ADS1299 works, raw data, quick plots | Python | Edit and run a script |

PiEEG Server
JNEEG runs the official PiEEG Server (opens in a new tab): the same real-time streaming, dashboard, recording and integrations as on the Raspberry Pi boards. Run it with --device jneeg, which applies the jetson-nano hardware profile automatically (600 kHz SPI, GPIO on /dev/gpiochip0).
Enable SPI on the 40-pin header
sudo /opt/nvidia/jetson-io/jetson-io.pyConfigure 40-pin header → enable spi1 → Save and reboot. Then check ls /dev/spidev0.0.
Grant SPI and GPIO access
sudo groupadd -f spi
sudo usermod -aG spi,gpio "$USER"Log out and back in (or reboot).
Install the server
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install "pieeg-server[rpi]"The rpi extra just installs spidev, which is generic Linux SPI and works on the Jetson Nano. The Pi-only setup.sh script isn't used on the Jetson. PiEEG Server needs Python 3.10+.
Check and run
pieeg-server doctor # check SPI, GPIO and dependencies
pieeg-server --device jneeg # start streaming (8 channels)Open http://localhost:1617 (opens in a new tab) for the dashboard.
| Address | What it is |
|---|---|
http://<jetson-ip>:1617 | Browser dashboard |
ws://<jetson-ip>:1616 | WebSocket stream: JSON frames with 8 channels in µV |
Common options
pieeg-server --device jneeg --filter # 1–40 Hz band-pass
pieeg-server --device jneeg --record session.csv # record while streaming
pieeg-server --device jneeg --lsl # Lab Streaming Layer outlet
pieeg-server record session.csv --device jneeg # CSV only, no serverDRDY line check (one-time). The jetson-nano profile expects the data-ready line (header pin 7) at line offset 216 on /dev/gpiochip0. If samples never arrive, check the offset for your JetPack release with sudo apt install -y gpiod && gpioinfo gpiochip0, then pass the chip explicitly: pieeg-server --device jneeg --gpio-chip /dev/gpiochip0.
More: Installation · Configuration · WebSocket API · LSL
Python scripts
Small scripts that set up the ADS1299, read raw samples over SPI and plot or save them. They run on the Jetson's stock Python.
Source: github.com/pieeg-club/EEG-with-JetsonNano/tree/master/GUI (opens in a new tab)
| Script | What it does |
|---|---|
1.Graph_real_time.py (opens in a new tab) | Live 8-channel graph, band-pass filtered (1–10 Hz by default) |
2.Save_data.py (opens in a new tab) | Save raw µV for all 8 channels to Excel after 10,000 samples (40 s) |
dataset/Data_visualisation.py (opens in a new tab) | Plot a saved file |
Install and run
sudo apt install -y python3-pip python3-matplotlib python3-scipy
pip3 install spidev pandas openpyxl
git clone https://github.com/pieeg-club/EEG-with-JetsonNano.git
cd EEG-with-JetsonNano/GUI
python3 1.Graph_real_time.pyThe scripts use Jetson.GPIO (preinstalled on JetPack) to read DRDY on board pin 7, and spidev for SPI.
Tested library versions: matplotlib 3.6.3 · spidev 3.5 · scipy 1.10.1
The folder with_c_library_not_support holds an older C version using c-periphery. It isn't supported any more. Use the Python scripts or PiEEG Server.
Machine learning on the GPU
The Jetson Nano's GPU lets you run trained models on the EEG stream in real time:
- Stream samples from PiEEG Server's WebSocket (
ws://localhost:1616) or read them with the Python scripts. - Compute features (for example band power per channel, once per second).
- Run your PyTorch or TensorRT model on the features, on the GPU.
See the machine-learning example for PiEEG-16: the same steps work on JNEEG's 8 channels.