Hardware
Devices
MicroBCI
Specification

Specification

MicroBCI shield

Hardware

Channels8 biosignal inputs
Extra inputsReference (shared by all channels) and bias
Analog front endTexas Instruments ADS1299
Resolution24-bit, delta-sigma, all channels sampled at the same moment
Sample rate250 SPS
SignalsEEG, EMG, ECG, EOG
ElectrodesDry or wet Ag/AgCl, 2.54 mm header
HostSTMicroelectronics NUCLEO-WB55 (STM32WB55: Arm Cortex-M4 application core, Cortex-M0+ radio core)
WirelessBluetooth LE
FirmwareMicro_BCI.hex + STM32WB BLE stack, flashed with STM32CubeProgrammer
Power5 V via the Nucleo's Micro-USB, from a small power bank
IsolationNone. Battery operation is required.

Software support

SoftwareSetting
Python SDK (opens in a new tab)bleak, by address or name EAREEG
Android app (opens in a new tab)Settings → 8 ch
PiEEG CloudPiEEG Devices → IronBCI
PiEEG Server--device ironbci8

Bluetooth data format

The same protocol as IronBCI:

Advertised nameEAREEG
Data characteristic (notify)0000fe42-8e22-4541-9d4c-21edae82ed19
Sample8 channels × 3 bytes = 24 bytes, 24-bit big-endian two's complement. A notification can carry one or more samples.

Converting to microvolts

raw = (b[0] << 16) | (b[1] << 8) | b[2]
if raw & 0x800000:
    raw -= 16777214
uV = raw * 4.5 / 16777215 * 1e6        # about 0.268 µV per count

Minimal Python reader

import asyncio
from bleak import BleakClient
 
ADDRESS = "00:80:E1:XX:XX:XX"                      # your board
CHAR    = "0000fe42-8e22-4541-9d4c-21edae82ed19"
 
def to_uv(b0, b1, b2):
    raw = (b0 << 16) | (b1 << 8) | b2
    if raw & 0x800000:
        raw -= 16777214
    return raw * 4.5 / 16777215 * 1e6
 
def on_data(_, data):
    for s in range(len(data) // 24):
        sample = data[s*24:(s+1)*24]
        print([round(to_uv(*sample[3*i:3*i+3]), 1) for i in range(8)])
 
async def main():
    async with BleakClient(ADDRESS) as client:
        await client.start_notify(CHAR, on_data)
        await asyncio.sleep(10)
 
asyncio.run(main())

Raw values carry a large DC offset from the electrode contact. That is normal. Apply a band-pass filter (for example 1–40 Hz) before looking at EEG.

Documents