Waveshare USB Barcode Scanner

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

Hallo Ihr Liebe.

Ich hätte da mal ein Problem wo ich nicht wirklich weiter komme. Ich hoffe das mir hier jemand helfen kann.

Ich habe vor einen Barcode Scanner von Waveshare über USB an einem Rasperry Pi 3 zu betreiben. Dieser Scanner hat an Board bereits einen Button womit man den Scanner aktiven kann und das Ergebnis dann als Tastatur Input in ein Textfeld mit Focus geschrieben wird. Dies funktioniert auch wunderbar. Da der Button aber leider an einer Stelle sitzt wo er für mich ungereinigt ist wollte ich per Python ein Programm schreiben was bei einem Button Druck den Scanner über einen USB Befehl aktiviert.

Aus diesem Datenblatt https://www.waveshare.com/w/upload/3/3c ... pdf#page58 entnehme ich das ich eigentlich nur an die Adresse 0x0000 ein Bit 1 senden muss das er aktiviert wird. Bitte korrigiert mich wenn ich falsch liege.

Folgendes Programm habe ich mir bis jetzt zusammen gebaut.

Code: Alles auswählen

import serial
ser = serial.Serial(port = ”/dev/ttyUSB8”,
    baudrate = 9600,
    stopbits = serial.STOPBITS_ONE,
    bytesize = serial.EIGHTBITS)
ser.open()
ser.isOpen()
ser.write(0x0000, 1)
Dort bekomme ich eine Fehlermeldung auf Zeile 7 das die Datei oder das Verzeichnis nicht gefunden werden konnte.

lsusb wirft mir das Gerät als Bus 0001 Device 008 aus.

Am Scanner hab ich nach dem ersten Versuch auf Command Mode umgestellt. Ging leider auch nicht. Und dann noch auf USB Virtual Port umgestellt. Ging aber leider auch nicht.

Ich hoffe ich konnte mein Problem relativ genau beschreiben und das mir jemand helfen kann einen Ansatz zu finden.

Vielen Lieben dank euch.
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Stelle im Dokument beschreibt, wie man das Gerät ein einer UART-Schnittstelle betreibt. Du hast es aber an einer USB-Schnittstelle, wo es anscheinend wie eine normale Tastatur funktioniert.

Bitte das nächste Mal die exakte Fehlermeldung mit komplettem Traceback posten. Neben dem, dass es so wohl nicht funktioniert sind ser.open und ser.isOpen überflüssig. `write` erwartet einen Bytestream und keine Zahlen, Adressen gibt es bei einer seriellen Schnittstelle nicht.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Sirius3: man kann den auf einen seriellen port statt HID umstellen. Muss man natürlich machen.

@Spielebernd: Seite 58 beschreibt, wie die Daten zusammengebaut werden müssen, um das Register zu beschreiben.
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

Danke erstmal für deine schnelle Antwort. Soll also bedeuten das ich nur über UART den Scanner aktivieren kann?

Ich hätte dies „In command mode, scanner will begin scanning after receive the command from
MCU. (That is set bit0 to 1 on address 0x0000“ auf USB bezogen. Wobei ich nicht genau weiß was MCU bedeutet

Was bringt mir dann die Einstellung USB Virtual Port im Gegensatz zur normalen Einstellung?

Fehlermeldung posten Merk ich mir :-)
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

@__deets__ Danke. Ist das nicht für UART? Bzw dachte ich das is fürs lesen?

Aktuell liegt das Problem ja noch im Verbindungsaufbau ich weiß jetzt nicht ob ich eine Einstellung falsch gesetzt oder vergessen habe oder ob ich ihn Falsch anspreche.
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

Ihr merkt denke ich schon das ich diesbezüglich sehr wenig Ahnung habe.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast nur UART Zugriff wenn der im virtuellen Port Modus ist. Wenn der im HID Modus (also keyboard) ist, kannst du ihn nicht steuern. MCU bedeutet Mikrocontroller. Das ist in deinem Fall der PC.
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

Es gibt doch aber eine USB Virtual Port Einstellung und eine UART Einstellung. Also müsste doch eine Datenübertragung per USB auch möglich sein.

Ich frag mal anders UART hab ich noch nicht Versuch weil ich eigentlich die Bluetooth Schnittstelle noch brauche muss ich diese unbedingt abschalten bei UART? Sonst würde ich das mal versuchen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ist der UART IMMER da? Das Datenblatt ist mir da etwas unklar. Wenn ja, dann kann es sein, dass du den auch benutzen kannst. Ich wuerde es trotzdem ueber den virtuellen Port machen, denn die Sache mit dem Keyboard ist scheisse. Das wirkt erstmal cool, aber nur so lange, bis du EIngaben verlierst weil das Feld, das sie bekommen sollte, gerade keinen Fokus hatte. Das ist ein Notbehelf fuer Situationen, wo man urspruenglich mit der Tastatur gearbeitet hat. Mehr nicht.
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

Gute Frage ob der UART immer an ist hab ich noch nicht versucht.

Wie würde den die Kommunikation auf dem virtuellen Port aussehen?

Die Eingabe wollte ich erstmal beiseite schieben da diese ja erstmal funktioniert. Aber die wollte ich dann auch noch ändern da noch ein Touchscreen mit ins Spiel kommt. Aber das wie gesagt später. Jetzt würde ich gern erstmal hin bekommen das ich den Scanner per Programm aktiviere.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast meine Frage nicht beantwortet. Ich habe nicht gefragt ob der an ist. Sondern ob der DA ist.

Und die Kommunikation mit dem virtuellen seriellen Port ist genauso wie mit dem UART - das ist serial over USB. Wenn du das aktivierst, solltest du eine weitere serielle Schnittstelle sehen.
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

Sorry falsch gelesen. UART müsste ich noch anstecken wenn du das meinst ob ich aber beides anstecken kann glaub ich eher weniger.

Wie finde ich raus ob die hinzugekommen ist. Bzw wie spreche ich die dann an /dev/ttyUSBX geht ja nicht.
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

Nur zum besseren Verständnis ich habe an dem Scanner 2 Möglichkeiten Kabel anzubringen einen Mini USB und einmal die UART Verbindung.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich sehe an sich keinen Grund, warum man nicht theoretisch beides anstecken koennen sollte. Aber ich wuerde es auch nicht machen, als verfolgen wir das nicht weiter.

Und du musst rausbekommen, welches USB Geraet entsteht, wenn du deinen Scanner anstoepselst. Dazu zB die Ausgaben von "lsusb" oder "usb-devices" vor und nach dem anstecken vergleichen, und den Unterschied hier posten. Und zwar alles, nicht nur vendor/product-id.

Solange da kein /dev/ttyUSBX device entstanden ist, ist die Konfiguration als serielles Geraet noch nicht erfolgreich abgeschlossen.
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

lsusb liefert mit angesteckten Scanner:

Bus 001 Device 011: ID 2010:7638
Bus 001 Device 016: ID 045e:07a5 Microsoft Corp. Wireless Receiver 1461C
Bus 001 Device 015: ID 045e:0745 Microsoft Corp. Nano Transceiver v1.0 for Bluetooth
Bus 001 Device 014: ID 0483:5750 STMicroelectronics
Bus 001 Device 013: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

und ohne:

Bus 001 Device 016: ID 045e:07a5 Microsoft Corp. Wireless Receiver 1461C
Bus 001 Device 015: ID 045e:0745 Microsoft Corp. Nano Transceiver v1.0 for Bluetooth
Bus 001 Device 014: ID 0483:5750 STMicroelectronics
Bus 001 Device 013: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

also würde mich jetzt jetzt Device 11 der jenige welche sein warum er jetzt auf 11 geweckselt hat ist ne gute frage.

usb-devices bringt ohne scanner:

T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev=04.19
S: Manufacturer=Linux 4.19.57-v7+ dwc_otg_hcd
S: Product=DWC OTG Controller
S: SerialNumber=3f980000.usb
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=0mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 5
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=02 MxPS=64 #Cfgs= 1
P: Vendor=0424 ProdID=9514 Rev=02.00
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA
I: If#=0x0 Alt= 1 #EPs= 1 Cls=09(hub ) Sub=00 Prot=02 Driver=hub

T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0424 ProdID=ec00 Rev=02.00
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA
I: If#=0x0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=ff Driver=smsc95xx

T: Bus=01 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 13 Spd=480 MxCh= 4
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=1a40 ProdID=0101 Rev=01.11
S: Product=USB 2.0 Hub
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

T: Bus=01 Lev=03 Prnt=13 Port=00 Cnt=01 Dev#= 14 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0483 ProdID=5750 Rev=02.00
S: Manufacturer=深圳市全动电子技术有限公司
S: Product=ByQDtech 触控USB鼠标
S: SerialNumber=4986524D3634
C: #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid

T: Bus=01 Lev=03 Prnt=13 Port=01 Cnt=02 Dev#= 15 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=045e ProdID=0745 Rev=02.51
S: Manufacturer=Microsoft
S: Product=Microsoft® 2.4GHz Transceiver v6.0
C: #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
I: If#=0x1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
I: If#=0x2 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid

T: Bus=01 Lev=03 Prnt=13 Port=02 Cnt=03 Dev#= 16 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=045e ProdID=07a5 Rev=07.67
S: Manufacturer=Microsoft
S: Product=Microsoft® 2.4GHz Transceiver v9.0
C: #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
I: If#=0x1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
I: If#=0x2 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid

und mit:

T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev=04.19
S: Manufacturer=Linux 4.19.57-v7+ dwc_otg_hcd
S: Product=DWC OTG Controller
S: SerialNumber=3f980000.usb
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=0mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 5
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=02 MxPS=64 #Cfgs= 1
P: Vendor=0424 ProdID=9514 Rev=02.00
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA
I: If#=0x0 Alt= 1 #EPs= 1 Cls=09(hub ) Sub=00 Prot=02 Driver=hub

T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0424 ProdID=ec00 Rev=02.00
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA
I: If#=0x0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=ff Driver=smsc95xx

T: Bus=01 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 13 Spd=480 MxCh= 4
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=1a40 ProdID=0101 Rev=01.11
S: Product=USB 2.0 Hub
C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

T: Bus=01 Lev=03 Prnt=13 Port=00 Cnt=01 Dev#= 14 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0483 ProdID=5750 Rev=02.00
S: Manufacturer=深圳市全动电子技术有限公司
S: Product=ByQDtech 触控USB鼠标
S: SerialNumber=4986524D3634
C: #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid

T: Bus=01 Lev=03 Prnt=13 Port=01 Cnt=02 Dev#= 15 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=045e ProdID=0745 Rev=02.51
S: Manufacturer=Microsoft
S: Product=Microsoft® 2.4GHz Transceiver v6.0
C: #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
I: If#=0x1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
I: If#=0x2 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid

T: Bus=01 Lev=03 Prnt=13 Port=02 Cnt=03 Dev#= 16 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=045e ProdID=07a5 Rev=07.67
S: Manufacturer=Microsoft
S: Product=Microsoft® 2.4GHz Transceiver v9.0
C: #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
I: If#=0x1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
I: If#=0x2 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid

T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=03 Dev#= 17 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=2010 ProdID=7638 Rev=00.00
S: Manufacturer=USBKey Chip
S: Product=USBKey Module
S: SerialNumber=202730041341
C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=400mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid

den befehl kannte ich noch garnicht :-) wieder was gelernt.
also sieht es so aus als ob er als USBHIT läuft?
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

hier übrigends noch die Fehlermeldung:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 265, in open
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
FileNotFoundError: [Errno 2] No such file or directory: '/dev/ttyUSB8'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/pi/Desktop/test.py", line 7, in <module>
bytesize=serial.EIGHTBITS
File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 240, in __init__
self.open()
File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 268, in open
raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyUSB8: [Errno 2] No such file or directory: '/dev/ttyUSB8'
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na woher hast du denn das /dev/ttyUSB8? Und so wie das aussieht ist der im HID (nicht hit...) Modus. Was du ja einfach pruefen kannst: wenn du was scannst, gibt er das dann wie ueber die Tastatur ein? Dann musst du umschalten auf den virtuellen port modus.
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

USB8 hab ich aus dem Internet aber ich hab mal den Pfad nachvollzogen. Gibt es nicht ttyAMA0 bringt mir leider das der schon verwendet wird.

Das mit dem umstellen scheint so eine Sache zu sein hab es jetzt mehrmals versucht er gibt mir aber immer noch HID aus als erstes hab ich es so versucht anzu scannen dann mit dem Open Setting Code Funktion aber irgendwie scheint er nicht zu wollen über seh ich da was?

Ja er schreibt ganz normal auf die Konsole.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie gesagt, dann ist er eben im HID-Modus, und du musst rausfummeln wie der umzustellen ist. Alternativ kannst du dir auch ein FTDI-USB2UART-Kabel holen & das anschliessen, wenn dir dein UART am PI heilig ist.
Spielebernd
User
Beiträge: 14
Registriert: Mittwoch 28. August 2019, 20:26

Heilig is bisschen übertrieben. Aber da steckt erstes noch ein 3,5 Zoll TFT drauf und dann wollte ich Bluetooth behalten. Wenn du jetzt sagst ich kann Bluetooth Anlassen dann kann ich auch auf Uart gehen. Ne andere Frage wäre noch wenn /dev/ttyUSB falsch ist wie würde man den generell so eine serielle USB Verbindung ansprechen?
Antworten