簡體   English   中英

如何檢索 USB 轉串口地址?

[英]How to retrieve USB-to-serial address?

問題

Pyserial:USB 串行設備具有不同的地址,具體取決於我將其安裝到台式機(Catalina)還是筆記本電腦(High Sierra):

ser = serial.Serial('/dev/cu.usbserial', 9600) #OSX High-Sierra
ser = serial.Serial('/dev/cu.usbserial-1D120', 9600) #OSX Catalina

有沒有使用通配符的方法? /dev/su.usbseria* 目標是處理任何一種情況的一行代碼。

任何關於為什么附加-1D120的見解都值得贊賞。

參考

例子

import serial.tools.list_ports
#Find USB Port
def find_port():  #Finds which port the arduino is plugged into
    ports = list(serial.tools.list_ports.comports())
    for p in ports:
        if '0403' in p[2]: #unique to Osepp Uno (arduino clone)                
            return p[0]

假設目標字符串(正則表達式)的格式為:

/dev/cu.usbserial**************

如何修改上述代碼片段以捕獲並返回 USB 串行設備?

注意:此答案已從問題中刪除並在此處正確發布。

檢索 USB 轉串口地址並打開端口

YMMV :注意算法限制。 尤其是捕獲字符串:如果發現(捕獲)多個實例,將返回最后一個捕獲的列表項=> 它可能是也可能不是預期的目標字符串。

import serial.tools.list_ports    
ports = list(serial.tools.list_ports.comports())
for p in ports: 
    #print(p[0])  #p[0] => target string
    if 'usbserial' in p[0]: #OSX: Trap usbserial device  /dev/cu.usbserial-1D120              
        serAddr=p[0]
    if 'ttyUSB' in p[0]: #Ubuntu :Trap usbserial device  /dev/ttyUSB0
        serAddr=p[0]              

ser = serial.Serial(serAddr, 9600) # Open port at 9600 baud

可以添加第三個未經測試的陷阱,用於檢查 windows COM 端口:

import serial.tools.list_ports    
ports = list(serial.tools.list_ports.comports())
for p in ports: 
    #print(p[0])  #p[0] => target string
    if 'usbserial' in p[0]: #OSX: Trap usbserial device  /dev/cu.usbserial-1D120              
        serAddr=p[0]
    if 'ttyUSB' in p[0]: #Ubuntu :Trap usbserial device  /dev/ttyUSB0
        serAddr=p[0]              
    if 'COM' in p[0]: #Windows :Trap usbserial device  COM3 COM7 etc.
        serAddr=p[0]  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM