用于Hackeg Arduino Due shield的Python客户端库

hackeeg的Python项目详细描述


Hackeg客户端python

HackEEG TI ADS1299 Arduino shield的Python客户端软件

Python客户端软件

Python客户机软件设计为在笔记本电脑上运行。有一个hackeeg驱动程序Python模块,用于通过USB串行端口与Arduino通信、命令行客户机(hackeeg_shell包装器和hackeeg_shell.pyPython客户机)和演示和性能测试脚本(hackeeg_test.py)。在

hackeeg_shell.pyhackeeg_test.py程序将Arduino驱动程序设置为JSON行模式,并以此方式与之通信。它们向Arduino发出JSON行命令,并接收JSON行或MessagePack数据作为响应。在

在2017 Retina Macbook Pro上使用Python 3.6.5,连接到Arduino,配置为使用驱动程序中包含的SPI DMA,并使用MessagePack模式,hackeeg_test.py程序可以以每秒16384个样本的速度读取和传输8个通道的24位分辨率数据,这是ADS1299芯片的最大速率。在

Python客户机软件需要PySerial模块。在

一般操作

ADS129x芯片是通过读写寄存器来配置的。有关配置ADS129x并从中读取数据的更多信息,请参阅芯片数据表。在

如果主机程序(从驱动程序读取数据的程序)没有足够快地从串行或USB接口提取数据,当串行或USB缓冲区满时,驱动程序将阻止发送。这将导致驾驶员丢失样本。在

驱动程序使用Arduino本机端口进行串行通信,因为它的速度为每秒2兆比特或更多。在

在大多数应用程序中,Python 3的用法如下:

#!/usr/bin/env pythonSERIAL_PORT_PATH="/dev/cu.usbmodem14434401"# your actual path to the Arduino Native serial port device goes hereimportsysimporthackeegfromhackeegimportads1299hackeeg=hackeeg.HackEEGBoard(SERIAL_PORT_PATH)hackeeg.connect()hackeeg.sdatac()hackeeg.reset()hackeeg.blink_board_led()hackeeg.disable_all_channels()sample_mode=ads1299.HIGH_RES_250_SPS|ads1299.CONFIG1_consthackeeg.wreg(ads1299.CONFIG1,sample_mode)test_signal_mode=ads1299.INT_TEST_4HZ|ads1299.CONFIG2_consthackeeg.wreg(ads1299.CONFIG2,test_signal_mode)hackeeg.enable_channel(7)hackeeg.wreg(ads1299.CH7SET,ads1299.TEST_SIGNAL|ads1299.GAIN_1X)hackeeg.rreg(ads1299.CH5SET)# Unipolar mode - setting SRB1 bit sends mid-supply voltage to the N inputshackeeg.wreg(ads1299.MISC1,ads1299.SRB1)# add channels into bias generationhackeeg.wreg(ads1299.BIAS_SENSP,ads1299.BIAS8P)hackeeg.rdatac()hackeeg.start()whileTrue:result=hackeeg.read_response()status_code=result.get('STATUS_CODE')status_text=result.get('STATUS_TEXT')data=result.get(hackeeg.DataKey)ifdata:decoded_data=result.get(hackeeg.DecodedDataKey)ifdecoded_data:timestamp=decoded_data.get('timestamp')ads_gpio=decoded_data.get('ads_gpio')loff_statp=decoded_data.get('loff_statp')loff_statn=decoded_data.get('loff_statn')channel_data=decoded_data.get('channel_data')print(f"timestamp:{timestamp} | gpio:{ads_gpio} loff_statp:{loff_statp} loff_statn:{loff_statn} |   ",end='')forchannel_number,sampleinenumerate(channel_data):print(f"{channel_number+1}:{sample} ",end='')print()else:print(data)sys.stdout.flush()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用ContentExchange设置请求属性   java Spark/Hdfs/Hdfsclient兼容性   java springcloudstreamkafka配置:instanceCount和instanceIndex   Java中web服务序列化日期   java用动态数据替换占位符   java git gc似乎覆盖了一个packfile,留下了一个打开的文件描述符,其中包含对“oldxxx.pack”的引用   为什么Apache项目对Java版本敏感?   java Anylogic帮助如何在导入的3dobject通过输送机上的多个“站”时更改其颜色?   JavaEclipseNeonM2E可以导入一个大型项目,但似乎不能自动解决依赖关系   java@FindBy搜索具有满足条件的子元素的元素   java如何将ActionEvent e与键绑定一起使用?   java转换以集中方式从外部库抛出的异常   java中用户文件/数据文件与系统/程序文件的区别   java使用变量字符串或字符作为对象名   字体使用Java图形操纵字符串中每个字符的形状   JavaFX图表移动数据   java RandomAccessFile:将所有项设置为相同的字节数?   java Google Play inapp Billing onPurchasesUpdated()错误响应代码1   java在不知道属性名和属性数的情况下处理json对象   java是否可以一次从HazelcastInstance(映射和列表)中删除所有数据?