How get the usb barcode scanner input into python in Raspberry pi 4

I am trying the get a usb barcode reader input in python so I used this code

#thanks to #thanks to from evdev import InputDevice, categorize, ecodes scancodes = { # Scancode: ASCIICode 0: None, 1: u'ESC', 2: u'1', 3: u'2', 4: u'3', 5: u'4', 6: u'5', 7: u'6', 8: u'7', 9: u'8', 10: u'9', 11: u'0', 12: u'-', 13: u'=', 14: u'BKSP', 15: u'TAB', 16: u'q', 17: u'w', 18: u'e', 19: u'r', 20: u't', 21: u'y', 22: u'u', 23: u'i', 24: u'o', 25: u'p', 26: u'[', 27: u']', 28: u'CRLF', 29: u'LCTRL', 30: u'a', 31: u's', 32: u'd', 33: u'f', 34: u'g', 35: u'h', 36: u'j', 37: u'k', 38: u'l', 39: u';', 40: u'"', 41: u'`', 42: u'LSHFT', 43: u'\\', 44: u'z', 45: u'x', 46: u'c', 47: u'v', 48: u'b', 49: u'n', 50: u'm', 51: u',', 52: u'.', 53: u'/', 54: u'RSHFT', 56: u'LALT', 57: u' ', 100: u'RALT' } capscodes = { 0: None, 1: u'ESC', 2: u'!', 3: u'@', 4: u'#', 5: u'$', 6: u'%', 7: u'^', 8: u'&', 9: u'*', 10: u'(', 11: u')', 12: u'_', 13: u'+', 14: u'BKSP', 15: u'TAB', 16: u'Q', 17: u'W', 18: u'E', 19: u'R', 20: u'T', 21: u'Y', 22: u'U', 23: u'I', 24: u'O', 25: u'P', 26: u'{', 27: u'}', 28: u'CRLF', 29: u'LCTRL', 30: u'A', 31: u'S', 32: u'D', 33: u'F', 34: u'G', 35: u'H', 36: u'J', 37: u'K', 38: u'L', 39: u':', 40: u'\'', 41: u'~', 42: u'LSHFT', 43: u'|', 44: u'Z', 45: u'X', 46: u'C', 47: u'V', 48: u'B', 49: u'N', 50: u'M', 51: u'<', 52: u'>', 53: u'?', 54: u'RSHFT', 56: u'LALT', 57: u' ', 100: u'RALT' } def readBarcode(devicePath): dev = InputDevice(devicePath) dev.grab() # grab provides exclusive access to the device x = '' caps = False for event in dev.read_loop(): if event.type == ecodes.EV_KEY: data = categorize(event) # Save the event temporarily to introspect it if data.scancode == 42: if data.keystate == 1: caps = True if data.keystate == 0: caps = False if data.keystate == 1: # Down events only if caps: key_lookup = u'{}'.format(capscodes.get(data.scancode)) or u'UNKNOWN:[{}]'.format(data.scancode) # Lookup or return UNKNOWN:XX else: key_lookup = u'{}'.format(scancodes.get(data.scancode)) or u'UNKNOWN:[{}]'.format(data.scancode) # Lookup or return UNKNOWN:XX if (data.scancode != 42) and (data.scancode != 28): x += key_lookup if(data.scancode == 28): return(x) readBarcode("/home/pi/.local/lib/python3.7/site-packages/evdev/device.py") 

I am getting this error

Traceback (most recent call last):   File "/home/pi/.local/lib/python3.7/site-packages/evdev/device.py", line 125, in init     fd = os.open(dev, os.O_RDWR | os.O_NONBLOCK) FileNotFoundError: [Errno 2] No such file or directory: '/dev/input/ev'

What is causing this error and how can I fix it?

2 Answers

devicePath should be a path to the device (i.e. barcode scanner) on your RPi. It seems that you have set this to some file called device.py. Try following the instructions Here to get a list of available devices then use that device path as devicePath.

If you look at the examples on the page I referenced, you'll see that a devicePath should look like /dev/input/event1 or something. Not a file path.

Thanks for your code help me in my project, but please switch input 40 because double commas are with shift pressed now on capscodes at 40: u'\'' are single commas. I added dev.ungrab() on program

if(data.scancode == 28): dev.ungrab() return(x) 

because when I call the function I got error "Device or resource busy"

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like