在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
什么都没有发生。我在这里想念什么?
答案 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会启动。