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