当前位置: 首页 > Linux

RaspberryPi连接到NewlandScanner

时间:2023-04-06 11:14:59 Linux

最常用的扫描仪通常只是一个简单的输入设备(如键盘、鼠标),另一端需要连接到电脑上,使用usb或串口。扫描枪负责识别条码,电脑接收后执行业务逻辑。有时只是简单的数据采集工作,将数据传输到服务器云端;所用设备配备USB接收器进行无线扫描,请使用条码扫描枪(本案例以新大陆OY26-RF无线扫描枪为例)。我们将使用树莓派4b转到python-evdev库,它封装了对usb设备的读写操作。官网https://python-evdev.readthedocs.io/Installevdevsudopipinstallevdevdetectiondevice将扫描仪的无线接收器插入树莓派USB口,在树莓派上新建一个python文件,复制下面的代码,执行它,检查是否可以找到设备#!/usr/bin/python3importevdev#Listusbdevicesdevices=[evdev.InputDevice(path)forpathinevdev.list_devices()]print('Discoveringdevices:')fordeviceindevices:print(device.path,device.name,device.phys)执行结果如下,表示找到设备:/dev/input/event0Netum.HIDKBusb-0000:01:00.0-1.3/input0修改扫码器配置,增加结束字符后缀。扫码器连接设备后,默认是通过键盘访问设备。读取二维码时,是一个字符一个字符地扫描,默认不在扫码中添加结束字符后缀,程序无法确认扫码是否完成。使用条码扫描枪时需要加上结束符来区分下面的条码(如果一次失败),可以多次扫描条码。添加TAB结束符;根据找到的scanner设备信息,调用scannerimportevdevimporttimeimportfindScanGunfromevdevimportInputDevice,categorize,ecodesclassScanGun:dev=findScanGun.find()device=InputDevice(dev)#mykeyboardscancodes={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:无,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'}#是否大小写,默认为小写caps=False#setupvarsx=''#grab独占使用,保证这个设备不会被其他进程捕获device.grab()defrun(self):start=time.time()foreventinself.device.read_loop():ifevent.type==ecodes.EV_KEY:data=categorize(event)#暂时保存事件以自省#判断是否关键是SHIFT,如果是SHIFTLive,需要大写锁定,如果事件被释放,解锁大写锁定ifdata.scancode==42:ifdata.keystate==1:caps=Trueifdata.keystate==0:如果数据为.keystate,则caps=False==1:#判断是否按下SHIFT键,如果按下则读取大写字母ifself.caps:key_lookup=self.capscodes.get(data.scancode)else:key_lookup=self.scancodes.get(data.scancode)#SHFT、CTRL、TAB为特殊键,不计入扫码内容结果if(data.scancode!=42)and(data.scancode!=28)and(data.scancode!=15):self.x+=key_lookupif(data.scancode==15):print("Endofidentification:",time.time()-start)#解除设备垄断,关闭设备self.device.ungrab()self.device.close()#全部打印出来!returnself.x;scangun=ScanGun()list=scangun.run()打印(列表)