Использование PyUSB для чтения данных с устройства ELM327 OBD-II-to-USBPython

Программы на Python
Anonymous
Использование PyUSB для чтения данных с устройства ELM327 OBD-II-to-USB

Сообщение Anonymous »

У меня возникли проблемы с использованием библиотеки PyUSB для чтения данных с устройства ELM327 OBD-II-to-USB. Я знаю, что мне нужно написать команду устройству в конечной точке записи и прочитать полученные данные обратно в конечной точке чтения. Однако, похоже, у меня это не работает.
Для этого я написал собственный класс obdusb:

Код: Выделить всё

import usb.core

class obdusb:

def __init__(self,_vend,_prod):

'''Handle to USB device'''
self.idVendor = _vend
self.idProduct = _prod
self._dev = usb.core.find(idVendor=_vend, idProduct=_prod)

return None

def GetDevice(self):
'''Must be called after constructor'''
return self._dev

def SetupEndpoint(self):
'''Must be called after constructor'''
try:
self._dev.set_configuration()

except usb.core.USBError as e:
sys.exit("Could not set configuration")

self._endpointWrite = self._dev[0][(0,0)][1]
self._endpointRead = self._dev[0][(0,0)][0]

# Resetting device and setting vehicle protocol (Auto)
# 20 ms is required as a delay between each written command

# ATZ resets device
self._dev.write(self._endpointWrite.bEndpointAddress,'ATZ',0)
sleep(0.002)
# ATSP 0 should set the vehicle protocol automatically
self._dev.write(self._endpointWrite.bEndpointAddress,'ATSP 0',0)
sleep(0.02)

return self._endpointRead

def GetData(self,strCommand):

data = []
self._dev.write(self._endpintWrite.bEndpointAddress,strCommand,0)
sleep(0.002)
data = self._dev.read(self._endpointRead.bEndpointAddress, self._endpointRead.wMaxPacketSize)

return data
Поэтому я затем использую этот класс и вызываю метод GetData, используя этот код:

Код: Выделить всё

import obdusb

# Setting up library,device and endpoint
lib = obdusb.obdusb(0x0403,0x6001)
myDev = lib.GetDevice()
endp = lib.SetupEndpoint()

# Testing the GetData function with random OBD command
# 0902 is VIN number of vehicle being requested
dataArr = lib.GetData('0902')
PrintResults(dataArr)

raw_input("Press any key")

def PrintResults(arr):

size = len(arr)

print "Data currently in buffer:"

for i in range(0,size):
print "[" + str(i) + "]: " + str(make[i])
При этом печатаются только числа 1 и 60 из [0] и 1 элемента массива. Никаких других данных команда не вернула. Это происходит независимо от того, подключено устройство к автомобилю или нет. Я не знаю, что это за две части информации. Я ожидаю, что он вернет строку шестнадцатеричных чисел. Что я здесь делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/164 ... usb-device

Вернуться в «Python»