arduino和esp8266 - 如何将AT命令响应变为变量

时间:2016-02-25 21:00:01

标签: arduino at-command esp8266

所以我有我的arduino和esp8266 wifi模块。一切都正确连接并将数据发送到arduino让我通过AT命令控制连接。 我的skletch看起来像这样:

void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop()
{

  if (Serial.available() > 0) {
    char ch = Serial.read();
    Serial1.print(ch);
  }
  if (Serial1.available() > 0) {
    char ch = Serial1.read();
    Serial.print(ch);
}

上面的代码让我发送命令并查看esp的响应。尽管有不同的响应时间和不同的答案,我需要在wifi模块这样的响应创建时将响应存储在变量中。不幸的是,我无法做到这一点,因为Serial1.read()只从Serial1.available()缓冲区中获取一个char而不是完全缓冲区。

我试过这样的方法:

  if (Serial1.available() > 0) {
      while (Serial1.available() > 0) {
        char ch = Serial1.read();
        Serial.print(ch);
        response = response.concat(ch);
       }
    } else {
      String response = "";
    }

因此,只要在缓冲区中存在某些内容,就会将其发送到响应变量,该变量将最后一个char与自身连接起来。之后可以通过indefOf命令搜索" OK"标记或" ERROR"。但这并没有按预期工作:(例如,它可能会打印我的变量8次(不知道为什么)。 我需要从wifi模块完全响应,例如,如果正确的命令来自wifi网络,我的arduino板上的led,如果我按下arduino上的按钮到网络,也发送一些数据。任何想法都将不胜感激。

Kalreg。

1 个答案:

答案 0 :(得分:1)

试试这个:

String response = ""; // No need to recreate the String each time no data is available
char ch; // No need to recreate the variable in a loop

while (Serial1.available() > 0) {
  ch = Serial1.read();
  response = response.concat(ch);
}

// Now do whatever you want with the string by first checking if it is empty or not. Then do something with it

还要记得在发送上一个问题中建议的命令之前清除缓冲区:how to get AT response from ESP8266 connected to arduino