Frage

Ich möchte ein Ruby-Programm für OSX schreiben, das über USB mit meinem Arduino kommuniziert.Zu diesem Zweck werde ich das Serialport-Gem verwenden.

Ich habe einen Beispielcode gefunden, der besagt:

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

Wie kann ich das Arduino scannen und finden und automatisch wissen, mit welchem ​​Port ich mich verbinden soll?(Ich habe OSX) Danke!

War es hilfreich?

Lösung

Dies kann im Allgemeinen schwierig zu bewerkstelligen sein, da Arduino-Geräte als serielle USB-Anschlüsse erscheinen, was es schwierig macht, zwischen Arduino- und Nicht-Arduino-Anschlüssen zu unterscheiden.

Der Brute-Force-Ansatz ist:Listen Sie die seriellen USB-Geräte auf, öffnen Sie sie nacheinander und prüfen Sie, ob Ihr Firmware-Boot-Header am anderen Ende gesendet wird.Unter OSX befinden sich die seriellen USB-Geräte unter /dev/tty.*, aber das kann sich mit zukünftigen Betriebssystem-Updates ändern.Diese Methode funktioniert, kann jedoch langsam und zeitkritisch sein.Ich habe festgestellt, dass eine Startverzögerung auf dem Arduino vor dem Senden eines Headers hilfreich ist, ebenso wie ein einfaches „Hallo bist du da?„Befehl, mit dem der Wirt nach Lebenszeichen suchen kann.

Außerdem können Sie den zuletzt gefundenen Port speichern, sodass nachfolgende App-Starts diesen Port zuerst ausprobieren.

Eine Variante:Wenn Ihre App den Benutzer beim Start auffordert, das Arduino anzuschließen, können Sie die USB-Anschlüsse in /dev auflisten, warten, bis der Benutzer bestätigt, dass es angeschlossen ist, und die Anschlüsse erneut auflisten.Bei jedem neu erscheinenden Gerät handelt es sich wahrscheinlich um Ihr Arduino.

Auf der nächsten Ebene können Sie sich die USB-Anbieter- und Produkt-IDs (VID und PID) ansehen.Allerdings sind diese IDs im Arduino-Land allgegenwärtig.Sie unterscheiden sich je nach Modell, Version, Revision, chinesischen Klonen und den verschiedenen Arduino-kompatiblen Geräten.Sieh dir das an Artikel bei Adafruit.

Wenn Sie nur versuchen, die Dinge mit einem sehr begrenzten Hardwaresatz zum Laufen zu bringen (z. B.(das eine Arduino auf Ihrer Werkbank), können Sie diesen OSX-Befehl verwenden, um die Details des USB-Geräts anzuzeigen:

system_profiler SPUSBDataType

Mit meinem System erhalte ich:

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

Die Standort-ID (0x3d100000/2) scheint mit dem Gerätenamen übereinzustimmen: /dev/cu.usbmodem3d11

Sehen diese Frage zum Ausführen von Befehlszeilenbefehlen aus einem Ruby-Skript heraus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top