在Python上通过UART从二维码扫描仪获取信息时出现问题

问题描述 投票:0回答:1

我有二维码和条形码阅读器 GM875。我通过 uart 将其连接到树莓派 4 model b,并编写了 python 代码来获取结果,但它无法正常工作。从我的脚本中我得到错误的数据字节,如下所示:

Barcode Data: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...'
Barcode Data: b'\xe0\xe0\xe0\x00\xe0\xe0\x00\xe0\xe0\x00\xe0\xe0\xe0\x00\xe0\xe0\xe0\x00\xe0\xe0\x00\x00\xe0\xe0\x00\xe0\xe0\xe0\x00\xe0\xe0\xe0\x00\x00\xe0\x00\xe0\xe0\xe0\x00\x00\x00\xe0\x00\xe0\xe0\x00\x00\x00\xe0\xe0\xe0\xe0\x00\x00\xe0...'
Barcode Data: b'\xf8x\x00x\x80x\x00\xf8x\x80xxx\x80\x80x\x00\xf8x\x80x\xf8\x80\x80\xf8\x00xx\x80\x00x\xf8x\x80\x80xx\x80\x80x\x80xx\x80\x00\x80xxx\x80x\x00xx\x80x\x80xxxxx\xf8xxxxx\x80xx\x80x\x80\x80\x80\x00xxx\x80xxx\x00xx\x80\xf8x\xf8\x80x\xf8xxxx\x80x\x00x\x80x\x00x\x00x\xf8\x80\xf8\x00x\x00x\xf8\x00x\xf8xx\x80\x80x\x80\x80\x80xx\x80\xf8\xf8x\x80x\x00x\x00\x80xx\x80\x80\x80\x00\xf8x\xf8x\x80x\x00x\xf8xx\x80x\x80xxx\x80xx\x80x\xf8x\x80x\x00xxx\xf8x\x80\xf8xxx\xf8x\xf8x\xf8\x80x\x80x\x00'
Barcode Data: b'\xa5\xacj\x85\xd1\xb3\xe6]\xa6/\x92\x85\xae%J\x95\x91\xa4N\xd6I\xe1\xaf\x14\x89\x8a\x12\xe9\xa49\x14\xa5\x95\xa8\xd5\xe9\xa7v\x99\xb7L5\xe9\xb0\x8e\xb2M\xb7\xf6e\xb9&\x97+\x91\xb6\xa5\x8a\xa9\xa1\xba\x16\x95\xf9\xa9\xd5ku\x9d\xe3'      

但是经过几次扫描后我得到了正确的数据:

Barcode Data: b'zcYlSQRlS3C/Fz0jIN+LVSTdre/ux/QJN9FjdeDPvMhPyrGdcF7cQczp99f+wfG1Y2tlsDvxYJ/jHzgQqniVnw==\n'

在正确的数据识别脚本停止后出现此错误:

    Traceback (most recent call last):
      File "/home/pi/qrcode_project/qrcode_rpi/t1.py", line 24, in <module>
        read_from_scanner()
      File "/home/pi/qrcode_project/qrcode_rpi/t1.py", line 13, in read_from_scanner
        if ser.in_waiting > 0:
           ^^^^^^^^^^^^^^
      File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 549, in in_waiting
        s = fcntl.ioctl(self.fd, TIOCINQ, TIOCM_zero_str)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    OSError: [Errno 5] Input/output error

这不是阅读器的问题,它可以在 ESP32 上正常工作,但在树莓派和 python 上有这个问题。我还允许在 RPI 上使用 uart

这是我使用的最简单的代码:

import serial

# Configure the serial connection (adjust parameters as needed)
ser = serial.Serial(
    port='/dev/serial0',  # Use /dev/serial0 for the Raspberry Pi UART
    baudrate=9600,        # Adjust baudrate to match your barcode reader's settings
    timeout=1             # Timeout in seconds for read operations
)

def read_from_scanner():
    try:
        while True:
            if ser.in_waiting > 0:
                # Read data from the barcode scanner
                data = ser.readline()
                if data:
                    print(f"Barcode Data: {data}")
    except KeyboardInterrupt:
        print("Program interrupted. Closing..")
    finally:
        ser.close()

if __name__ == "__main__":
    read_from_scanner()

我尝试在 C++ 上编写代码,但它也显示错误的数据,如 python 代码

python raspberry-pi barcode-scanner pyserial
1个回答
0
投票

这个答案对我有帮助 该错误消息表明这是硬件或驱动程序级别的问题。如果您看到“错误数据”,则可能表明您没有对 UART 的独占控制权。您是否在 raspi-config 中禁用了串行控制台?看到该错误后,您可以通过运行 sudo dmesg Linux 命令来显示内核日志来获取更多调试信息。检查最近是否提及串行或 uart,或任何其他似乎相关的错误

© www.soinside.com 2019 - 2024. All rights reserved.