Listen Sie serielle Ports mit Python auf
- Kurze Einführung in COM-Ports
- Holen Sie sich eine Liste der verfügbaren seriellen Ports in Python
- Holen Sie sich eine Liste der seriellen Ports zusammen mit ihren Details
- Suchen Sie einen seriellen Anschluss nach Namen
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
undhwid
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.