从Raspberry pi发送串行通信

时间:2014-02-18 22:22:44

标签: python serial-port arduino raspberry-pi

我使用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电容。这样可行。

很难被这样的虫子咬伤!它仍然很聪明。

1 个答案:

答案 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)