6

我有一个非常简单的 python 脚本,它使用 pySerial 通过串行端口将数据发送到我的 Arduino。当我在 python shell 中逐行执行它时,它工作得很好,但是当我把它放在一个“.py”文件中并尝试运行它时,什么也没有发生。虽然我的 UART 上的串行灯闪烁。所以有些事情正在通过,但它是垃圾(我检查过)。

这是简单的代码。

import serial

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

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

4

6 回答 6

7

好的,我想通了!

在执行写入之前有必要使用这样的代码:

time.sleep(1)
ser.setDTR(level=0)
time.sleep(1)

否则,由于某种原因,arduino 在收到串行连接时会自动重置。耶!

于 2010-02-22T00:14:32.917 回答
2
import serial
import time 

ser = serial.Serial('/dev/ttyACM1', 9600, timeout=1)
time.sleep(3)      # this will needed for initializing arduino
serial.write(b'1') # b is necessary for byte
于 2017-05-03T21:48:03.080 回答
1

我注意到,如果您使用的是 Windows 64 位,那么 pyserial 根本无法工作。我使用的是 Python 2.7,在通过管理员帐户安装 x86 版本后,并使用上面提到的代码

time.sleep(1)

ser.setDTR(level=0)

time.sleep(1)

在写入之前附加,然后记住关闭端口,我能够让它作为脚本工作,而不仅仅是通过 CLI。此外,请确保以管理员身份运行 python GUI 或命令行。这也为我带来了成功。此外,请确保在运行代码之前关闭 Arduino 上的串行监视器。

于 2010-11-14T03:27:19.473 回答
0

也许是愚蠢的,但如果您在 Windows 上,请尝试在 cmd.exe 中仅键入“myscript.py”。我注意到在 Windows 上,您不需要在脚本名称前输入“python”。这当然适用于 Windows 上的标准 CPython 安装。

于 2010-02-20T08:56:04.483 回答
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 万倍,可能比原始计算机上的航天飞机快 10 万倍)它可能有时间启动 Python,执行数百万条指令...关闭控制台,在串行端口上发送单个字节之前的所有内容。

于 2013-02-02T09:55:53.937 回答
0

在我的情况下,以下工作。

    time.sleep(1)
    ser.setDTR(level=1) 
    time.sleep(1)
于 2016-03-10T05:11:01.210 回答