2011-09-23 73 views
9

我在Windows XP上使用Arduino進行感應使用Python 2.7,但USB到串口翻譯的非靜態特性讓我很頭疼。對於物理串行端口,硬編碼端口位置沒有問題,但Arduino正在基於對象實例化時插入或未插入的內容移動。有沒有什麼方法可以讓我在每次對象初始化的時候獲得端口地址並將它傳遞給PyVISApySerial在Python中檢測Arduino端口

+1

什麼操作系統,Python版本,並pyserial版本將無法正常工作?你有什麼嘗試?什麼不起作用?細節,男人! – jathanism

+0

增加了關於版本和操作系統的東西,但是任何版本的pyvisa或pyserial需要作爲位置輸入的東西都是像「COM3」這樣的文本字符串。 – Elliot

回答

0

我推薦一個握手信號並掃描所有的端口。例如,從你的python腳本發送「whoru」到arduiono,並在arduiono上有代碼,當它檢測到串口上的「whoru」時,它會以「arduino」響應。這樣,您掃描端口,發送握手,並且當您得到正確的響應時,您知道arduino所在的端口。

+1

這會中斷其他端口上的設備,因爲它們會得到他們不知道其含義的輸入。我正在使用的設備之一是一件糟糕的設備,但沒有比這更好的工作。如果信號不好,它就會鎖定,重置它的唯一方法就是徹底拔掉它。 – Elliot

2

我也建議握手,但要做另一輪。 只需在啓動程序之前閱讀所有串行端口的輸入。當你打開設備時,你可以讓它發送類似ON信號的東西。當您的代碼檢測到該端口上的ON信號時,請進行握手。

1

在pySerial中,有一種相當隱蔽的方法來檢查所有串行端口上的VID/PID(至少在Windows上)。 只需在端口屬性中找到Arduino的VID/PID並將其放入python代碼即可。

當然,如果你有多個Arduino的連接(同一VID/PID)

import serial.tools.list_ports 

for port in list(serial.tools.list_ports.comports()): 
    if port[2].startswith('USB VID:PID=1234:5678'): 
     #here you have the right port