Python을 사용하여 직렬 포트 나열

Neha Imran 2023년6월21일
  1. COM 포트에 대한 간략한 소개
  2. Python에서 사용 가능한 직렬 포트 목록 가져오기
  3. 세부 정보와 함께 직렬 포트 목록 가져오기
  4. 이름으로 직렬 포트 검색
Python을 사용하여 직렬 포트 나열

이 기사에서는 직렬 또는 com 포트를 사용한 통신에 대해 설명합니다. 시스템의 사용 가능한 통신 포트를 얻는 데 도움이 되는 Python 패키지를 자세히 살펴보겠습니다.

나중에 Python을 사용하여 사용 가능한 직렬 포트에 대한 자세한 정보를 검색하고 가져오는 몇 가지 기술을 검토할 것입니다.

COM 포트에 대한 간략한 소개

COM 포트는 직렬 장치를 컴퓨터에 연결할 수 있게 해주는 I/O 인터페이스입니다. 통신 포트의 짧은 형태입니다.

COM 포트는 직렬 포트라고도 합니다. COM 포트는 새 컴퓨터와 장치에서 더 이상 일반적으로 사용되지 않지만 많은 오래된 직렬 포트 장치가 여전히 사용되고 있습니다.

따라서 때때로 직렬 통신을 수행하고 여러 직렬 작업을 위해 이러한 포트를 나열해야 할 수 있습니다.

Python에서 사용 가능한 직렬 포트 목록 가져오기

때때로 프로그래밍하는 동안 시스템에서 사용 가능한 통신 포트에 대한 정보를 얻어야 합니다. Python을 사용하여 이 작업을 수행하는 방법에 대해 논의할 것입니다.

Python은 직렬 포트 및 관련 정보에 대한 액세스를 제공하는 pySerial 모듈을 제공합니다. 먼저 pySerial 패키지를 프로젝트에 설치해야 해당 기능을 쉽게 사용할 수 있습니다.

패키지를 설치하려면 Python 명령 터미널에 pip install pyserial을 입력하고 Enter를 눌러야 합니다. 패키지를 사용할 수 있습니다.

이제 직렬 포트를 나열하는 다음 코드를 살펴보겠습니다.

import serial.tools.list_ports

ports = []
for port in serial.tools.list_ports.comports():
    ports.append(port.name)
print(ports)

출력:

['COM1']

코드에서 수행한 작업에 대해 논의해 보겠습니다. 설치된 패키지를 사용하려면 import serial을 작성해야 합니다.

pySerial 패키지에는 사용 가능한 COM 포트 목록을 반환하는 comports() 메서드가 있습니다. 이 목록의 각 개체는 ListPortInfo 유형입니다.

ListPortInfo 개체가 무엇을 보유하고 있는지 기사의 뒷부분에서 논의할 것입니다.

comports() 함수는 tools에 있는 list_ports, 모듈에 있습니다. 따라서 import serial.tools.list_ports를 작성하여 전체 모듈을 가져옵니다.

그런 다음 comports() 함수가 반환한 목록에서 for 루프를 실행하고 목록에 포트를 추가합니다.

위의 코드는 Python list comprehension을 사용하여 더 간단하게 작성할 수 있습니다. 출력은 두 코드 모두 동일합니다. 방법은 다음과 같습니다.

import serial.tools.list_ports

print([port.device for port in serial.tools.list_ports.comports()])

세부 정보와 함께 직렬 포트 목록 가져오기

논의한 대로 comports() 함수는 포트 목록을 반환하고 목록의 각 개체는 ListPortInfo 유형입니다. 이 개체는 직렬 포트에 대한 정보를 보유하고 장치(전체 이름/경로), 설명 및 직렬 포트의 hwid를 검색하기 위한 인덱싱된 액세스를 제공합니다.

인덱스 0은 장치의 값을 제공하고 설명은 인덱스 1에 있으며 인덱스 2는 포트의 hwid를 공유합니다.

다음은 ListPortInfo 개체가 COM 포트에 대해 제공할 수 있는 자세한 정보입니다.

물체 설명
device 전체 장치 이름/경로. 인덱스에서 액세스할 때 첫 번째 요소로 반환됩니다.
name 짧은 장치 이름.
description 사람이 읽을 수 있는 설명. 인덱스에서 액세스할 때 두 번째 요소로 반환됩니다.
hwid 하드웨어 ID. 이는 인덱스에서 액세스할 때 세 번째 요소로 반환됩니다.
vid USB 공급업체 ID.
pid USB 제품 ID.
serial_number USB 일련 번호(문자열).
location USB 장치 위치 문자열.
manufacturer 장치에서 보고한 USB 제조업체 문자열입니다.
product 장치에서 보고한 USB 제품 문자열입니다.
interface 인터페이스별 설명.

참고: 지원은 일부 운영 체제로 제한됩니다. descriptionhwid는 모든 시스템에서 사용하지 못할 수 있습니다.

이제 이름, 설명, 제조업체hwid와 함께 사용 가능한 모든 COM 포트 목록을 가져오는 코드를 작성해 보겠습니다.

import serial.tools.list_ports

port_data = []
for port in serial.tools.list_ports.comports():
    info = dict(
        {
            "Name": port.name,
            "Description": port.description,
            "Manufacturer": port.manufacturer,
            "Hwid": port.hwid,
        }
    )
    port_data.append(info)
print(port_data)

출력:

[{'Name': 'COM1', 'Description': 'Communications Port (COM1)', 'Manufacturer': '(Standard port types)',
  'Hwid': 'ROOT\\PORTS\\0000'}]

이름으로 직렬 포트 검색

이 기능은 컴퓨터에 여러 개의 포트가 있을 때 유용합니다. 특정 포트가 필요한 경우 선택에 따라 이름이나 설명으로 검색할 수 있습니다.

주어진 이름의 포트를 반환하는 함수를 파이썬으로 만들어 봅시다.

import serial.tools.list_ports


def get_port_by_name(port_name):
    for port in serial.tools.list_ports.comports():
        if port.name == port_name:
            return port


print(get_port_by_name("COM1").description)

출력:

Communications Port (COM1)

코드는 이해하기 쉽습니다. 우리 함수에서 for 루프는 comports() 함수가 반환한 포트 목록에서 실행됩니다.

사용자 입력과 일치하는지 확인하기 위해 루프 내부의 각 포트 이름을 확인합니다. 그렇다면 해당 포트를 반환합니다.

설명을 확인하여 포트를 반환하는 description에 대해 유사한 함수를 구성할 수 있습니다.