簡體   English   中英

pyUSB從傳感器獲得連續的數據流

[英]pyUSB get a continuous stream of data from sensor

我有一個通過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設置為更大,但沒有。

pyUSB以字符串格式發送和接收數據。 您收到的數據是ASCII碼。 您需要添加以下行以在代碼中正確讀取數據。

data = device.read(endpoint.bEndpointAddress,
                           endpoint.wMaxPacketSize)

RxData = ''.join([chr(x) for x in data])
print RxData

函數chr(x)將ASCII代碼轉換為字符串。 這應該可以解決您的問題。

我只是偶爾的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)

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM