【问题标题】:Sending serial communication from Raspberry pi从 Raspberry pi 发送串行通信
【发布时间】:2014-02-18 22:22:44
【问题描述】:

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

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

【问题讨论】:

  • 您是否以具有相同权限的同一用户身份运行?
  • 是的,我以同一个用户身份运行,即使在同一个 shell 中。如果我使用行解释器,它可以工作。在同一个 shell 中,如果我将它作为程序运行,它就不起作用,除非我打开了 Arduino 串行监视器。
  • 所以你必须添加一个电容器才能成功地将数据从 pi 发送到 arduino?

标签: python serial-port arduino raspberry-pi


【解决方案1】:

试试这个。如果您无法在空闲等下运行它,请通过键入 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多