Using 🧠 BrainFlow with the Neurosity headset 
Tags: python, bci, eeg, notebooks
Published: 2020-09-23 20:21:31

The Neurosity OS features a full [JavaScript SDK](http://docs.neurosity.co/) for web apps. But what if you want to use other awesome programming languages to get brainwaves?

Enter [BrainFlow](https://brainflow.readthedocs.io/).

BrainFlow is multi-purpose biosensor library that provides a uniform data acquisition API for many devices.

You can use BrainFlow in **Python, Java, C#, C++, R, Matlab, and Julia**.

BrainFlow is ideal for:
 - Research
 - Unity Integration
 - Unreal Engine Integration
 - Neuroscience Experiments

## Enabling BrainFlow

1) Open Neurosity's Developer Console 
2) Go to [Settings](https://console.neurosity.co/settings) by clicking the ⚙️ gear icon next to your device's name
3) Enable Open Sound Control (OSC)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/lmpekdgzxgyg64jfzemz.gif)


The OS running on your Neurosity device is now streaming data to BrainFlow via OSC.

> We recommend disabling OSC if you are not using BrainFlow as it will consume extra battery life.

## Installing BrainFlow

In this example we'll use Python 3 to work with BrainFlow.

Install the latest release from PYPI with the following command in terminal:

```
python -m pip install brainflow
```

> 📖 For installation instruction for other languages, please visit the BrainFlow [docs](https://brainflow.readthedocs.io/en/stable/BuildBrainFlow.html).

## Getting real-time brainwaves

Next, create a new file called `brainflow-test.py` and add the following snippet to it:

```python
import brainflow

from brainflow import BoardIds
from brainflow.board_shim import BoardShim, BrainFlowInputParams
from brainflow.data_filter import DataFilter, FilterTypes, AggOperations

def main ():
    board_id = BoardIds.CROWN_BOARD.value # or BoardIds.NOTION_2_BOARD.value or BoardIds.NOTION_1_BOARD.value
    params = BrainFlowInputParams ()
    params.board_id = board_id
    BoardShim.enable_dev_board_logger ()
    board = BoardShim (board_id, params)
    board.prepare_session ()
    board.start_stream ()
    data = board.get_board_data ()
    board.stop_stream ()
    board.release_session ()

    print (data)

if __name__ == "__main__":
    main ()
```

Run the code via terminal.

```
python3 brainflow-test.py
```

And finally, you should see the data in the terminal.

```
...
 [-2.27709781e+05 -2.27785156e+05 -2.27140344e+05 -2.26998656e+05
  -2.27617781e+05 -2.27845906e+05 -2.27248578e+05 -2.26956891e+05
  -2.27517125e+05 -2.27874938e+05 -2.27355188e+05 -2.26924359e+05
  -2.27395156e+05 -2.27880234e+05 -2.27474953e+05 -2.26928188e+05
  -2.27283438e+05 -2.27850938e+05 -2.27579297e+05 -2.26961781e+05
  -2.27188766e+05 -2.27806875e+05 -2.27681078e+05 -2.27022875e+05
  -2.27094812e+05]
 [-3.49463312e+05 -3.49478594e+05 -3.49025500e+05 -3.48958906e+05
  -3.49402500e+05 -3.49527812e+05 -3.49097719e+05 -3.48925125e+05
  -3.49332969e+05 -3.49551812e+05 -3.49167250e+05 -3.48893688e+05
  -3.49243031e+05 -3.49560875e+05 -3.49251094e+05 -3.48890188e+05
  -3.49161750e+05 -3.49542906e+05 -3.49322031e+05 -3.48906938e+05
  -3.49094312e+05 -3.49517031e+05 -3.49395438e+05 -3.48944156e+05
  -3.49023562e+05]
```

> 📖 For other Python code examples like writing to a file, data transforms, and signal filtering, check out these [examples](https://brainflow.readthedocs.io/en/stable/Examples.html).

## Gotchas

Some Windows 10 users reported the following error.

```
brainflow.board_shim.BrainFlowError: BOARD_NOT_READY_ERROR:7 unable to start streaming session
```

If this is the case for you, try disabling your firewall, and try again.

## EEG Notebooks

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7e6umbcylxzidkya30n2.png)

The amazing EEG Notebooks project by the NeuroTechX community now supports the Neurosity Crown device via BrainFlow.

> EEG-Notebooks is a collection of classic EEG experiments, implemented in Python 3 and Jupyter notebooks. The goal is to make cognitive neuroscience and neurotechnology more accessible, affordable, and scalable.

With EEG Notebooks you can explore BCI methods such as Visual N170, P300, SSVEP, and more.

[Give it a try](https://neurotechx.github.io/eeg-notebooks/)!

{% github neurotechx/eeg-notebooks no-readme %}