Как динамически получить имя, назначенное последовательному порту, к которому подключен считыватель RFID - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь прочитать данные из считывателя RFID и сохранить данные в файле журнала через Raspberry Pi.

Но иногда возникает ошибка: dev / ttyUSB0 не найден, и когда я проверяю присвоение имени порту с помощью команды "dmesg | grep tty", имена меняются на "ttyUSB1 или ttyUSB2", поэтому мне нужно каждый раз менять код.

Есть ли какое-то решение для этого?

Заранее спасибо.

1 Ответ

0 голосов
/ 03 марта 2019

Вы можете использовать такой код, чтобы узнать, какое устройство подключено к какому порту:

#!/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 ...) и поиск по ключевому слову вашего устройства.

...