2016-04-07 124 views
1

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

#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() {} 
+2

不应该发送换行符(“AT \ n”)以获得回应吗? – Ctx

+0

我用esp.write(“AT \ n”);,但得到相同的结果“-1” – STACK2

+1

根据您的设备,可能需要“AT \ r \ n”? – Ctx

回答

1

正如在评论中已经指出的那样,您并未终止AT命令行,因此调制解调器将永远不会对此做出响应。

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

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

1

正如您所知,终止您的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()); 
} 

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

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