我有一个非常简单的Python脚本,该脚本使用正序将数据通过串行端口发送到我的Arduino。当我在Python Shell中执行此行时,它可以正常工作,但是当我将其放入“ .py”文件中并尝试运行它时,什么也不会发生。尽管我的UART上的串行灯确实闪烁。因此,有些事情正在通过,但这是垃圾(我检查了)。

这是简单的代码。

import serial

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

我已经尝试添加睡眠,但是似乎没有修复它。有任何想法吗?

有帮助吗?

解决方案

好的,我已经弄清楚了!

必须在执行写作之前使用这样的代码:

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

否则,由于某种原因,Arduino在接收串行连接后自动重置。耶!

其他提示

我注意到,如果您在Windows 64位上,那么催化器根本不起作用。我正在使用Python 2.7,然后通过管理员帐户安装X86版本,并使用上述代码

time.sleep(1)

ser.setDTR(level=0)

time.sleep(1)

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

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

也许是愚蠢的,但如果您在Windows上,请尝试在CMD.exe中键入“ myScript.py”。我注意到在Windows上,您无需在脚本名称之前键入“ Python”。当然,这是在Windows上的标准CPYTHON安装。

关闭串行端口后,我可以建议再睡觉。

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的性能,大概比原始计算机上的航天飞机快十万次)可能有时间启动Python,执行执行数以百万计的说明...关闭控制台,在串行端口可能已发送单个字节之前。

就我而言,以下是有效的。

    time.sleep(1)
    ser.setDTR(level=1) 
    time.sleep(1)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top