Raspberry Pi 樹莓派 USB Barcode 掃瞄並讀取 QRCode for Python3
所需設備
- Raspberry Pi 樹莓派並安裝好官方系統。
- USB Barcode 手持掃瞄器。
查看 USB 裝置
查看 USB 裝置:
lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 1fc9:5aa7 NXP Semiconductors WCM Keyboard
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
查看裝置名稱 (最後的數字會隨插入優先序流水號遞增)
sudo ls -a /dev | grep hidraw*hidraw0
掃瞄後讀取資訊
新增檔案 usb-barcode-scanner.py,撰寫程式碼:
#!/usr/bin/python
import sys
def barcode_reader():
    hid = {4: 'a', 5: 'b', 6: 'c', 7: 'd', 8: 'e', 9: 'f', 10: 'g', 11: 'h', 12: 'i', 13: 'j', 14: 'k', 15: 'l', 16: 'm',
           17: 'n', 18: 'o', 19: 'p', 20: 'q', 21: 'r', 22: 's', 23: 't', 24: 'u', 25: 'v', 26: 'w', 27: 'x', 28: 'y',
           29: 'z', 30: '1', 31: '2', 32: '3', 33: '4', 34: '5', 35: '6', 36: '7', 37: '8', 38: '9', 39: '0', 44: ' ',
           45: '-', 46: '=', 47: '[', 48: ']', 49: '\\', 51: ';', 52: '\'', 53: '~', 54: ',', 55: '.', 56: '/'}
    hid2 = {4: 'A', 5: 'B', 6: 'C', 7: 'D', 8: 'E', 9: 'F', 10: 'G', 11: 'H', 12: 'I', 13: 'J', 14: 'K', 15: 'L', 16: 'M',
            17: 'N', 18: 'O', 19: 'P', 20: 'Q', 21: 'R', 22: 'S', 23: 'T', 24: 'U', 25: 'V', 26: 'W', 27: 'X', 28: 'Y',
            29: 'Z', 30: '!', 31: '@', 32: '#', 33: '$', 34: '%', 35: '^', 36: '&', 37: '*', 38: '(', 39: ')', 44: ' ',
            45: '_', 46: '+', 47: '{', 48: '}', 49: '|', 51: ':', 52: '"', 53: '~', 54: '<', 55: '>', 56: '?'}
    # 第一個參數:掃瞄器裝置,第 2 個參數:r 讀取、b 二進位
    fp = open('/dev/hidraw0', 'rb') #Just have a look there if you can see something
    str = ""
    shift = False
    done = False
    while not done:
        # Get the character from the HID
        buffer = fp.read(8)  # 取得 8 個字元
        for c in buffer:
            # https://stackoverflow.com/questions/19897209/troubleshooting-typeerror-ord-expected-string-of-length-1-but-int-found
            # if ord(c) > 0:
            if c > 0:
                #  40 is carriage return which signifies
                #  we are done looking for characters
                # 40 = Enter
                if int(c) == 40:
                    done = True
                    break;
                #  If we are shifted then we have to
                #  use the hid2 characters.
                if shift:
                    # If it is a '2' then it is the shift key
                    if int(c) == 2:
                        shift = True
                    # if not a 2 then lookup the mapping
                    else:
                        str += hid2[int(c)]
                        shift = False
                #  If we are not shifted then use
                #  the hid characters
                else:
                    # If it is a '2' then it is the shift key
                    if int(c) == 2:
                        shift = True
                    # if not a 2 then lookup the mapping
                    else:
                        str += hid[int(c)]
    print(str)
if __name__ == '__main__':
    try:
        while True:
            barcode_reader()
    except KeyboardInterrupt:
        pass參考
 
                            本著作係採用創用 CC 姓名標示-相同方式分享 3.0 台灣 授權條款授權.
 
                    