使用Python处理来自Numato ADC的数据

时间:2018-08-14 11:21:43

标签: python

我目前正在处理一个Python脚本,该脚本从Numato板上读取ADC数据,将接收到的字节切成薄片以检索数据,该数据将是0到1023之间的整数,并更改该值以提供电的值当前。该值与获取读数的时间一起插入到一个Numpy数组中。

此代码引发错误“ TypeError:字节索引必须是整数或切片,而不是元组”。

检索数据所涉及的脚本的片段如下:

def readdata(a, serPort):
global elapsed
serPort.write(str.encode("adc read 0 " +v "\r"))
response = serPort.read(25)
current = response[8,-8]*0.0322265625
b = numpy.array([elapsed, current])

任何帮助都将受到赞赏。谢谢。

更新:对response [8,-8]上的错字已进行了修改,现在变为:

response[8,:-8]

现在正在引发另一个错误,例如:

TypeError: can't concat into bytes

1 个答案:

答案 0 :(得分:0)

问题出在response[8,-8]上。您已使用元组(8,-8)作为索引,这不适用于字节数组。 (numpy对象确实支持该索引和其他类型的复杂索引。另一方面,字节数组仅接受整数或切片作为索引。)

要获取从设备接收的部分数据,请使用切片,例如:

response[4:8] # get 4 bytes at offsets 4,5,6,7

请注意,类型为bytes的切片也为bytes,您将无法在算术运算中使用它,例如将其乘以浮点数。您必须先将字节转换为Python整数值。使用struct模块来执行此操作。 7.1. struct — Interpret bytes as packed binary data。以下是获取4字节的big-endian整数的方法(例如,从偏移量4开始):

value = struct.unpack(">I", response[4:8])