我使用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')
如果我在解释模式下运行程序,或者甚至在ser.write命令中使用断点的调试模式下运行,它都可以工作。但如果作为一个程序运行则不行。
编辑添加更多:
事实证明,Arduino必须禁用串行通信的自动复位:
http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection#.UwP_wfldV8E
http://forum.arduino.cc/index.php/topic,28723.0.html
我在RESET引脚和地之间使用了一个220 uF电容。这样可行。
很难被这样的虫子咬伤!它仍然很聪明。
答案 0 :(得分:5)
试试这个。如果你不能在空闲或等等下运行它,请输入python name.py来尝试终端。我还建议你检查来自/写入Rpi的数据与putty一起确定。
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)