【问题标题】:Why is the communication between arduino and raspberry pi through serial so slow为什么arduino和树莓派通过串口通讯这么慢
【发布时间】:2019-07-10 05:03:56
【问题描述】:

我正在尝试通过串行连接将一些数据从树莓派发送到 arduino,但速度似乎太慢了。我要做的就是打开和关闭 arduino 板上的灯,然后通过串行连接发送切换灯的信号。

灯会在某个时间间隔打开和关闭,如下面的代码所示。当延迟大于 1 时,它工作正常,灯会打开和关闭,但是当我将延迟更改为小于 1 时,灯根本不闪烁。我尝试更改波特率,但这无济于事。两块板上的波特率相同。 下面的代码在树莓派上。

import serial
import time

serial_light = serial.Serial('/dev/ttyACM0', 250000)

delay = float (2)

while(1):
    inp = "60"
    print ("On\n")
    serial_light.write(inp.encode())
    time.sleep(float (delay))
    inp = "61"
    print ("Off\n")
    serial_light.write(inp.encode())
    time.sleep(float (delay))

//Arduino代码

int light = 13;

void setup()
{
    Serial.begin(250000);
    pinMode(light, OUTPUT);
}

void loop()
{
    int in = 0;
    while(Serial.available() == 0);
    in = Serial.parseInt();

    if(in == 60)
    {
        digitalWrite(light, HIGH);
    }
    else if(in == 61)
    {
        digitalWrite(light, LOW);
    }
}

再一次,它适用于延迟值 >= 1 但不在 0 和 1 之间。

【问题讨论】:

  • 串行通信对于简单的命令传输来说并不慢。看来您有代码实现问题。向我们展示您的 Arduino 代码以获得更好的帮助。
  • 已编辑,请参考上文

标签: arduino communication


【解决方案1】:

对于命令类型,我更喜欢使用 String 或 int,而不是 int 字符串。

您只需要在 Python 脚本中创建一个具有所需延迟的循环来发送开/关操作,然后在 Arduino 端接收命令并采取适当的操作。

Python 脚本:

import serial
import time

delay = 2
serial_light = serial.Serial('/dev/ttyACM0', 9600)
serial_light.open()
# flush serial for unprocessed data
serial_light.flushInput()
while(1):
    print("On")
    serial_light.write(b"on")
    time.sleep(delay)
    print("Off")
    serial_light.write(b"off")
    time.sleep(delay)

Arduino 代码:

int light = 13;

void setup()
{
    Serial.begin(9600);
    pinMode(light, OUTPUT);
}

void loop()
{
    // check if we have input command
    if (Serial.available())
    {
        // read input
        String command = Serial.readString();
        if (command == "on")
        {
            digitalWrite(light, HIGH);
        }
        else if (command == "off")
        {
            digitalWrite(light, LOW);
        }
    }
}

【讨论】:

  • 这也不起作用。如果您注意到即使您尝试将输入从串行监视器发送到 arduino 板,也需要大量时间,大约一秒。可能这就是 Pi 发生的事情
  • 我推迟了因为我认为你需要它。你可以删除它。
  • 请再次阅读原帖,正如我所提到的,对于 0 到 1 之间的任何延迟值,灯根本不会闪烁
猜你喜欢
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多