IronBCI-32: 32-Channel 24-Bit EEG for BCI Research

What is it?

IronBCI-32 is a compact, battery-powered 32-channel EEG acquisition board designed for affordable brain-computer interface (BCI) research. Commercial 32-channel systems cost tens of thousands of dollars — this one is built on commodity parts and fully open source.

Hardware

At the heart of the design are four Analog Devices AD7771 sigma-delta ADCs, each delivering 8 simultaneous differential channels at 24-bit resolution and <0.22 µV RMS input noise (1–100 Hz). Unlike multiplexed designs, all 32 channels sample simultaneously — no inter-channel phase skew. This matters a lot if you care about coherence or Granger causality between channels.

An STM32H7 ARM Cortex-M7 running at 480 MHz collects data from all four ADCs over dedicated SPI buses and streams aggregated samples via USB-Serial at 500 SPS (configurable). Lightweight DC-offset rejection runs in firmware before transmission.

Power comes exclusively from a 5V battery pack via a dedicated micro-USB port. The host laptop also needs to run on battery during recording — full electrical isolation by design.

StageDetails
ElectrodesWet Ag/AgCl, 32ch, 10-20 system
ADC Bank4× AD7771, 24-bit, simultaneous
MCUSTM32H7 Cortex-M7 @ 480 MHz
InterfaceUSB-Serial, 500 SPS default
SoftwareBrainFlow, PiEEG Server

Software

IronBCI-32 is natively supported in BrainFlow, giving you a unified API across Python, C++, Java, C#, R, Julia, and more. Getting started is just a few lines:

###b class="inline-flex items-center justify-center relative isolate shrink-0 can-focus select-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:drop-shadow-none border-transparent transition font-base duration-300 ease-[cubic-bezier(0.165,0.85,0.45,1)] h-8 w-8 rounded-md backdrop-blur-md _fill_10ocf_9 _ghost_10ocf_96" type="button" aria-label="Copy to clipboard" data-state="closed"###

python

from brainflow.board_shim import BoardShim, BrainFlowInputParams, BoardIds

params = BrainFlowInputParams()
params.serial_port = '/dev/ttyUSB0'
board = BoardShim(BoardIds.IRONBCI_32_BOARD, params)
board.prepare_session()
board.start_stream()
data = board.get_board_data()  # returns 32 × N numpy array
board.stop_stream()
board.release_session()

The repo also includes standalone C examples for direct UART parsing on embedded targets — useful for edge-compute BCI scenarios. The PiEEG Server companion app adds real-time EEG visualization, LSL (Lab Streaming Layer) output, P300 stimulus delivery, VR device connectivity, and common BCI paradigms in a single cross-platform package.

Full docs: pieeg.com/docs/docs/ironbci-32

Validation

An alpha-rhythm suppression test (eyes-open vs. eyes-closed) was run using wet Ag/AgCl electrodes in a standard 10-20 configuration. Alpha band power (8–13 Hz) was estimated via Welch's method (2s Hanning window, 50% overlap). Eyes-closed alpha power exceeded eyes-open by a factor of 3.2× (p < 0.01) — reliable capture of cortical oscillations confirmed.

Dataset: github.com/pieeg-club/ironbci-32/tree/main/dataset

What's next

  • CMRR characterization vs. electrode impedance
  • Motion artefact suppression
  • Multi-modal EMG + ECG recordings
  • Wireless streaming (BLE / Wi-Fi) in a future hardware revision

Links