2014-02-18 61 views
5

我使用Python程序将Raspberry Pi的串行数据发送到Arduino。我正在运行Python 2.7.3。该计划是:发送Raspberry Pi的串行通信

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

您是否以具有相同权限的相同用户身份运行? – BillyBigPotatoes

+0

是的,即使在同一个shell中,我仍以同一用户身份运行。如果我使用线路解释器,它可以工作。在同一个shell中,如果我将它作为程序运行,它不起作用,除非我打开Arduino串行监视器。 – Daanii

+0

所以你不得不添加一个电容器成功地将数据从pi发送到arduino? – marciokoko

回答

4

试试这个。如果你不能在闲置或其他情况下运行它,请尝试通过输入python name.py来终端。我还建议你用putty检查来自或写入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)