Pregunta

Me gustaría escribir un programa de rubí para OSX que se comunica a través de USB con mi Arduino. Voy a utilizar la gema de Serialport para ese propósito.

Encontré un código de muestra que dice:

port_str = "/dev/ttyUSB0"  #may be different for you

¿Cómo puedo escanear y encontrar al Arduino, y saber qué puerto debo conectarme automáticamente? (Tengo OSX) ¡Gracias!

¿Fue útil?

Solución

Esto puede ser complicado para hacer de manera general, porque los dispositivos Arduino aparecen como puertos serie USB, lo que dificulta que sea difícil distinguir entre los puertos arduino y no arduino.

El enfoque de fuerza bruta es: enumerar los dispositivos serie USB, abrir () cada uno a su vez, y ver si su encabezado de inicio de firmware se envía en el otro extremo. En OSX, los dispositivos serie USB están en /dev/tty.*, pero eso puede cambiar con las futuras actualizaciones del sistema operativo. Este método funciona, pero puede ser lento y sensible al tiempo. Descubrí que un retraso de inicio en el Arduino antes de enviar un encabezado ayuda, así como un simple " Hola, ¿estás ahí? " "El host puede usar para golpear para detectar signos de vida. < / p>

Además, puede guardar el último puerto que se encuentra para que la aplicación posterior se inicie primero, intente ese puerto primero.

Una variante: si su aplicación le pide al usuario que conecte el Arduino al inicio, puede enumerar los puertos USB en / dev, espere a que el usuario confirme que está enchufado y vuelva a enumerar los puertos. Cualquier dispositivo recién aparente es probablemente su arduino.

En el siguiente nivel, puede ver el proveedor USB y las ID de producto (VID y PID). Sin embargo, estas identificaciones están en todo el mapa en Arduino-Land. Difieren por modelo, versión, revisión, clones chinos y los diversos dispositivos compatibles con Arduino. Consulte este WeiteUp en Adafruit .

Si solo está tratando de hacer que las cosas funcionen con un conjunto de hardware muy estrecho (por ejemplo, el one arduino en su banco), puede usar este comando OSX para ver los detalles del dispositivo USB:

system_profiler SPUSBDataType

con mi sistema, recibo:

...
USB Bus:

  Host Controller Location: Built-in USB
  Host Controller Driver: AppleUSBUHCI
  PCI Device ID: 0x7fff000027c9 
  PCI Revision ID: 0x7fff00000002 
  PCI Vendor ID: 0x7fff00008086 
  Bus Number: 0x3d 

    Communication Device:

      Product ID: 0x0043
      Vendor ID: 0x2341
      Version: 0.01
      Serial Number: 75331313133351800000
      Speed: Up to 12 Mb/sec
      Manufacturer: Arduino (www.arduino.cc)
      Location ID: 0x3d100000 / 2
      Current Available (mA): 500
      Current Required (mA): 100

El ID de ubicación (0x3d100000 / 2) parece coincidir con el nombre del dispositivo: /dev/cu.usbmodem3d11

ver esta pregunta para ejecutar comandos de línea de comandos dentro de un Script de rubí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top