Muse 2016 - bluetooth packet format



I’m trying to get the data from the Muse 2016 via bluetooth, using python. I already receive the eeg data by subscribing to the handles 0x20, 0x23, 0x26, 0x29 and 0x2c.

I want to get the battery/temp data, the accelerometer and the gyroscope. By subscribing to the handles 0x1a, 0x11, 0x14 and 0x17 I get a lot of data in different rating samples, but I can’t decode the bits. I alway get 160 bits, which the first 16 are (I assume) an unsigned int timestamp.
How are the packets encoded? Which one is which? I also subscribe to the 0x0e handle which sends admin information.

I’m using python3.5, with the library pygatt to connect via bluetooth. I’ve also used gatttool to connect and inspect the services provided.

Thanks in advance!


To my knowledge Interaxon have not published the 2016 bluetooth protocols, but if you’re interested in writing your own interface without the official SDK, this is the best place to start: Reverse-Engineering Muse EEG headband Bluetooth protocol.

See also his GitHub muse-lsl with full python source code to stream EEG.

Specifically regarding gyro/battery/temp etc then I think the essayist way to get the answers you’re looking for would be to run the file through a decompiler like IDA.


I am already using that repo, is great work from barachant.