我有一个通过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设置为更大,但没有。
答案 0 :(得分:2)
pyUSB以字符串格式发送和接收数据。您收到的数据是ASCII码。您需要添加以下行以在代码中正确读取数据。
data = device.read(endpoint.bEndpointAddress,
endpoint.wMaxPacketSize)
RxData = ''.join([chr(x) for x in data])
print RxData
函数chr(x)
将ASCII代码转换为字符串。这应该可以解决您的问题。
答案 1 :(得分:1)
我只是偶尔的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)
希望这有帮助。