所以我有我的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。
答案 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