YOGYUI

PyQt Serial Port List 본문

Software/Python

PyQt Serial Port List

요겨 2021. 1. 7. 01:04
반응형

- requires: PyQt5

 

PyQt5의 QtSerialPort 모듈로 현재 장비에서 접근 가능한 시리얼 포트를 리스트업해보자

공식 API 문서는 다음을 참고

https://doc.qt.io/qt-5/qtserialport-index.html

https://doc.qt.io/qt-5/qserialportinfo.html

from typing import List, Dict, Union
from PyQt5 import QtSerialPort

def list_serial() -> List[Dict[str, Union[str, int, bool]]]:
    available = QtSerialPort.QSerialPortInfo().availablePorts()
    lst = [{
        'port': x.portName(),
        'manufacturer': x.manufacturer(),
        'description': x.description(),
        'serialnumber': x.serialNumber(),
        'systemlocation': x.systemLocation(),
        'productidentifier': x.productIdentifier(),
        'vendoridentifier': x.vendorIdentifier(),
        'isbusy': x.isBusy(),
        'isvalid': x.isValid()
        } for x in available]
    return lst

if __name__ == '__main__':
    serial_list = list_serial()
    for elem in serial_list:
        print('{')
        for i, (key, value) in enumerate(elem.items()):
            print("    '{}': '{}'".format(key, value), end='')
            if i == len(elem.items()) - 1:
                print('')
            else:
                print(',')
        print('}')

결과 예시 (Raspberry pi에서 구동)

{
    'port': 'ttyUSB2',
    'manufacturer': 'FTDI',
    'description': 'FT232R USB UART',
    'serialnumber': 'AG0KADO0',
    'systemlocation': '/dev/ttyUSB2',
    'productidentifier': '24577',
    'vendoridentifier': '1027',
    'isbusy': 'False',
    'isvalid': 'True'
},
{
    'port': 'ttyUSB3',
    'manufacturer': 'FTDI',
    'description': 'FT232R USB UART',
    'serialnumber': 'AG0KAJ76',
    'systemlocation': '/dev/ttyUSB3',
    'productidentifier': '24577',
    'vendoridentifier': '1027',
    'isbusy': 'False',
    'isvalid': 'True'
},
{
    'port': 'ttyAMA0',
    'manufacturer': '',
    'description': '',
    'serialnumber': '',
    'systemlocation': '/dev/ttyAMA0',
    'productidentifier': '0',
    'vendoridentifier': '0',
    'isbusy': 'False',
    'isvalid': 'True'
},
{
    'port': 'ttyS0',
    'manufacturer': '',
    'description': '',
    'serialnumber': '',
    'systemlocation': '/dev/ttyS0',
    'productidentifier': '0',
    'vendoridentifier': '0',
    'isbusy': 'False',
    'isvalid': 'True'
}

파이썬 + PyQt5 로 플랫폼에 상관없이 시리얼 포트 리스트업 가능

반응형