我有一个非常简单的python脚本,它使用pySerial通过串口将数据发送到我的Arduino。当我在python shell中逐行执行时,它工作正常,但是当我把它放在“.py”文件中并尝试运行它时,没有任何反应。虽然我的UART上的串行指示灯闪烁。所以有些东西正在通过,但它是垃圾(我检查过)。
这是简单的代码。
import serial
ser = serial.Serial('COM3',9600,timeout=.2)
ser.write('A')
ser.close()
我已经尝试过添加睡眠,但似乎没有任何东西可以修复它。有什么想法吗?
答案 0 :(得分:7)
好的,我已经明白了!
在执行write之前必须使用这样的代码:
time.sleep(1)
ser.setDTR(level=0)
time.sleep(1)
否则,由于某种原因,arduino会在收到串行连接时自动重置。耶!
答案 1 :(得分:1)
我注意到如果你在Windows 64位上,那么pyserial根本不起作用。我正在使用Python 2.7,并在通过管理员帐户安装x86版本后,使用上面提到的代码
time.sleep(1)
ser.setDTR(level=0)
time.sleep(1)
在写入之前附加,并且记住之后关闭端口,我能够将其作为脚本而不仅仅通过CLI工作。另外,请确保以管理员身份运行python GUI或命令行。这对我来说也是一个成功的差异。另外,在运行代码之前,请确保Arduino上的串行监视器已关闭。
答案 2 :(得分:1)
{{1}}
答案 3 :(得分:0)
也许是愚蠢的,但如果您在Windows上,请尝试在cmd.exe中仅键入“myscript.py”。我注意到在Windows上,您不需要在脚本名称之前键入“python”。这当然适用于Windows上的标准CPython安装。
答案 4 :(得分:0)
这次,关闭串口后,我建议再睡一次。
import serial
ser = serial.Serial('COM3',9600,timeout=.2)
ser.write('A')
ser.close()
time.sleep(3000)
//for a first test, give a whopping 3 seconds
//sleep(100), 100 ms (0.1 second) may be enough in final product
基本原理是计算机变得如此之快(我的第一个x86在4.77 MHz的性能超过100万次,可能比原始计算机上的航天飞机快十万倍)它可能有时间启动Python,执行数百万条指令...关闭控制台,所有这些都可以在串口上发送单个字节之前。
答案 5 :(得分:0)
在我的情况下,以下工作。
time.sleep(1)
ser.setDTR(level=1)
time.sleep(1)