我想为 OSX 编写一个 Ruby 程序,通过 USB 与我的 Arduino 进行通信。我将为此目的使用serialport gem。
我找到了一个示例代码,上面写着:
port_str = "/dev/ttyUSB0" #may be different for you
如何扫描并找到 Arduino,并知道我应该自动连接到哪个端口?(我有 OSX)谢谢!
我想为 OSX 编写一个 Ruby 程序,通过 USB 与我的 Arduino 进行通信。我将为此目的使用serialport gem。
我找到了一个示例代码,上面写着:
port_str = "/dev/ttyUSB0" #may be different for you
如何扫描并找到 Arduino,并知道我应该自动连接到哪个端口?(我有 OSX)谢谢!
这通常很难做到,因为 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 脚本中运行命令行命令。