2011-09-23 20 views
9

Windows XPでPython 2.7を使用してArduinoを検出していますが、USBからシリアルへのポート変換の非静的な性質が私に頭痛を与えています。物理的なシリアルポートでは、ポートの位置をハードコーディングするのに問題はありませんが、Arduinoはオブジェクトのインスタンシエーション時にプラグインされているかどうかに基づいて移動しています。各オブジェクトの初期化中にポートアドレスを取得してPyVISAまたはpySerialに渡す方法はありますか?PythonでArduinoポートを検出する

+1

どのオペレーティングシステム、Pythonのバージョン、およびpyserialバージョンを接続している場合、これは動作しませんか?何を試しましたか?何が効いていないのですか?詳細、男! – jathanism

+0

バージョンとOSに関する情報を追加しましたが、pyvisaやpyserialのいずれかのバージョンが位置入力として必要とするのは、 'COM3'のようなテキスト文字列です。 – Elliot

答えて

0

ハンドシェイク信号を送り、すべてのポートをスキャンすることをお勧めします。たとえば、Pythonスクリプトの "whoru"をarduionoに送り、シリアルポート上で "whoru"を検出すると "arduino"で応答するarduionoのコードを手に入れます。このようにして、ポートをスキャンしてハンドシェイクを送信し、適切な応答が得られたら、arduinoがどのポートに接続されているかを知ることができます。

+1

これは、他のポート上のデバイスを中断させます。なぜなら、それらのデバイスは、その意味を知らなかった入力を得るからです。私が扱っている機器の1つは、駄目な機器ですが、その作業を行う方が良い方法はありません。それが悪い信号を得るならば、それはロックアップし、それをリセットする唯一の方法は完全にそれを外すことです。 – Elliot

2

私はまた、握手を提案しますが、それは他のayラウンドを行います。 プログラムを開始する前に、すべてのシリアルポートからの入力をREADするだけです。デバイスを起動すると、ON信号のようなものを送信することができます。あなたのコードがそのポートでON信号を検出したら、ハンドシェイクを行います。

1

pySerialには、すべてのシリアルポート(Windowsでは少なくとも)でVID/PIDをチェックする非常に隠れた方法があります。 ポートのプロパティの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 
関連する問題