Python和Arduino串行通信:发送和接收

2024-04-19 03:55:10 发布

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

我要做的是查询Arduino以获取数据。当我从Python向Arduino发送命令时,Arduino将根据查询关键字返回一些数据。我可以这样做,但速度很慢,我希望有一个更有效的方法来做到这一点,例如,查询至少每秒100次。有什么想法吗?谢谢!在

我使用的代码:

Arduino公司:

int temp=1;
char s[2];
int speedIn=0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  if(Serial.available()>0){
    Serial.readBytes(s,1);
    speedIn=int(s[0]);
    if(speedIn==49){
      Serial.println(">Data1Send<");
      speedIn=0;
      }
    else if(speedIn==50){
      Serial.print(">");
      Serial.print(temp);
      Serial.println("<");
      speedIn=0;
      }
    else{
      Serial.println(">Wrong Data<");
      speedIn=0;
      }
    }
    if(temp<300){
      temp=temp+1;
      }
    //delay(100);
}

Python:

^{pr2}$

如果我将Python中的时间延迟从1.0秒更改为0.1秒,它将不再工作(无法接收数据,只是处于等待状态)。在


Tags: 数据方法命令ifserial关键字tempelse
1条回答
网友
1楼 · 发布于 2024-04-19 03:55:10

看起来您的python代码会执行以下操作:

  1. 发送命令
  2. 睡一段时间(大概是为了给arduino时间回复)
  3. 阅读回复
  4. 如果没有回复,请从步骤1开始重复

你说过如果睡眠时间太短就不行了。我想知道是否会发生以下情况。想象一下没有睡眠期。python代码将立即检查是否有应答,因为arduino没有时间响应,所以可能不存在。在这种情况下,它将立即尝试发送另一个命令。这种情况可能会反复发生,python代码实际上可能会用arduino无法跟上的请求充斥整个行。您可以使用休眠期来防止这种情况的发生,但是睡眠期可能比arduino实际需要的时间长,这会降低数据传输率。在

如果是这样的话,可以改为在python代码中执行此操作:

  1. 发送命令
  2. 等待arduino回复(但不使用睡眠)。理想情况下,使用一个read命令,直到接收到输入为止。一个不太可取的替代方法是忙碌等待进入一个只检查是否已收到回复并在输入可用时终止的循环。在
  3. 阅读回复
  4. 重复步骤1

相关问题 更多 >