使用 libusb 和 Ruby 从 USB 设备(Waterrower S4 Monitor)读取数据

Reading data from USB device (Waterrower S4 Monitor) with libusb and Ruby

我买了一个 Waterrower which has an S4 Performance Monitor,它的背面有一个 Micro-USB 连接器,我认为能够获取来自 S4 的数据并用它做一些不错的事情会很好。

我确实知道一些 Ruby 但我完全不喜欢谈论硬件。我确实在 Github 上找到了 libusb Ruby binding by Lars Kanis 并使用了它:

2.1.0 :001 > require "libusb"
 => true 
2.1.0 :002 > usb = LIBUSB::Context.new
 => #<LIBUSB::Context:0x000001011451c0 @ctx=#<FFI::Pointer address=0x000001032788b0>, @on_pollfd_added=nil, @on_pollfd_removed=nil, @hotplug_callbacks={}> 
2.1.0 :003 > usb.devices
 => [#<LIBUSB::Device 20/9 04d8:000a Microchip Technology Inc. CDC RS-232: WR-S4.2 ? (Comm (00,00))>, #<LIBUSB::Device 20/8 054c:0243 Sony Storage Media 2A08080530914 (MassStorage SCSI Bulk-Only)>, #<LIBUSB::Device 20/1 05ac:025a Apple Inc. Apple Internal Keyboard / Trackpad ? (HID (01,01), HID (00,00), HID (01,02))>, #<LIBUSB::Device 20/129 05ac:8007 ? ? ? (Hi-speed Hub with single TT)>, #<LIBUSB::Device 21/128 05ac:8007 ? ? ? (Hub (00,03))>] 
2.1.0 :004 > wr_s4 = usb.devices(:idVendor => 0x04d8, :idProduct => 0x000a).first
 => #<LIBUSB::Device 20/9 04d8:000a Microchip Technology Inc. CDC RS-232: WR-S4.2 ? (Comm (00,00))> 
2.1.0 :005 > wr_s4
 => #<LIBUSB::Device 20/9 04d8:000a Microchip Technology Inc. CDC RS-232: WR-S4.2 ? (Comm (00,00))>

如您所见,我能够连接到正确的设备(名为 wr_s4)。

现在,我不知道 S4 监视器将以何种格式通过 USB 发送数据,以及什么是最聪明的读取方式。

任何有关 S4 性能监视器或使用 Ruby 从 USB 设备获取数据的帮助将不胜感激。

非常感谢您的帮助!

您可以联系制造商并询问USB协议的详细信息。如果他们不告诉你,那么你只需要对其进行逆向工程。

制造商为 Windows 提供软件,因此您可以让该软件运行,然后使用某种 USB 协议分析器来查看 USB 数据包。我推荐 Beagle USB 12,但您可以免费找到一些软件 USB 协议分析器,它可能就足够了。

一旦您对 USB 有了足够的了解并弄清楚了协议是什么,编写发送和接收所需数据的 libusb 命令就相对容易了。

您是否看过标题为 "Water Rower S4 S5 USB Protocol Iss 1.04.doc" 的文档?

Here 就是 link.

github项目好像和你想做的差不多。它应该有助于理解 USB 数据。