python - 从 Raspberry pi 发送串行通信

标签 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')

如果我在解释模式下运行程序,甚至在 Debug模式下在 ser.write 命令上设置断点,它都可以运行。但如果作为程序运行则不然。

编辑添加更多内容:

事实证明,Arduino 有一个必须禁用的串行通信自动重置:

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

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

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

被这样的 bug 咬到真难受!它仍然很聪明。

最佳答案

试试这个。如果您不能在闲置等情况下运行它,请通过键入 python name.py 尝试终端。我还建议您使用腻子检查来自/写入 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)

关于python - 从 Raspberry pi 发送串行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866762/

相关文章:

c# - asp C# 如何在同一个程序中通过串口读取和发送数据

JavaScript/JQuery 与 SerialPort/COM1 通信

Arduino 草图中的字符长度

python - 在 Django 中添加到 INSTALLED_APPS 的目的是什么?

python - 如何在python中排除字符组

python - 使用 openssl/bn.h 将 c++ 痛饮到 python

python - python2上的pip安装失败

c++ - Arduino C++,奇怪的数组行为

assembly - 如何计算汇编中两个 8 位值的 8 位平均值?

arduino - Xively 是否适合数据简单/不频繁且数据处理在外部完成的情况?