一、安装brainflow库

BrainFlow 是一个用于获取、解析和分析来自生物传感器的 EEG、EMG、ECG 和其他类型数据的库(官网:BrainFlow)。其主要特点为:支持设备种类多支持9种编程语言包含信号处理功能

通过pip安装

1
pip install brainflow

点击并拖拽以移动

二、代码解析

先放上官方的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import argparse
import time

from brainflow.board_shim import BoardShim, BrainFlowInputParams, BoardIds


def main():
BoardShim.enable_dev_board_logger()

parser = argparse.ArgumentParser()
# use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port
parser.add_argument('--timeout', type=int, help='timeout for device discovery or connection', required=False,
default=0)
parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0)
parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False,
default=0)
parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='')
parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='')
parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='')
parser.add_argument('--other-info', type=str, help='other info', required=False, default='')
parser.add_argument('--serial-number', type=str, help='serial number', required=False, default='')
parser.add_argument('--board-id', type=int, help='board id, check docs to get a list of supported boards',
required=True)
parser.add_argument('--file', type=str, help='file', required=False, default='')
parser.add_argument('--master-board', type=int, help='master board id for streaming and playback boards',
required=False, default=BoardIds.NO_BOARD)
args = parser.parse_args()

params = BrainFlowInputParams()
params.ip_port = args.ip_port
params.serial_port = args.serial_port
params.mac_address = args.mac_address
params.other_info = args.other_info
params.serial_number = args.serial_number
params.ip_address = args.ip_address
params.ip_protocol = args.ip_protocol
params.timeout = args.timeout
params.file = args.file
params.master_board = args.master_board

board = BoardShim(args.board_id, params)
board.prepare_session()
board.start_stream ()
time.sleep(10)
# data = board.get_current_board_data (256) # get latest 256 packages or less, doesnt remove them from internal buffer
data = board.get_board_data() # get all data and remove it from internal buffer
board.stop_stream()
board.release_session()

print(data)


if __name__ == "__main__":
main()

点击并拖拽以移动

这个示例是一个通用的模板,连接任何板子只需在这一句代码中传入板子的ID和相应的参数即可

1
board = BoardShim(args.board_id, params)

点击并拖拽以移动

所以,将上面的代码精简后,得到仅用于连接cyton板的代码是(我用的是第三方的cyton平替板,通过WiFi连接的,如果是USB的话需要配置serial_port,board id要改成BoardIds.CYTON_BOARD)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import time
from brainflow.board_shim import BoardShim, BrainFlowInputParams, BoardIds


def main():
BoardShim.enable_dev_board_logger()

params = BrainFlowInputParams()
params.ip_port = 6677
params.ip_address = '192.168.4.1'
params.ip_protocol = 3
params.timeout = 10

board = BoardShim(BoardIds.CYTON_WIFI_BOARD, params)
board.prepare_session()
board.start_stream ()
time.sleep(10)
# data = board.get_current_board_data (256) # get latest 256 packages or less, doesnt remove them from internal buffer
data = board.get_board_data() # get all data and remove it from internal buffer
board.stop_stream()
board.release_session()

print(data)
print(data.shape)


if __name__ == "__main__":
main()

点击并拖拽以移动

三、运行代码

img点击并拖拽以移动