我正在尝试将我的Arduino Uno连接到我的计算机,并使用PyVisa编写Python代码。我已经正确安装了PyVisa,因为它可以与其他设备一起工作。由于某种原因,Arduino Uno从未返回响应。我正在使用NI Visa软件包,因为我希望pyvisa-py是问题所在。我是否遗漏了什么?
我用来连接的代码是:
import pyvisa_py as pv
port = "ASRL4::INSTR"
rm = pv.ResourceManager()
device = rm.open_resource(port)
ResourceManager找到了正确的端口,并且我没有收到创建设备的错误。
print(device.query("*IBN?"))
它给出以下错误:
pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.
1条答案
按热度按时间aiqt4smr1#
我已经很久没有尝试在PyVisa上使用Arduino了,我一直使用PySerial库。这是我大约四年前(2017年)写的一个关于Python模块与Arduino接口的个人笔记。
这个驱动程序不使用VISA层与设备通信,而是使用更低级、更通用的PySerial库,原因是Arduino会重新启动(“重置自己”)每当串口通过VISA打开时,这是一个功能,而不是bug,这样您就不必在每次从Arduino IDE刷新新固件版本时手动重置它。控制器在打开其串行端口后大约两秒钟内不会响应请求。避免重新启动的唯一方法是确保在打开资源时 * 不 * 切换串行端口的DTR线。然而,VISA默认情况下会这样做,而且似乎没有办法禁用这种破坏性行为。2事实上,只有在资源被打开之后才能设置VISA属性。3另一方面,PySerial库没有这个限制。
由于这张钞票已经有四年的历史了,所以你可以对它持保留态度。事情可能已经发生了变化。但是使用PySerial而不是PyVisa仍然是你最好的选择。更多细节请参见my answer here。也许你可以用关键字“Arduino”和“DTR”在网上搜索一下,看看最近是否有什么进展。