Domanda

Mi piacerebbe scrivere un programma Ruby per OSX che comunica tramite USB con il mio Arduino. Ho intenzione di usare la gemma serialport per questo scopo.

Ho trovato un codice di esempio che dice:

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

Come posso scansionare e trovare l'Arduino e sapere a quale porta dovrei connettermi automaticamente? (Ho OSX) Grazie!

È stato utile?

Soluzione

Questo può essere difficile da fare in modo generale, poiché i dispositivi Arduino appaiono come porte seriali USB, rendendolo difficile distinguere tra porti Arduino e non Arduino.

L'approccio alla forza bruta è: enumerare i dispositivi seriali USB, aprire () ciascuno a turno e vedere se il tuo intestazione di avvio del firmware viene inviato sull'altra estremità. Su OSX, i dispositivi seriali USB sono a /dev/tty.*, ma che possono cambiare con i futuri aggiornamenti del sistema operativo. Questo metodo funziona, ma può essere sensibile lento e tempistico. Ho scoperto che un ritardo di avvio sull'arduino prima di inviare un'intestazione aiuta, così come un semplice " ciao, vero? " Comando L'host può usare per sbattere per i segni di vita. < / P >.

Inoltre, è possibile salvare l'ultima porta trovata in modo che la successiva app lancia prova quella porta prima.

Una variante: se la tua app chiede all'utente di collegare l'ARDUINO all'avvio, è possibile elencare le porte USB in / dev, attendere che l'utente confermi sia collegato e elenca di nuovo le porte. Qualsiasi dispositivo di nuova comparsa è probabile il tuo arduino.

Al livello successivo, è possibile guardare il fornitore USB e gli ID del prodotto (Vid & PID). Tuttavia, questi ID sono su tutta la mappa di Arduino-Land. Differiscono per modello, versione, revisione, cloni cinesi e i vari dispositivi compatibili con Arduino. Vedi questo Scrivup a Adafruit .

Se stai solo cercando di far funzionare le cose con un set hardware molto stretto (ad esempio quello Arduino sulla panchina), puoi utilizzare questo comando osx per vedere i dettagli del dispositivo USB:

system_profiler SPUSBDataType
.

Con il mio sistema, ottengo:

...
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
.

L'ID posizione (0x3D100000 / 2) sembra corrispondere con il nome del dispositivo: /dev/cu.usbmodem3d11

Vedi Questa domanda per l'esecuzione dei comandi della riga di comando da dentro Scrittura di rubino.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top