使用Python访问USB硬件(具有原生C++ API的压力传感器矩阵)
我正在使用一个带有USB接口的压力感应床垫。制造商为Windows提供了USB设备驱动程序,还有一个用C++编写的API,这个API里有一些函数可以用来请求数据和设置一些参数。
目前,我无法直接用这个传感器来测试一些Python的数据可视化脚本,所以我不得不请同事为我写一个文本记录器,然后我再用Python离线读取这些信息。
另外,我完全无法在Linux系统上使用这个传感器,因为没有Linux的驱动程序,而且我也不知道从哪里开始“破解”这个传感器,这就是我提问的原因:
“如果我想尝试用Python直接读取这个传感器的数据,可能还想在Linux上操作,我应该先做什么,或者先读什么?”
补充一下:这个设备有一个FTDI驱动(FTD2XX.dll),希望这能帮到我。
任何帮助都非常欢迎。
2 个回答
FTDI芯片有一个适用于Linux的驱动程序。你只需要去FTDI的网站下载这个驱动就可以了。这个驱动会创建一个虚拟串口,你可以用PySerial来和它进行连接。
真可惜我没早点看到这个帖子!
很有可能这是一个HID设备,这种情况下你可以开始为它编写一个用户空间的Linux驱动,使用libhid这个工具。首先,你可以通过列举设备树来获取它的功能信息。你可以用命令lsusb -vvv
来查看,或者参考这个例子。
如果这个方法不行,你也可以在Linux(现在其他平台也可以)上使用libusb来编写用户空间的驱动。你可能需要用类似usbsnoop的工具,或者一个真实硬件的工具,来观察官方驱动在与设备通信时做了什么,然后模仿它的行为。
从Python的角度来看,你可以用SWIG相对简单地生成一个现有C++ API的封装,这样比起开发一个完全自定义的驱动要轻松得多。
更新:
如果这是一个FTDI设备,那么处理起来可能会简单很多。根据厂商和产品ID的显示,它可能会自动与Linux中的FTDI驱动配合工作,这样你就能把它当作USB串口使用。如果不行的话,还有一些模块参数——vendor
和product
,我相信你可以用它们来让驱动识别其他设备,而不仅仅是它已经知道的pid/vid组合。接下来,你可以尝试用不同的设置打开串口设备。运气好的话,它可能已经在定期发送状态信息了。
如果没有,你就需要尝试找出官方软件发送了什么指令来让设备开始工作。你又回到了嗅探的领域,不过我觉得可能有一些工具可以在Windows的串口层而不是USB层进行嗅探(虽然我说不出具体的工具)。你也可以尝试让他们的库使用一个软件模拟的串口,而不是FTDI设备,看看它写了什么。