We are NeuPivot (新枢脑控), a team building open brain-computer interface hardware. We believe neurotechnology should be hackable by anyone, so we open-source the entire stack: PCB schematics and Gerbers, firmware, signal processing, and host software.
NeuEEG is our first open-source project: a complete single-channel EEG acquisition stack — analog front-end, STM32 firmware with on-chip DSP, BLE/USB connectivity, and a host viewer with live waveform, spectrum, and focus/relaxation metrics.
Measured shorted-input noise: 0.057 µVrms / 0.41 µVpp (gain 12, 250 SPS, raw ADC + 50 Hz notch). Every test condition is documented and reproducible — see docs/measurements and the design blog.
The whole device can be built from JLCPCB-fabricated PCBs and off-the-shelf parts. Flash the provided hex, run the Python viewer, and you are looking at microvolt-level brain signals.
- Design blog (EN) — the module, the dev board, and one shorted-input noise measurement
- Protocol — UART packet format (250 Hz waveform packets + 1 Hz metrics packets)
- Measurements — raw data, metrics and reproduction notes for the noise numbers
- QQ Group: 1125680226
- Bilibili: 新枢脑控
- Mail: neupivot@gmail.com
![]() |
| QQ Group |
This repository contains the complete NeuEEG stack in one place. Pick the area that matches your contribution:
| Module | Contents |
|---|---|
| hardware/ | 3 PCBs — capture module, carrier board, all-in-one dev board (schematic PDF + JLCPCB Gerber ZIP) |
| firmware/ | Keil MDK project: STM32F103 + ADX920 driver, Q31 IIR filters, 256-pt RFFT, focus/relax metrics |
| software/ | Python host viewer (BLE/serial, live waveform & spectrum, CSV recording) + DSP tools |
| docs/ | Protocol spec, design blog (EN/中文), noise measurement data |
![]() |
![]() |
| Development board | Capture module |
![]() |
|
| Host viewer — live waveform, spectrum, focus/relax | |
Electrode → ADX920 HPF 0.5 Hz → 24-bit ADC @ 250 SPS, gain 12
→ Q31 IIR: HPF 0.5 Hz + LPF 100 Hz + 49.5–50.5 Hz notch
→ UART small packet @ ~250 Hz (filtered waveform)
→ 256-pt Hamming RFFT, hop 250 → large packet @ ~1 Hz (focus / relax / lead-off)
| Setup | RMS | Peak-peak |
|---|---|---|
| This board (raw ADC + 50 Hz notch) | 0.057 µVrms | 0.41 µVpp |
| This board (host path 1–65 Hz + notch) | 0.045 µVrms | 0.30 µVpp |
| ADX920 typical (datasheet, gain 12) | 0.7 µVrms | 5.4 µVpp |
Bandwidths differ — treat the datasheet row as an order-of-magnitude check. Full conditions: docs/measurements/metrics.json.
# Clone repository
git clone https://github.com/NeuPivot/NeuEEG.git
# Host viewer
cd NeuEEG/software
pip install -r requirements.txt
python eeg_viewer.py # BLE device name: MY-BT503-S, serial 115200 8N1- Firmware: open
firmware/MDK-ARM/ADX920.uvprojxin Keil MDK, or flash the ready-madefirmware/MDK-ARM/ADX920/ADX920.hex - Hardware: each folder under
hardware/ships a schematic PDF and a JLCPCB-ready Gerber ZIP - Viewer keys: software/KEYS.md
No. NeuEEG is an open engineering platform for learning and prototyping. Noise numbers are board-level measurements, not clinical metrics.
The capture module alone can acquire EEG — supply 3.3 V / 5 V and read UART from its headers. The carrier and dev board add USB-C, charging and BLE for a cable-free setup.
Yes. ADX920 supports programmable gain and data rates; change the register config in firmware/USER/ADX920.c. The shipped DSP coefficients assume 250 SPS.
NeuEEG is provided "as is", without warranty of any kind. It is not a medical device and must not be used for diagnosis, treatment, or any medical purpose.
Any use, modification, or secondary development of the open-source materials is at the user's own risk. NeuPivot assumes no liability whatsoever, including but not limited to equipment damage caused by improper assembly, configuration, or operation.
License: Multi-licensed — original code under MIT, PCB design files under CERN-OHL-P, documentation and photos under CC BY 4.0, vendor libraries under their own licenses. See LICENSE for scope details.
Thanks to all the people who contribute to this project!




