Python - Lector USB

 
Vista:
sin imagen de perfil

Lector USB

Publicado por Alberto (5 intervenciones) el 12/11/2013 18:55:14
Hola!!!

Soy nuevo por aquí y quisiera ver si me podeis ayudar.

Tengo entre manos una aplicación para leer los datos de una pistola de codigo de barras (que al fin y al cabo es como un teclado USB).

La cuestión es que debo de leer lo que viene por el puerto, he visto que con pyUSB esta interface ya esta resuelta, pero la cuestión es que no se como usar este módulo.

He encontrado esta información por internet, pero como nunca he programado en python nose descifrarla.

http://www.forosdelweb.com/f130/multiples-dispositivos-hid-usb-976759/
http://pastebin.com/3gdvENp1

Alguien me puede ayudar o orientar por donde empezar.

Ya tengo instalado todos los modulos y con esta líneas de comandos:

import usb.core
lectoras = usb.core.find(find_all=True)
detected = [usb.util.get_string(lectora, length=17, index=2, langid=0x0409) for lectora in lectoras]
print detected

Me saca el nombre de mi pistola de codigo de barras (honneywell) así que supongo que estoy accediendo a ese puerto, pero ya nose como hacer para leer los datos que vienen por ahi.

Muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Lector USB

Publicado por xve (1646 intervenciones) el 12/11/2013 21:14:57
Hola Alberto, seria algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import usb.core
lectoras = usb.core.find(find_all=True)
detected = [usb.util.get_string(lectora, length=17, index=2, langid=0x0409) for lectora in lectoras]
print detected
 
for reader in lectoras:
    endpoint = reader[0][(0,0)][0]
    readed = False
    data = []
    datalist = []
        for i in range(22):
            data = reader.read(endpoint.bEndpointAddress, endpoint.wMaxPacketSize, timeout=10000000)
            datalist.append(data)
            print data

Esto debería de mostrarte lo que va leyendo en formato lista.

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Lector USB

Publicado por Alberto (5 intervenciones) el 13/11/2013 08:55:18
Hola xve.

Muchas gracias por contestar.

Me saltan una serie de errores que te adjunto en la imagen.

Como ves con el primer print si que me detecta el lector. Luego ya da un error en la linea 11. Y los demas errores parecen venir de la libería pyUSB ¿no?

Aún así el codigo no entiendo muy bien que hace. Me podrías explicar en concreto las líneas.
-endpoint = reader[0][(0,0)][0]
- data = reader.read(endpoint.bEndpointAddress, endpoint.wMaxPacketSize, timeout=10000000) (ESTA ES MI LINEA 11 EN LA QUE ME SALTA EL ERROR)

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Lector USB

Publicado por Alberto (5 intervenciones) el 13/11/2013 09:21:42
Estas son las cosas que instale, por si puede venir de aqui el error, por incopatibilidades o algo.

pyusb-1.0.0a2
libusb-win32-devel-filter-1.2.2.0
libusb-win32-bin-1.2.2.0

En que sitio puedo documentarme profundamente acerca de la comunicación con USB. Yo siempre he trabajado con puerto serie en VB6 y esto es muy nuevo para mí.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Lector USB

Publicado por Alberto (5 intervenciones) el 14/11/2013 18:48:06
Muy buenas tardes.

Sigo comentando un poco mas mis experiencias. Con ese código que tu pones y sin la segunda linea ahora me lee los datos que mete mi pistola de codigo de barras (no he hecho nada nuevo, pero de repente me ha empezado a funcionar, cruzo los dedos para que siga funcionando). Sin embargo, hace una lectura incompleta, es decir.

Si tendría que leer un 0002956384
Me lee un número incompleto normalmente suele ser 02534 como veis son números alternados, así que pienso que puede ser por algo de temporizaciones.

¿Que opinais? A pesar de que ahora me funcione, me gustaría saber a que se deben esos errores ¿alguien sabe?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lector USB

Publicado por jose criollo (2 intervenciones) el 02/08/2015 19:14:08
tienes varias opciones para trabajar con el usb
si eres nuevo en python te recomiendo trabajar en algo mas facil como puede ser visual basic , visual c o delphi
para esto hay un buen programa llamado EasyHid el cual te genera directamente el codigo donde puedes escoger los lenguajes de programacion adicionalmente tambien te genera el codigo en basic con el que manejaras un microcontrolador del tipo pic 18f2455, 18f2550, 18f4455, 18f4550 el cual puedes modificar en unas plantillas elaboradas con el programa proton, donde deberas installar la libreria hid.dll en la carpeta system 32 si manejas Windows. Puedes descargar un libro con informacion conmpleta del puerto usb en http://s.eeweb.com/members/mark_harrington/answers/1333179451-USB_Complete_3rdEdition.pdf
para el caso de python hay buena informacion en https://mail.python.org/pipermail/python-es/2008-October/022790.html
tambien hay un excelente tutorial de un amigo en mexico direccion https://protonbasic.wordpress.com/author/electrobicho/. si tu sistema operativo es linux el manejo de puertos es mas facil
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar