从树莓pi发送串行通信

2024-03-28 19:03:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python程序将一个树莓Pi的串行数据发送到一个Arduino。我正在运行Python2.7.3。程序是:

import serial

ser = serial.Serial('/dev/ttyACM0', 115200)

ser.write(b'\x4c\xff\x46')

问题是,如果这三行代码在程序中运行,它们似乎不会发送任何内容。但如果我在Python shell中逐行运行它们,它们就可以正常工作。

另外,如果我打开了Arduino串行监视器,程序也可以正常工作,而不必在shell中逐个运行这些行。

编辑以添加:

看来派往阿杜伊诺号有点耽搁。所以当我在解释模式下运行代码时,它是有效的,但如果作为一个程序,它就不起作用了。我想这是因为我在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

我在复位引脚和接地之间使用了一个220超滤电容器。那很有效。

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


Tags: 代码import程序http编辑serial模式shell
1条回答
网友
1楼 · 发布于 2024-03-28 19:03:00

试试这个。如果您不能在idle或etc下运行它,请输入python name.py来尝试terminal。我还建议您用putty检查来自Rpi或从Rpi写入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)

相关问题 更多 >