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 |
인터페이스별 설명. |
참고: 지원은 일부 운영 체제로 제한됩니다.
description
및hwid
는 모든 시스템에서 사용하지 못할 수 있습니다.
이제 이름
, 설명
, 제조업체
및 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
에 대해 유사한 함수를 구성할 수 있습니다.