如何将名称动态分配给 RFID 阅读器连接的串行端口

Posted

技术标签:

【中文标题】如何将名称动态分配给 RFID 阅读器连接的串行端口【英文标题】:How to get the name assign to the serial port dynamically on which RFID reader connected 【发布时间】:2018-05-15 13:27:12 【问题描述】:

我正在尝试从 RFID 阅读器读取数据并通过 Raspberry Pi 将数据存储在日志文件中。

但有时会发生错误 dev/ttyUSB0 not found,当我使用“dmesg | grep tty”命令检查分配给端口的名称时,名称会更改为“ttyUSB1 或 ttyUSB2”,因此我每次都需要更改代码。

这个有什么解决办法吗?

提前致谢。

【问题讨论】:

Change default names for USB virtual serial ports in Linux的可能重复 askubuntu.com/q/49910/118098 【参考方案1】:

您可以使用类似这样的代码来了解哪个设备连接到哪个端口:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import subprocess, os

def getUSBName(devSerial):
   if(os.path.exists(devSerial)==False):
       return "No USB"
   dataAttributes = subprocess.Popen("udevadm info --name=" + devSerial + " --attribute-walk", shell=True, stdout=subprocess.PIPE).stdout.read().decode('utf-8').split('\n')

    for at in dataAttributes:
        if(at.find("busnum")!=-1):
            bus = at.replace(" ", "")[-2].zfill(3)
            #print("bus = " + bus);
            break

    for at in dataAttributes:
        if(at.find("devnum")!=-1):
            device = at.replace(" ", "")[-2].zfill(3)
            #print("device = " + device)
            break

    dataUSB = subprocess.Popen("lsusb", shell=True, stdout=subprocess.PIPE).stdout.read().decode('utf-8').split('\n')

    searchline = "Bus " + bus + " Device " + device + ":"

    for usb in dataUSB:
        if usb.find(searchline)!=-1:
            return usb



devSerial = "/dev/ttyUSB0"

print(getUSBName(devSerial))

然后您可以扫描一些端口(/dev/ttyUSB0、/dev/ttyUSB1、/dev/ttyUSB2...)并使用关键字搜索您的设备。

【讨论】:

以上是关于如何将名称动态分配给 RFID 阅读器连接的串行端口的主要内容,如果未能解决你的问题,请参考以下文章

Linux 上的串行通信连接

如何在 C++ 中同时连接 2 个 RFID 阅读器? [关闭]

在 Windows 10 中禁用 Python 上的 USB 设备

iOS:动态创建并分配名称给 UIControl

Socket是如何通信的?

如何将相同的事件侦听器分配给 Vue.js 中动态创建的按钮并将对象的值作为参数传递给它?