Python脑波图
我收到了一个Neurosky Mindwave作为圣诞礼物,但对它的标准软件并不太满意。于是我决定用我对Python的基本了解来试试,但很快发现自己还有很多不足之处。于是我开始探索,找到了两段我想要结合在一起的代码。
我的目标是创建一个实时图表工具,它可以从Mindwave获取数据并将其输出为图表。
我找到的第一段代码是与Think gear的接口。它从COM端口接收数据包,并使用日志记录的方法来显示这些数据:
我想要整合的第二段代码是绘图的方法。我已经广泛使用过Tkinter这个包,所以我选择它作为首选。如果有更简单的方法,不需要太多第三方软件(比如matlab),我也很乐意尝试。我找到的绘图代码在这里:
https://stackoverflow.com/a/7605072/1110140
我想做的是将第一段代码的输出数据输入到第二段代码中,以实现实时图表的效果。然而,我对日志记录模块没有经验,不知道该如何将其从原始代码中分离出来,以便作为第二段代码的输入。而且第二段代码主要是为了演示目的,我也不太确定该如何修改它,使其在其他情况下看起来不错。
任何帮助都非常感谢。
1 个回答
看起来,在thinkgear.py文件中,ThinkGearProtocol就像一个工厂,利用ThinkGearMetaClass来生成对象,这些对象的类型就是返回的数据类型。下面的代码 -
global packet_log
packet_log = []
logging.basicConfig(level=logging.DEBUG)
for pkt in ThinkGearProtocol('/dev/rfcomm9').get_packets():
packet_log.append(pkt)
看起来是为了在一个线程中将数据包发送到日志记录器。对于你的应用来说,你不一定需要使用日志记录器(这可能会让人感到困惑)。你可以考虑使用类似下面的方式
def PacketHandler(packet):
# Send an event out to objects
for obj in listeners:
obj.packet_callback(packet)
for pkt in ThinkGearProtocol('/dev/rfcomm9').get_packets():
PacketHandler(pkt)
另外,我不使用Tkinter,但如果它有处理事件的方法,你可以用上面的代码来发布事件。现在,你可以通过编写一些代码,将接收到的数据包转换为原始数据,然后将这些原始数据发送到图表中,从而将thinkgear.py模块与StripChart类连接起来。我建议你先尝试一下StripChart,看看需要做些什么才能让它正常工作,然后再写上面的监听器,使用一个简单的处理程序,看看能否打印出数据流(显示实际值而不是数据包)。之后的内容就比较具体到你的应用了。
最终的流程看起来像这样:
[thinkgear.py] -> [数据包线程(处理事件)] -> [数据包数据解析器(获取原始数据)] -> [内部模型] -> [StripChart]。