【问题标题】:pyUSB get a continuous stream of data from sensorpyUSB 从传感器获取连续的数据流
【发布时间】:2015-03-27 01:05:12
【问题描述】:

我有一个通过 USB 连接的设备,我正在使用 pyUSB 与数据接口。

这是我的代码目前的样子:

import usb.core
import usb.util

def main():
    device = usb.core.find(idVendor=0x072F, idProduct=0x2200)

    # use the first/default configuration
    device.set_configuration()

    # first endpoint
    endpoint = device[0][(0,0)][0]

    # read a data packet
    data = None
    while True:
        try:
            data = device.read(endpoint.bEndpointAddress,
                               endpoint.wMaxPacketSize)
            print data

        except usb.core.USBError as e:
            data = None
            if e.args == ('Operation timed out',):

                continue

if __name__ == '__main__':
  main()

它基于鼠标阅读器,但我得到的数据对我来说没有意义:

array('B', [80, 3])
array('B', [80, 2])
array('B', [80, 3])
array('B', [80, 2])

我的猜测是它只读取实际提供的内容的一部分?我已经尝试将 maxpacketsize 设置为更大,但没有。

【问题讨论】:

    标签: python usb


    【解决方案1】:

    pyUSB 以字符串格式发送和接收数据。您收到的数据是 ASCII 码。您需要添加以下行才能在代码中正确读取数据。

    data = device.read(endpoint.bEndpointAddress,
                               endpoint.wMaxPacketSize)
    
    RxData = ''.join([chr(x) for x in data])
    print RxData
    

    函数chr(x) 将ASCII 码转换为字符串。这应该可以解决您的问题。

    【讨论】:

      【解决方案2】:

      我只是偶尔的 Python 用户,所以要小心。如果您的 python 脚本无法跟上被采样的数据量,那么这对我有用。我正在从 uC 发送 64 字节的 PC 块。我使用缓冲区来保存我的样本,然后我将它们保存在文件中或绘制它们。我调整数字乘以 64(在下面的示例中为 10),直到收到我期望的所有样本。

      # Initialization
      rxBytes = array.array('B', [0]) * (64 * 10)
      rxBuffer = array.array('B')
      

      在一个循环中,我获取新样本并将它们存储在缓冲区中

      # Get new samples
      hid_dev.read(endpoint.bEndpointAddress, rxBytes)
      rxBuffer.extend(rxBytes)
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-06
        • 2021-05-15
        • 2017-04-24
        • 1970-01-01
        • 2011-05-08
        • 1970-01-01
        • 2017-06-11
        相关资源
        最近更新 更多