我正在使用 Python 程序将串行数据从 Raspberry Pi 发送到 Arduino。我正在运行 Python 2.7.3。程序是:
import serial
ser = serial.Serial('/dev/ttyACM0', 115200)
ser.write(b'\x4c\xff\x46')
问题是,如果这三行在程序中运行,似乎什么也没有发送。但是如果我在 Python shell 中逐行运行它们,它们就可以正常工作。
此外,如果我打开 Arduino 串行监视器,程序也能正常工作,无需在 shell 中逐行运行。
编辑添加:
似乎发送到 Arduino 有一些延迟。因此,当我以解释模式运行代码时,它可以运行,但如果作为程序运行,则不会。我想那是因为我在 Windows 机器上尝试了相同的程序。
import serial
ser = serial.Serial('COM8', 115200)
ser.write(b'\x4c\x20\x46')
如果我在解释模式下运行程序,甚至在 Debug模式下在 ser.write 命令上设置断点,它都可以运行。但如果作为程序运行则不然。
编辑添加更多内容:
事实证明,Arduino 有一个必须禁用的串行通信自动重置:
http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection#.UwP_wfldV8E
http://forum.arduino.cc/index.php/topic,28723.0.html
我在 RESET 引脚和地之间使用了一个 220 uF 的电容器。这样可行。
被这样的 bug 咬到真难受!它仍然很聪明。
最佳答案
试试这个。如果您不能在闲置等情况下运行它,请通过键入 python name.py 尝试终端。我还建议您使用腻子检查来自/写入 Rpi 的数据以确保确定。
import serial
import time
def readlineCR(port):
rv = ""
while True:
ch = port.read()
rv += ch
if ch == '\r' or ch == '':
return rv
port = serial.Serial("/dev/ttyAMA0", baudrate = 7200, timeout = 2)
while True:
rcv = readlineCR(port)
port.write("I typed: " + repr(rcv))
print(rcv)
关于python - 从 Raspberry pi 发送串行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866762/