Pyserial 在 Arduino 中的问题 - 在 Python shell 中正常但程序中不行

9 投票
4 回答
5821 浏览
提问于 2025-04-15 15:20

好的,我很确定我的Arduino电路和代码都是正确的。我知道这一点是因为当我在Arduino的IDE里使用串口监视器发送'H'时,一个LED灯会亮起,而发送'L'时那个LED灯就会熄灭。

现在我写了一个Python程序:

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

当我运行这个代码时,LED灯会闪烁一下,亮起一秒钟,然后又熄灭。不过,当我在命令行里单独执行这些代码行时,它们的表现就像我预期的那样。

有没有什么想法?

4 个回答

1

为了让大家更明白,我会修改一下代码,让大家看到需要添加什么!

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

在代码中加一个“睡眠”语句,可以帮助串口顺利打开,不会出现问题!

6

我也遇到过同样的问题。如果我在打开串口连接后,等大约2秒再进行写入操作,就能正常工作。1秒的等待时间不够。

8

当你打开串口时,这会导致Arduino重启。因为Arduino启动需要一些时间,所以在这段时间内,所有输入都会被丢弃(或者可能被引导程序处理,但我们也不知道它具体做了什么)。如果你在代码中加一个暂停,就可以等Arduino启动完成,这样你的串口代码就能正常工作了。这就是为什么在交互模式下它能正常工作的原因;你其实是在等待大约1.5秒,让软件启动完成。

我确认打开串口确实会重置我的Arduino Uno;我上传了一个程序,让LED在setup()函数中闪烁——只要调用open("/dev/ttyACM0")就足以触发重启。这在我看来是串口支持中一个令人困惑且没有文档说明的细节。

撰写回答