使用 Python 列出串口的實(shí)現(xiàn)方法
在本文中,我們將討論使用串口或 com 端口的通信。 我們將深入探索 Python 包,以幫助我們獲得系統(tǒng)的可用通信端口。
稍后,我們將回顧一些使用 Python 搜索和獲取有關(guān)可用串行端口的詳細(xì)信息的技術(shù)。
COM口簡(jiǎn)介
COM 端口是一種 I/O 接口,可以將串行設(shè)備連接到計(jì)算機(jī)。 它是通信端口的縮寫形式。
COM 端口有時(shí)也稱為串行端口。 COM口在新的電腦和設(shè)備上已經(jīng)不常用了,但是很多舊的串口設(shè)備還在使用。
因此,我們有時(shí)可能需要進(jìn)行串口通信,將這些端口列出來進(jìn)行幾個(gè)串口操作。
在 Python 中獲取可用串口列表
有時(shí)在編程時(shí),我們需要獲取有關(guān)系統(tǒng)中可用通信端口的信息。 我們將討論如何使用 Python 來做到這一點(diǎn)。
Python 提供了 pySerial 模塊,它提供了對(duì)串行端口和相關(guān)信息的訪問。 我們首先需要將包pySerial安裝到我們的項(xiàng)目中,然后我們就可以輕松地使用它的功能了。
要安裝包,我們必須在 Python 命令終端中鍵入 pip install pyserial 并按 Enter。 該包將可供使用。
現(xiàn)在,讓我們看一下列出串行端口的以下代碼:
import serial.tools.list_ports ports = [] for port in serial.tools.list_ports.comports(): ports.append(port.name) print(ports)
輸出:
['COM1']
讓我們討論一下我們?cè)诖a中做了什么。 我們必須編寫 import serial
才能使用已安裝的包。
pySerial 包有一個(gè) comports()
方法,它返回可用 COM 端口的列表。 此列表中的每個(gè)對(duì)象都是 ListPortInfo 類型。
我們將在本文后面討論這個(gè) ListPortInfo 對(duì)象包含什么。
comports()
函數(shù)位于模塊 list_ports 中,該模塊位于工具中。 所以我們通過編寫 import serial.tools.list_ports
來導(dǎo)入整個(gè)模塊。
然后我們只需在 comports()
函數(shù)返回的列表上運(yùn)行一個(gè) for 循環(huán),并將端口附加到我們的列表中。
上面的代碼可以通過使用 Python 列表理解來編寫得更簡(jiǎn)單。 兩種代碼的輸出將相同。 就是這樣。
import serial.tools.list_ports print([port.device for port in serial.tools.list_ports.comports()])
獲取串行端口列表及其詳細(xì)信息
正如我們所討論的, comports()
函數(shù)返回端口列表,列表中的每個(gè)對(duì)象都是 ListPortInfo 類型。 此對(duì)象包含有關(guān)串行端口的信息,并提供索引訪問以檢索設(shè)備(全名/路徑)、描述和串行端口的 hwid。
索引 0 將為我們提供設(shè)備的值,描述位于索引 1,索引 2 將共享端口的 hwid。
以下是 ListPortInfo 對(duì)象可以為我們提供的有關(guān) COM 端口的詳細(xì)信息:
對(duì)象 | 描述 |
---|---|
device | 完整的設(shè)備名稱/路徑。 當(dāng)索引訪問時(shí),這將作為第一個(gè)元素返回。 |
name | 短設(shè)備名稱。 |
description | 人類可讀的描述。 當(dāng)索引訪問時(shí),這將作為第二個(gè)元素返回。 |
hwid | 硬件 ID。 當(dāng)索引訪問時(shí),這將作為第三個(gè)元素返回。 |
vid | USB 供應(yīng)商 ID。 |
pid | USB 產(chǎn)品 ID。 |
serial_number | 字符串形式的 USB 序列號(hào)。 |
location | USB 設(shè)備位置字符串。 |
manufacturer | USB 制造商字符串,由設(shè)備報(bào)告。 |
product | USB 產(chǎn)品字符串,由設(shè)備報(bào)告。 |
interface | 特定于接口的描述。 |
現(xiàn)在,讓我們編寫一個(gè)代碼來獲取所有可用 com 端口的列表以及它們的名稱、描述、制造商和 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)
輸出:
[{'Name': 'COM1', 'Description': 'Communications Port (COM1)', 'Manufacturer': '(Standard port types)',
'Hwid': 'ROOT\\PORTS\\0000'}]
按名稱搜索串行端口
當(dāng)我們的計(jì)算機(jī)中有多個(gè)端口時(shí),此功能很有用。 如果我們需要任何特定的端口,我們可以根據(jù)我們的選擇通過名稱或描述來搜索它。
讓我們?cè)?Python 中創(chuàng)建一個(gè)函數(shù),它將返回我們給定名稱的端口。
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)
代碼很容易掌握。 在我們的函數(shù)中,for 循環(huán)在 comports()
函數(shù)返回的端口列表上運(yùn)行。
我們?cè)谘h(huán)中驗(yàn)證每個(gè)端口的名稱,看它是否與用戶輸入匹配。 如果是,我們返回那個(gè)端口。
你可以為描述構(gòu)造一個(gè)類似的函數(shù),它會(huì)通過檢查描述來返回端口。
到此這篇關(guān)于使用 Python 列出串口的文章就介紹到這了,更多相關(guān)Python 列出串口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中串口通信庫pyserial基礎(chǔ)知識(shí)
- Python讀取串口數(shù)據(jù)的實(shí)現(xiàn)方法
- python讀取串口數(shù)據(jù)有幾種方法
- python serial串口通信示例詳解
- 玩轉(zhuǎn)串口通信:利用pyserial庫,Python打開無限可能
- Python通過串口實(shí)現(xiàn)收發(fā)文件
- Python串口通信的接收與發(fā)送的實(shí)現(xiàn)
- python實(shí)現(xiàn)串口通信的示例代碼
- Python?Serial串口的簡(jiǎn)單數(shù)據(jù)收發(fā)方式
- 使用Python玩轉(zhuǎn)串口(基于pySerial問題)
- python串口讀取數(shù)據(jù)的實(shí)例
- Python中串口操作的實(shí)現(xiàn)示例
相關(guān)文章
python用fsolve、leastsq對(duì)非線性方程組求解
這篇文章主要為大家詳細(xì)介紹了python用fsolve、leastsq對(duì)非線性方程組進(jìn)行求解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Python基于ImageAI實(shí)現(xiàn)圖像識(shí)別詳解
ImageAI是一個(gè)面向計(jì)算機(jī)視覺編程的Python庫,支持最先進(jìn)的機(jī)器學(xué)習(xí)算法。本文將利用ImageAI實(shí)現(xiàn)圖像識(shí)別功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02Python正則表達(dá)式常用函數(shù)總結(jié)
這篇文章主要介紹了Python正則表達(dá)式常用函數(shù),結(jié)合實(shí)例形式總結(jié)分析了Python正則表達(dá)式常用函數(shù)功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-06-06利用soaplib搭建webservice詳細(xì)步驟和實(shí)例代碼
這篇文章主要介紹了使用python soaplib搭建webservice詳細(xì)步驟和實(shí)例代碼,大家可以參考使用2013-11-11深入學(xué)習(xí)Python中的上下文管理器與else塊
這篇文章主要給大家介紹了關(guān)于Python中上下文管理器與else塊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08Flask利用自定義接口實(shí)現(xiàn)mock應(yīng)用詳解
后端接口已提供,前端需要依賴后端接口返回的數(shù)據(jù)進(jìn)行前端頁面的開發(fā),如何配合前端?這篇就來介紹一下Flask如何利用自定義接口實(shí)現(xiàn)mock應(yīng)用,需要的可以參考一下2023-03-03Python使用Dash開發(fā)網(wǎng)頁應(yīng)用的方法詳解
本文主要是通過Dash的Checklist組件,簡(jiǎn)單介紹使用Dash開發(fā)的Web應(yīng)用,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2022-09-09Python自定義命令行參數(shù)選項(xiàng)和解析器
這篇文章主要介紹了Python自定義命令行參數(shù)選項(xiàng)和解析器,本文主要使用的方法為argparse.ArgumentParser(),此模塊可以讓人輕松編寫用戶友好的命令行接口,程序定義它需要的參數(shù),需要的朋友可以參考下2023-07-07