2011-09-23 9 views
9

Używam Arduino do wykrywania przy użyciu Pythona 2.7 w systemie Windows XP, ale niestatyczna natura tłumaczenia portu USB na port szeregowy sprawia mi ból głowy. Z fizycznym portem szeregowym nie ma problemu z twardym kodowaniem pozycji portu, ale Arduino porusza się w oparciu o to, co jest lub nie jest podłączone w momencie tworzenia obiektu. Czy jest jakiś sposób w Pythonie, aby uzyskać adres portu podczas inicjowania każdego obiektu i przekazać go do PyVISA lub pySerial?Wykryj port Arduino w Pythonie

+1

jaki system operacyjny w wersji Pythona i wersję pyserial? Co próbujesz? Co nie działa? Szczegóły, człowieku! – jathanism

+0

Dodane rzeczy o wersji i systemie operacyjnym, ale wszystko, czego jakakolwiek wersja pyvisa lub pyserial potrzebuje jako danych wejściowych lokalizacji, to ciąg tekstowy, taki jak "COM3". – Elliot

Odpowiedz

0

Polecam sygnał uzgadniania i skanowanie wszystkich portów. Na przykład wyślij "whoru" ze skryptu Pythona do arduiono i wypisz kod na arduiono, który odpowiada "arduino", gdy wykryje "whoru" na porcie szeregowym. W ten sposób skanujesz porty, wysyłasz uzgadnianie, a kiedy uzyskasz odpowiednią odpowiedź, wiesz, który port jest włączony.

+1

To zakłócałoby działanie urządzeń na innych portach, ponieważ otrzymywałyby dane wejściowe, których nie znały. Jednym z urządzeń, z którymi pracuję, jest gówniany sprzęt, ale nie ma nic lepszego do zrobienia. Jeśli otrzyma zły sygnał, blokuje się i jedynym sposobem na zresetowanie go jest całkowite odłączenie go. – Elliot

2

Proponuję również uścisk dłoni, ale zrób to po drugiej rundzie. Wystarczy odczytać dane wejściowe ze wszystkich portów szeregowych przed uruchomieniem programu. Po włączeniu urządzenia możesz wysłać sygnał podobny do ON. kiedy twój kod wykryje sygnał ON na tym porcie, wykonaj uścisk dłoni.

1

W pySerial istnieje dość ukryty sposób sprawdzania VID/PID na wszystkich portach szeregowych (przynajmniej w systemie Windows). Po prostu znajdź VID/PID Arduino w właściwościach portu i umieść go w kodzie Pythona.

Oczywiście to nie będzie działać, jeśli masz wiele Arduino podłączony (sama 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