2011-09-23 65 views
9

Estoy usando un Arduino para detectar usando Python 2.7 en Windows XP, pero la naturaleza no estática de la traducción del puerto USB a serie me está dando dolores de cabeza. Con un puerto serie físico no hay problemas para codificar la posición del puerto, pero el Arduino se está moviendo en función de lo que está o no enchufado en el momento de la instanciación del objeto. ¿Hay alguna forma en Python para que obtenga la dirección del puerto durante la inicialización de cada objeto y la pase a PyVISA o pySerial?Detectar el puerto Arduino en Python

+1

Qué operativo, la versión de Python, y la versión PySerial? ¿Qué has intentado? ¿Qué no está funcionando? Detalles, hombre! – jathanism

+0

Se agregaron cosas sobre la versión y el sistema operativo, pero todo lo que necesita cualquier versión de pyvisa o pyserial como entrada de ubicación es una cadena de texto como 'COM3'. – Elliot

Respuesta

0

Recomiendo una señal de apretón de manos y escaneando todos los puertos. Por ejemplo, envíe "whoru" desde su secuencia de comandos python al arduiono y tenga un código en el arduiono que responda con "arduino" cuando detecte "whoru" en el puerto serie. De esta forma, escanea los puertos, envía el apretón de manos, y cuando obtienes la respuesta adecuada, sabes en qué puerto está el arduino.

+1

Esto interrumpiría los dispositivos en otros puertos, ya que recibirían una información de la que no sabían el significado. Uno de los dispositivos con los que estoy trabajando es una mierda de equipo, pero no hay nada mejor para hacer el trabajo. Si recibe una mala señal, se bloquea y la única forma de restablecerlo es desenchufando por completo. – Elliot

2

También sugiero un apretón de manos, pero hazlo la otra ronda. Solo LEA la entrada de todos los puertos serie antes de comenzar su programa. A medida que sube el dispositivo puede hacer que envíe algo así como una señal de ENCENDIDO. cuando su código detecta la señal de ENCENDIDO en ese puerto, haga un apretón de manos.

1

En pySerial hay una forma bastante oculta de buscar VID/PID en todos los puertos serie (al menos en Windows). Simplemente encuentre el VID/PID del Arduino en propiedades del puerto y póngalo en el código python.

Por supuesto, esto no funcionará si ha conectado múltiples Arduino (/ PID mismo VID) Sistema

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