从Raspberry pi发送串行通信

Daa*_*nii 5 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')
Run Code Online (Sandbox Code Playgroud)

问题是,如果它们在程序中运行,这三行似乎没有发送任何内容.但是如果我在Python shell中逐行运行它们,它们可以正常工作.

此外,如果我打开Arduino串行监视器,该程序也可以正常工作,而无需在shell中逐个运行这些行.

编辑添加:

似乎发送到Arduino有一些延迟.因此,当我在解释模式下运行代码时,它可以工作,但如果作为一个程序,它不会.我想是因为我在Windows机器上尝试了相同的程序.

import serial

ser = serial.Serial('COM8', 115200)

ser.write(b'\x4c\x20\x46')
Run Code Online (Sandbox Code Playgroud)

如果我在解释模式下运行程序,或者甚至在ser.write命令中使用断点的调试模式下运行,它都可以工作.但如果作为一个程序运行则不行.

编辑添加更多:

事实证明,Arduino在串行通信上具有自动复位功能,必须禁用:

http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection#.UwP_wfldV8E

http://forum.arduino.cc/index.php/topic,28723.0.html

我在RESET引脚和地之间使用了一个220 uF电容.这样可行.

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

Cag*_*men 5

试试这个.如果你不能在空闲或等等下运行它,请输入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)
Run Code Online (Sandbox Code Playgroud)