【问题标题】:Pyserial problem with Arduino - works with the Python shell but not in a programArduino 的 Pyserial 问题 - 适用于 Python shell 但不适用于程序
【发布时间】:2010-12-09 17:48:47
【问题描述】:

好的,所以我很肯定我的 Arduino 电路和它的代码是正确的。我知道这一点是因为当我使用 Arduino IDE 中内置的串行监视器并发送“H”时,LED 会亮起,而当我发送“L”时,LED 会关闭。

现在我做了一个 Python 程序

import serial
ser = serial.Serial("COM4",9600)
ser.write("H")

当我运行代码时,LED 会闪烁一秒钟然后又熄灭。 但是,当我在 shell 中分别执行这些行时,它的工作原理就像它应该做的那样。

有什么想法吗?

【问题讨论】:

  • 会不会和被垃圾回收的 Serial 对象有关?

标签: python serial-port arduino


【解决方案1】:

当您打开串行端口时,这会导致 Arduino 重置。由于 Arduino 需要一些时间来启动,所有输入都进入 bitbucket(或者可能进入引导加载程序,上帝知道它会做什么)。如果你插入一个睡眠,你等待 Arduino 出现所以你的序列号。这就是它以交互方式工作的原因;您正在等待软件启动所需的 1.5 秒。

我确认打开串口会重置我的Arduino Uno;我闪烁了一个程序,该程序将使setup() 例程中的 LED 闪烁——调用open("/dev/ttyACM0") 足以触发重置。恕我直言,这是串行支持中令人困惑且未记录的问题。

【讨论】:

【解决方案2】:

我遇到了同样的问题,如果我从打开串行连接到写入它添加大约 2 秒的延迟,它可以工作,1 秒是不够的。

【讨论】:

  • 写入之前的 2 秒延迟也为我解决了这个问题。
【解决方案3】:

为了更清楚一点,我将修改代码,以便每个人都可以看到需要添加的内容!

import serial
import time
ser = serial.Serial("COM4",9600)
time.sleep(3)
ser.write("H")

添加睡眠语句有助于让连续打开没有任何问题!

【讨论】:

    【解决方案4】:

    假设您使用的是 Arduino Uno

    10 引脚上暴露的 USB 端口和 Uno 串行总线共享相同的 RX/TX 线。我建议购买一个 USB 转 TTL 适配器,例如 the one here,这样您就可以在不使用 USB 端口的情况下与 Arduino 进行通信。 Arduino IDE 有自己的脱离 USB 驱动程序的方法,这样就可以创建一个虚拟串行端口。让您的 Ardunio 改用 SoftwareSerial

    这是我found on the internet 的一个示例,其中有人遇到了冲突的公共汽车问题。

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多