rustymind

Crates.iorustymind
lib.rsrustymind
version0.1.3
sourcesrc
created_at2021-06-21 03:25:35.521195
updated_at2021-06-22 00:31:11.417619
descriptionA driver, parser and real time plotter for NeuroSky MindWave EEG headset
homepagehttps://github.com/junjunjd/rustymind
repositoryhttps://github.com/junjunjd/rustymind
max_upload_size
id412744
size718,236
Junjun Dong (junjunjd)

documentation

https://docs.rs/rustymind

README

rustymind

crates.io api_doc

Rustymind is a driver and parser for NeuroSky MindWave EEG headset written in pure Rust. You can use it to connect, interact, and plot real time data from the headset.

The parser is based on the mindwave mindset communication protocols published by NeuroSky.

See below for a screenshot of real time mindwaves plotted by rustymind-plot CLI based on rustymind parser.

Real time plot screenshot

Getting Started

rustymind-plot takes two arguments to run:

  • MindWave device path. On Mac, the path would be in the format of /dev/tty.usbserial-10000
  • Headset ID (printed inside the battery case)
cargo run --bin rustymind-plot "/dev/tty.usbserial-10000" a05f

If you don't pass in the headset ID argument, the dongle will auto-connect to any headsets it can find.

To use rustymind as a library, you need to use connect_headset function and Parser struct. For example:

use rustymind::{connect_headset, PacketType, Parser};

let mut port = connect_headset("/dev/tty.usbserial-10000", b"\xa0\x5f")?;
let mut buffer: Vec<u8> = vec![0; 2048];
let mut parser = Parser::new();

loop {
    let bytes_read = port.read(buffer.as_mut_slice()).unwrap();
    for i in 0..bytes_read {
        if let Some(x) = parser.parse(buffer[i]) {
            for r in x {
                match r {
                    PacketType::Attention(value) => {
                        println!("Attention value = {}", value);
                    }
                    PacketType::Meditation(value) => {
                        println!("Meditation value = {}", value);
                    }
                    PacketType::AsicEeg(value) => {
                        println!("EEG power values = {:?}", value);
                    }
                    _ => (),
                }
            }
        }
    }
}

This software is not intended to be used in medical diagnostics or medical treatment.

Commit count: 42

cargo fmt