1

我想为 OSX 编写一个 Ruby 程序,通过 USB 与我的 Arduino 进行通信。我将为此目的使用serialport gem。

我找到了一个示例代码,上面写着:

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

如何扫描并找到 Arduino,并知道我应该自动连接到哪个端口?(我有 OSX)谢谢!

4

1 回答 1

2

这通常很难做到,因为 Arduino 设备显示为 USB 串行端口,因此很难区分 Arduino 和非 Arduino 端口。

蛮力方法是:枚举 USB 串行设备,依次打开()每个设备,然后查看您的固件启动标头是否在另一端发送。在 OSX 上,USB 串行设备位于 /dev/tty.*,但这可能会随着未来的操作系统更新而改变。此方法有效,但速度慢且对时间敏感。我发现在发送标头之前 Arduino 上的启动延迟会有所帮助,以及一个简单的“你好,你在吗? ”主机可以用来发出生命迹象的命令。

此外,您可以保存找到的最后一个端口,以便后续应用程序启动首先尝试该端口。

一个变种:如果您的应用程序在启动时要求用户插入 Arduino,您可以在 /dev 中列出 USB 端口,等待用户确认它已插入,然后再次列出端口。任何新出现的设备都可能是您的 Arduino。

在下一个级别,您可以查看 USB 供应商和产品 ID(VID 和 PID)。但是,这些 ID 遍布 Arduino 领域的地图。它们因型号、版本、修订版、中文克隆以及各种 Arduino 兼容设备而异。请参阅Adafruit上的这篇文章。

如果你只是想用一个非常狭窄的硬件集(例如你的工作台上的一个 Arduino),你可以使用这个 OSX 命令来查看 USB 设备的详细信息:

system_profiler SPUSBDataType

使用我的系统,我得到:

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

位置 ID (0x3d100000 / 2) 似乎与设备名称匹配: /dev/cu.usbmodem3d11

请参阅此问题以从 Ruby 脚本中运行命令行命令。

于 2013-11-15T22:37:26.750 回答