Listen Sie serielle Ports mit Python auf

Neha Imran 21 Juni 2023
  1. Kurze Einführung in COM-Ports
  2. Holen Sie sich eine Liste der verfügbaren seriellen Ports in Python
  3. Holen Sie sich eine Liste der seriellen Ports zusammen mit ihren Details
  4. Suchen Sie einen seriellen Anschluss nach Namen
Listen Sie serielle Ports mit Python auf

In diesem Artikel besprechen wir die Kommunikation über serielle oder COM-Ports. Wir werden Python-Pakete eingehend untersuchen, um uns dabei zu helfen, die verfügbaren Kommunikationsports unseres Systems zu erhalten.

Später werden wir einige Techniken zur Verwendung von Python zum Suchen und Abrufen detaillierter Informationen über die verfügbaren seriellen Ports besprechen.

Kurze Einführung in COM-Ports

Ein COM-Port ist eine E/A-Schnittstelle, die es ermöglicht, ein serielles Gerät an einen Computer anzuschließen. Es ist eine Kurzform von Communication Port.

COM-Anschlüsse werden manchmal auch als serielle Anschlüsse bezeichnet. COM-Ports werden auf neuen Computern und Geräten nicht mehr häufig verwendet, aber viele alte Geräte mit serieller Schnittstelle werden noch verwendet.

Daher müssen wir manchmal eine serielle Kommunikation durchführen und diese Ports für mehrere serielle Operationen auflisten.

Holen Sie sich eine Liste der verfügbaren seriellen Ports in Python

Manchmal müssen wir beim Programmieren Informationen über die verfügbaren Kommunikationsports in unserem System erhalten. Wir werden besprechen, wie dies mit Python zu tun ist.

Python bietet das Modul pySerial an, das den Zugriff auf die seriellen Ports und die dazugehörigen Informationen ermöglicht. Wir müssen zuerst das Paket pySerial in unser Projekt installieren, dann können wir seine Funktionen einfach nutzen.

Um das Paket zu installieren, müssen wir im Python-Befehlsterminal pip install pyserial eingeben und Enter drücken. Das Paket kann verwendet werden.

Sehen wir uns nun den folgenden Code an, der die seriellen Ports auflistet:

import serial.tools.list_ports

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

Ausgang:

['COM1']

Lassen Sie uns besprechen, was wir im Code getan haben. Wir müssen import serial schreiben, um das installierte Paket zu verwenden.

Das Paket pySerial hat eine comports()-Methode, die die Liste der verfügbaren COM-Ports zurückgibt. Jedes Objekt in dieser Liste ist vom Typ ListPortInfo.

Wir werden später in diesem Artikel besprechen, was dieses ListPortInfo-Objekt enthält.

Die Funktion comports() befindet sich im Modul list_ports,, das sich in tools befindet. Also importieren wir das ganze Modul, indem wir import serial.tools.list_ports schreiben.

Dann führen wir einfach eine for-Schleife auf der Liste aus, die von der comports()-Funktion zurückgegeben wird, und hängen den Port an unsere Liste an.

Der obige Code kann einfacher geschrieben werden, indem das Python-Listenverständnis verwendet wird. Die Ausgabe ist für beide Codes gleich. Hier ist wie.

import serial.tools.list_ports

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

Holen Sie sich eine Liste der seriellen Ports zusammen mit ihren Details

Wie bereits erwähnt, gibt die Funktion comports() die Liste der Ports zurück, und jedes Objekt in der Liste ist vom Typ ListPortInfo. Dieses Objekt enthält Informationen über die seriellen Ports und bietet einen indizierten Zugriff zum Abrufen des Geräts (vollständiger Name/Pfad), Beschreibung und hwid des seriellen Ports.

Der Index 0 gibt uns den Wert des Geräts, die Beschreibung steht auf Index 1 und Index 2 teilt die hwid des Ports.

Im Folgenden finden Sie die detaillierten Informationen, die uns das Objekt ListPortInfo über den COM-Port geben kann:

Objekt Beschreibung
device Vollständiger Gerätename/Pfad. Dies wird als erstes Element zurückgegeben, wenn vom Index darauf zugegriffen wird.
name Kurzer Gerätename.
description Menschenlesbare Beschreibung. Dies wird als zweites Element zurückgegeben, wenn vom Index darauf zugegriffen wird.
hwid Hardware ID. Dies wird als drittes Element zurückgegeben, wenn vom Index darauf zugegriffen wird.
vid USB-Anbieter-ID.
pid USB-Produkt-ID.
serial_number USB-Seriennummer als Zeichenfolge.
location Zeichenfolge für den Standort des USB-Geräts.
manufacturer Zeichenfolge des USB-Herstellers, wie vom Gerät gemeldet.
product USB-Produktzeichenfolge, wie vom Gerät gemeldet.
interface Schnittstellenspezifische Beschreibung.

Hinweis: Die Unterstützung ist auf wenige Betriebssysteme beschränkt. Die description und hwid sind möglicherweise nicht auf allen Systemen verfügbar.

Lassen Sie uns nun einen Code schreiben, um eine Liste aller verfügbaren Com-Ports zusammen mit deren name, Beschreibung, Hersteller und hwid zu erhalten.

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)

Ausgang:

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

Suchen Sie einen seriellen Anschluss nach Namen

Diese Funktion ist nützlich, wenn wir mehrere Ports in unserem Computer haben. Wenn wir einen bestimmten Port benötigen, können wir ihn nach seinem Namen oder seiner Beschreibung nach unserer Wahl suchen.

Lassen Sie uns eine Funktion in Python erstellen, die einen Port unseres Vornamens zurückgibt.

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)

Ausgang:

Communications Port (COM1)

Der Code ist einfach zu verstehen. In unserer Funktion läuft eine for-Schleife auf der Liste der Ports, die von der Funktion comports() zurückgegeben wird.

Wir überprüfen den Namen jedes Ports innerhalb der Schleife, um zu sehen, ob er mit der Benutzereingabe übereinstimmt. Wenn dies der Fall ist, geben wir diesen Port zurück.

Sie können eine ähnliche Funktion für Beschreibung konstruieren, die den Port zurückgibt, indem sie die Beschreibung überprüft.