如何在Python中读取多个串行输入?

2024-04-24 21:28:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试读取Python中访问控制脚本的两个串行端口。 一个串口有一个RFID阅读器,另一个有一个条形码阅读器。 我希望用户出示他的卡,无论是条形码还是RFID,以及验证访问权限的脚本。你知道吗

serRFID = serial.Serial(
  port = '/dev/ttyUSB0',
  baudrate = 9600,
  parity = serial.PARITY_NONE,
  stopbits = serial.STOPBITS_ONE,
  bytesize = serial.EIGHTBITS,
  timeout = 10)

serBARC = serial.Serial(
  port = '/dev/ttyACM0',
  baudrate = 38400,
  parity = serial.PARITY_NONE,
  stopbits = serial.STOPBITS_ONE,
  bytesize = serial.EIGHTBITS,
  timeout = None)

def readtag():
  global tag_inp
  serBARC.reset_input_buffer()
  tag_inp = ""
  while tag_inp == "":
    read_byte1 = serBARC.read(11)
    if len(read_byte1) == 11:
      tag_inp = read_byte1

上面的工作,但显然只有条形码阅读器。如果我在“readtag”定义中改为serRFID而不是serBARC,它也可以工作,但我希望两者都被读取,并且只有返回数据(RFID或条形码)的一个被存储为“tag\u inp”


Tags: dev脚本readporttagserialrfid阅读器
1条回答
网友
1楼 · 发布于 2024-04-24 21:28:05
read_byte1 = serBARC.read(11)

这是一个阻塞调用,将无限期地等待,直到从端口读取11位。 您可以改为添加一个超时,然后对另一个端口执行相同的操作:

read_byte1 = serBARC.read(11, timeout=5) # 5 seconds, tweak the timeout as per your liking
read_byte2 = serRFID.read(11, timeout=5)

或者,您可以在创建两个串行对象时指定超时,就像您已经为RFID端口所做的那样。然后您可以在循环中调用read,正如我上面所示,但不需要指定超时。你知道吗

然后可以继续检查read_byte1read_byte2中的哪一个具有所需的长度。你知道吗

相关问题 更多 >