You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PyVisa连接Arduino Uno?查询指令超时无响应该如何解决

你遗漏的配置和需要调整的逻辑如下:

  • Arduino默认不支持SCPI标准指令:你调用的*IBN?属于工业仪器通用的SCPI标准查询指令,Arduino没有内置对应解析逻辑,必须自行在Arduino固件中编写串口指令响应规则,才能返回对应内容。
  • 串口参数未显式匹配Arduino配置:PyVisa打开串口资源时的默认波特率、终止符等参数不一定和你Arduino侧Serial.begin()的配置一致,打开资源时需要显式指定对应参数,同时你原有代码的PyVisa调用方式不符合规范,调整后的Python示例代码如下:
import pyvisa
import time

port = "ASRL4::INSTR"
# 如使用NI Visa后端可不传参数,用pyvisa-py后端则传入'@py'
rm = pyvisa.ResourceManager()
# 波特率、终止符需和Arduino侧配置完全一致
device = rm.open_resource(port, baud_rate=9600, write_termination='\n', read_termination='\n')
  • 未避开Arduino串口复位的等待期:Arduino Uno的硬件设计会在串口首次连接时自动触发主板复位,复位过程耗时1~2秒,这期间主板不会响应任何指令,需要在打开资源后增加延时再发起查询:
# 等待复位完成
time.sleep(2)
# 注意指令内容要和你Arduino侧编写的响应规则对应
print(device.query("IBN?"))
  • 补充Arduino侧的串口响应固件示例:
void setup() {
  // 波特率和Python侧配置保持一致
  Serial.begin(9600);
  while (!Serial);
}

void loop() {
  if (Serial.available() > 0) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();
    if (cmd == "IBN?") {
      // 收到对应指令后返回自定义内容
      Serial.println("Arduino Uno R3");
    }
  }
}

内容的提问来源于stack exchange,提问作者Tijmen Groot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:15:00