Verwenden von PyUSB zum Lesen von Daten vom ELM327 OBD-II-zu-USB-GerätPython

Python-Programme
Anonymous
 Verwenden von PyUSB zum Lesen von Daten vom ELM327 OBD-II-zu-USB-Gerät

Post by Anonymous »

Ich habe Probleme bei der Verwendung der PyUSB-Bibliothek zum Lesen von Daten vom ELM327 OBD-II-zu-USB-Gerät. Ich weiß, dass ich am Schreibendpunkt einen Befehl an das Gerät schreiben und die empfangenen Daten am Leseendpunkt zurücklesen muss. Bei mir scheint es jedoch nicht funktionieren zu wollen.
Ich habe dafür meine eigene Klasse obdusb geschrieben:

Code: Select all

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
Also verwende ich dann diese Klasse und rufe die GetData-Methode mit diesem Code auf:

Code: Select all

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])
Dies gibt immer nur die Zahlen 1 und 60 aus den Elementen [0] und [1] im Array aus. Es wurden keine weiteren Daten vom Befehl zurückgegeben. Dies gilt unabhängig davon, ob das Gerät mit einem Auto verbunden ist oder nicht. Ich weiß nicht, was diese beiden Informationen sind. Ich erwarte, dass es eine Folge von Hexadezimalzahlen zurückgibt. Was mache ich hier falsch?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post