Question

J'aimerais écrire un programme Ruby pour OSX qui communique via USB avec mon Arduino.Je vais utiliser la gemme port série à cette fin.

J'ai trouvé un exemple de code qui dit :

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

Comment puis-je scanner et trouver l'Arduino, et savoir à quel port je dois me connecter automatiquement ?(J'ai OSX) Merci!

Était-ce utile?

La solution

Cela peut être difficile à réaliser de manière générale, car les périphériques Arduino apparaissent comme des ports série USB, ce qui rend difficile la distinction entre les ports Arduino et non Arduino.

L'approche par force brute est la suivante :énumérez les périphériques série USB, open() chacun à son tour et voyez si l'en-tête de démarrage de votre micrologiciel est envoyé à l'autre extrémité.Sous OSX, les périphériques série USB se trouvent dans /dev/tty.*, mais cela peut changer avec les futures mises à jour du système d'exploitation.Cette méthode fonctionne, mais peut être lente et sensible au timing.J'ai trouvé qu'un délai de démarrage sur l'Arduino avant l'envoi d'un en-tête aide, ainsi qu'un simple "Bonjour êtes-vous là?" commande que l'hôte peut utiliser pour détecter des signes de vie.

En outre, vous pouvez enregistrer le dernier port trouvé afin que les lancements ultérieurs d'applications essaient d'abord ce port.

Une variante :si votre application demande à l'utilisateur de brancher l'Arduino au démarrage, vous pouvez lister les ports USB dans /dev, attendre que l'utilisateur confirme qu'il est branché et lister à nouveau les ports.Tout appareil nouvellement apparu est probablement votre Arduino.

Au niveau suivant, vous pouvez consulter les identifiants du fournisseur et du produit USB (VID et PID).Cependant, ces identifiants sont partout sur la carte au pays Arduino.Ils diffèrent par le modèle, la version, la révision, les clones chinois et les différents appareils compatibles Arduino.Regarde ça article sur Adafruit.

Si vous essayez simplement de faire fonctionner les choses avec un ensemble matériel très restreint (par ex.celui Arduino sur votre banc), vous pouvez utiliser cette commande OSX pour voir les détails du périphérique USB :

system_profiler SPUSBDataType

Avec mon système, j'obtiens :

...
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 d'emplacement (0x3d100000/2) semble correspondre au nom de l'appareil : /dev/cu.usbmodem3d11

Voir cette question pour exécuter des commandes de ligne de commande à partir d'un script Ruby.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top