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

Sending Serial Data to Arduino Using Python Script

我在 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

没有任何反应。我在这里错过了什么?

可能是端口处于文本模式,直到发送换行符才会发送数据:

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

或调用 flush()。

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

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

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

A​​rduino 上的 tx LED 将 blink。既然您知道模式的外观,请使用 Python 代码重复相同的实验。

如果 LED 不以同样的方式显示 link,则表明您遇到了串行端口访问问题,您可以使用以下 link 中的说明修复该问题 Access USB serial ports using Python and pyserial

如果没有,我很难过。

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