如何在Arduino串口打印AT命令响应?

时间:2016-04-07 11:49:43

标签: c arduino arduino-uno at-command esp8266

我想打印AT命令的响应。我发送了AT命令但是我没有在Arduino串口中得到任何响应。它给-1而不是OK。

@media (min-width: 0px) {
  .modal-backdrop-bg {
    opacity: 0.5 !important;
    background-color: #000;
  }
}

2 个答案:

答案 0 :(得分:1)

正如评论中已经指出的那样,你没有终止AT命令行,所以调制解调器永远不会响应这一点。

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

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

答案 1 :(得分:1)

正如您所知,使用回车符\r终止您的AT命令。此外,您当前的代码将只读取响应的一个字节,即如果响应已经到达,因为您根本没有包含任何延迟。要与串行监视器交互式地与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());
}

这基本上使您的Arduino成为PC和ESP之间通信的渠道。您可以使用串行监视器向ESP发送命令,并立即获得结果。它非常适合测试命令。只需记住将串行监视器设置为BOTH NL & CR;这将为您发送命令以及任何HTTP请求提供良好的服务,因为它会将\r\n附加到您发送的所有内容中。

如果您确实要编写草图以与ESP通信,则必须在发送命令以等待模块处理命令并进行响应后提供一些延迟。延迟取决于命令,至少500ms。通常的程序是为每个命令定义一个超时时间段,具体取决于它预期需要多长时间,之后如果还没有响应你就“放弃”。 GitHub上有很多库涉及使用AT命令与某些设备通信;研究他们学习他们的技术。