PySerial App在shell中运行,而不是py脚本

时间:2010-02-20 05:06:30

标签: python shell serial-port arduino pyserial

我有一个非常简单的python脚本,它使用pySerial通过串口将数据发送到我的Arduino。当我在python shell中逐行执行时,它工作正常,但是当我把它放在“.py”文件中并尝试运行它时,没有任何反应。虽然我的UART上的串行指示灯闪烁。所以有些东西正在通过,但它是垃圾(我检查过)。

这是简单的代码。

import serial

ser = serial.Serial('COM3',9600,timeout=.2)
ser.write('A')
ser.close()

我已经尝试过添加睡眠,但似乎没有任何东西可以修复它。有什么想法吗?

6 个答案:

答案 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)