识别连接的USB设备/ dev /是什么

时间:2013-11-15 13:48:29

标签: ruby macos arduino ruby-serialport

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

我找到了一个示例代码:

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

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

1 个答案:

答案 0 :(得分:1)

这在一般情况下可能很棘手,因为Arduino设备显示为USB串行端口,因此很难区分Arduino端口和非Arduino端口。

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

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

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

在下一级,您可以查看USB供应商和产品ID(VID和PID)。但是,这些ID遍布Arduino-land的地图。它们因型号,版本,修订版,中文克隆以及各种Arduino兼容设备而异。见writeup at 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脚本中运行命令行命令,请参阅this question