Identificar qué / dev / es un dispositivo USB conectado a
-
20-12-2019 - |
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!
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í.