Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在Arduino串行端口中打印对AT命令的响应?_C_Arduino_Arduino Uno_At Command_Esp8266 - Fatal编程技术网

C 如何在Arduino串行端口中打印对AT命令的响应?

C 如何在Arduino串行端口中打印对AT命令的响应?,c,arduino,arduino-uno,at-command,esp8266,C,Arduino,Arduino Uno,At Command,Esp8266,我想打印对AT命令的响应。我正在发送AT命令,但在Arduino串行端口中没有收到任何响应。它给出的是-1而不是OK #include "SoftwareSerial.h" String ssid = "connectify-krish"; String password = "12345678"; String myword= ""; SoftwareSerial esp(10, 11); void setup() { Serial.begin(9600); esp.begin(96

我想打印对AT命令的响应。我正在发送AT命令,但在Arduino串行端口中没有收到任何响应。它给出的是-1而不是OK

#include "SoftwareSerial.h"
String ssid = "connectify-krish";
String password = "12345678";

String myword= "";
SoftwareSerial esp(10, 11);
void setup() {
  Serial.begin(9600);
  esp.begin(9600);
  esp.write("AT");
  Serial.println(esp.read());
}

void loop() {}

正如评论中已经指出的,您没有终止AT命令行,因此调制解调器将永远不会对此作出响应

确保阅读了V.250并了解AT命令和AT命令行之间的区别
ATI
是一个AT命令,
“ATI I\r”
是一个连续三次调用此命令的命令行。顺便注意一下,在本例中,您将只获得三个命令行的一个最终结果代码,即最终结果代码是对完整命令行的响应,而不是对单个命令调用的响应


然后,在修复了命令的发送之后,您必须实现对响应的正确处理。这包括读取和解析调制解调器作为对已发送命令行的响应而发回的内容。有关代码结构和实现提示,请参阅。

如前所述,使用回车符终止AT命令
\r
。另外,您当前的代码将只读取响应的一个字节,如果响应已经到达,因为您根本没有包含延迟。要通过串行监视器与ESP进行交互通信,我建议使用以下方法:

#include <SoftwareSerial.h>

SoftwareSerial esp(10, 11);
void setup(){
  Serial.begin(9600);
  esp.begin(9600);
}

void loop()
{
  while (Serial.available())  // forward data from monitor to esp
    esp.write(Serial.read());
  while (esp.available())  // forward data from esp to monitor
    Serial.write(esp.read());
}
#包括
软件串行esp(10,11);
无效设置(){
Serial.begin(9600);
特别是贝京(9600);
}
void循环()
{
while(Serial.available())//将数据从监视器转发到esp
esp.write(Serial.read());
while(esp.available())//将数据从esp转发到监视器
串行写入(特别是读取());
}
这基本上使您的Arduino成为PC和ESP之间通信的管道。您可以使用串行监视器向ESP发送命令,并立即获得结果。它非常适合测试命令。只需记住将串行监视器同时设置为NL和CR
;这将很好地用于命令以及您发送的任何HTTP请求,因为它将
\r\n
附加到您发送的所有内容中


如果您确实希望编写草图与ESP对话,则必须在发送命令后提供一些延迟,以等待模块处理该命令并作出响应。延迟取决于命令,至少500毫秒。通常的过程是为每个命令定义一个超时时间,这取决于它预计需要多长时间,之后如果没有响应,您将“放弃”。GitHub上有很多库,涉及到使用AT命令与某些设备对话;学习他们的技巧。

你不应该发送一条新行(“AT\n”)以获得回复吗?我使用了esp.write(“AT\n”);,但是得到了相同的结果“-1”,这取决于您的设备,可能需要“AT\r\n”?是的,它似乎在\r\n。见第7页,注5。不,不,不!终止AT命令行的唯一正确方法是仅使用
\r
(除非您弄乱了S3寄存器,否则不应该这样做)。这一点非常清楚,请参见“5.2 DTE命令行”一章