Listar puertos serie usando Python

Neha Imran 21 junio 2023
  1. Breve introducción a los puertos COM
  2. Obtenga una lista de puertos serie disponibles en Python
  3. Obtenga una lista de puertos serie junto con sus detalles
  4. Buscar un puerto serie por nombre
Listar puertos serie usando Python

En este artículo, analizaremos las comunicaciones mediante puertos seriales o com. Exploraremos los paquetes de Python en profundidad para ayudarnos a obtener los puertos de comunicación disponibles de nuestro sistema.

Más adelante, revisaremos algunas técnicas para usar Python para buscar y obtener información detallada sobre los puertos seriales disponibles.

Breve introducción a los puertos COM

Un puerto COM es una interfaz de E/S que permite conectar un dispositivo serie a una computadora. Es una forma abreviada de puerto de comunicación.

Los puertos COM también se denominan a veces puertos serie. Los puertos COM ya no se usan comúnmente en computadoras y dispositivos nuevos, pero muchos dispositivos de puerto serie antiguos todavía están en uso.

Por lo tanto, a veces es posible que necesitemos hacer una comunicación en serie y enumerar estos puertos para varias operaciones en serie.

Obtenga una lista de puertos serie disponibles en Python

A veces, durante la programación, necesitamos obtener información sobre los puertos de comunicación disponibles en nuestro sistema. Vamos a discutir cómo hacer esto usando Python.

Python ofrece el módulo pySerial, que proporciona acceso a los puertos serie y la información relacionada. Primero necesitamos instalar el paquete pySerial en nuestro proyecto, y luego podemos usar fácilmente sus funciones.

Para instalar el paquete, debemos escribir pip install pyserial en el terminal de comandos de Python y presionar Enter. El paquete estará disponible para su uso.

Ahora, veamos el siguiente código que enumera los puertos serie:

import serial.tools.list_ports

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

Producción :

['COM1']

Analicemos lo que hicimos en el código. Tenemos que escribir importar serie para usar el paquete instalado.

El paquete pySerial tiene un método comports() que devuelve la lista de puertos COM disponibles. Cada objeto de esta lista es del tipo ListPortInfo.

Discutiremos más adelante en el artículo qué contiene este objeto ListPortInfo.

La función comports() está en el módulo list_ports,, que está en herramientas. Así que importamos todo el módulo escribiendo import serial.tools.list_ports.

Luego simplemente ejecutamos un bucle for en la lista devuelta por la función comports() y agregamos el puerto a nuestra lista.

El código anterior se puede escribir de forma más sencilla utilizando la comprensión de listas de Python. La salida será la misma para ambos códigos. Así es cómo.

import serial.tools.list_ports

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

Obtenga una lista de puertos serie junto con sus detalles

Como comentamos, la función comports() devuelve la lista de puertos, y cada objeto de la lista es del tipo ListPortInfo. Este objeto contiene información sobre los puertos serie y proporciona acceso indexado para recuperar el dispositivo (nombre completo/ruta), descripción y hwid del puerto serie.

El índice 0 nos dará el valor del dispositivo, la descripción está en el índice 1 y el índice 2 compartirá el hwid del puerto.

A continuación se muestra la información detallada que nos puede dar el objeto ListPortInfo sobre el puerto COM:

Objeto Descripción
device Ruta/nombre completo del dispositivo. Esto se devolverá como el primer elemento cuando el índice acceda a él.
name Nombre corto del dispositivo.
description Descripción legible por humanos. Esto se devolverá como el segundo elemento cuando el índice acceda a él.
hwid Identificación del hardware. Esto se devolverá como el tercer elemento cuando el índice acceda a él.
vid Identificación del proveedor de USB.
pid ID de producto USB.
serial_number Número de serie USB como una cadena.
location Cadena de ubicación del dispositivo USB.
manufacturer Cadena del fabricante USB, según lo informado por el dispositivo.
product Cadena de producto USB, según lo informado por el dispositivo.
interface Descripción específica de la interfaz.

Nota: el soporte está limitado a unos pocos sistemas operativos. Es posible que la descripción y hwid no estén disponibles en todos los sistemas.

Ahora, escribamos un código para obtener una lista de todos los puertos com disponibles junto con su nombre, descripción, fabricante y hwid.

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)

Producción :

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

Buscar un puerto serie por nombre

Esta función es útil cuando tenemos varios puertos en nuestro ordenador. Si necesitamos algún puerto específico, podemos buscarlo por su nombre o descripción según nuestra elección.

Creemos una función en Python que devolverá un puerto de nuestro nombre dado.

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)

Producción :

Communications Port (COM1)

El código es fácil de entender. En nuestra función, un bucle for se ejecuta en la lista de puertos devueltos por la función comports().

Verificamos el nombre de cada puerto dentro del bucle para ver si coincide con la entrada del usuario. Si es así, devolvemos ese puerto.

Puede construir una función similar para descripción, que devolverá el puerto al verificar la descripción.