使用Python脚本将串行数据发送到Arduino

时间:2018-11-12 11:05:49

标签: python-3.x arduino pyserial

在macOS 10.14上使用python串行通信将字符写入Arduino时,我面临一个特殊的问题。

Arduino被编程为读取一个字符串,对其进行解析并采取PWM行动来开车。

Ardiuno的串行通信通道配置为接收格式为< A, B, C, D >的字符串,其中ABCD是表示轿厢方向,速度,转向方向和转向位置的数字。

问题是,当我从串行监视器或通过Python开发环境发送字符串时,该字符串将被接收,正确解析并成功执行命令。

但是,如果我在文件write.py中编写一个简单程序并从命令行执行它,则不会发生任何事情。

import serial
ser = serial.Serial('/dev/cu.usbmodem14301', 9600)
data = '<1,150,0,0>'
ser.write(data.encode())

如果我使用以下命令从macOS终端运行此脚本:

python write.py

什么都没有发生。我在这里想念什么?

3 个答案:

答案 0 :(得分:0)

可能是端口处于文本模式,并且在发送换行符之前不会发送数据:

data = '<1,150,0,0>\n'
ser.write(data.encode())

或flush()被调用。

data = '<1,150,0,0>'
ser.write(data.encode())
ser.flush()

答案 1 :(得分:0)

这里最有可能发生的事情是没有将数据发送到串行端口。

有一个简单的方法可以检查这一点。 将Arduino连接到您的笔记本电脑(我怀疑它是Mac),然后在Arduino IDE上启动串行监视器。 在串行监视器中,输入<1,150,0,0>并按发送。

Arduino上的tx LED将闪烁。现在您已经知道了模式的外观,对Python代码重复相同的实验。

如果LED指示灯没有以相同的方式闪烁,则说明您有串行端口访问问题,可以使用以下链接中的说明进行修复 Access USB serial ports using Python and pyserial

如果没有,我很困惑。

答案 2 :(得分:0)

ser=serial.Serial('/dev/cu.usbmodem14301',9600)的新USB连接重置了Arduino。连接后立即发送的数据会丢失,因为Arduino会启动。