ESP8266返回垃圾值

时间:2016-04-13 06:38:34

标签: arduino wifi at-command esp8266 garbage

我正在开发一个基于Arduino的项目。当我通过串行监视器手动发送AT命令时,我得到了正确的响应,但是当我通过代码尝试相同的命令时,ESP8266返回垃圾值。我已经附上了回复图片,并上传了所使用的程序。

enter image description here

enter image description here

#include <SoftwareSerial.h>
// We'll use a software serial interface to connect to ESP8266
SoftwareSerial ESP8266 (2,3);
//rx=2 connected to 3 of arduino. tx=3 connected to 2 of arduino
const char SSID_ESP[]="xxxxxxxx";
const char SSID_KEY[]="xxxxxxxx";

void setup() {
  Serial.begin(115200);
  ESP8266.begin(115200);
  // Change this to the baudrate used by ESP8266
  delay(1000); // Let the module self-initialize
  ESP8266.println("AT");
  delay(1000);
  while (ESP8266.available()) Serial.write(ESP8266.read());
  delay(1000);
  ESP8266.println("AT+CWJAP");
  ESP8266.println(SSID_ESP);
  ESP8266.println("\",\"");
  ESP8266.println(SSID_KEY);
  ESP8266.println("\"\r\n");
  delay(1000);
  while(ESP8266.available()) Serial.write(ESP8266.read());
  delay(2000);
  ESP8266.println("AT+CWMODE=3");
  delay(1000);
  while(ESP8266.available()) Serial.write(ESP8266.read());
  delay(1000);
  ESP8266.println("AT+CIPMUX=0");
  delay(1000);
  while(ESP8266.available()) Serial.write(ESP8266.read());
  delay(1000);
  ESP8266.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80");
  delay(4000);
  while (ESP8266.available()) {
    Serial.write(ESP8266.read());
  }
}

void loop() {}

4 个答案:

答案 0 :(得分:2)

修复

<强> 1 AT命令在命令结束时期望\ r \ n。在这里,您将在命令的每个部分之后发送一个新行。

ESP8266.println("AT+CWJAP");
ESP8266.println(SSID_ESP);
ESP8266.println("\",\"");
ESP8266.println(SSID_KEY);
ESP8266.println("\"\r\n");

简单的解决方法是将所有ESP8266.println()更改为ESP8266.write()

<强> 2 此命令的语法在="之后还有AT+CWJAP https://github.com/espressif/ESP8266_AT/wiki/CWJAP

因此ESP8266.println("AT+CWJAP");应为ESP8266.println("AT+CWJAP=\"");

其他解决方案

这些类型的问题可能很难调试。出于这个原因,我尽量避免发送命令的一部分。如果使用字符串,调试会更容易。

这样做的好处是能够将命令发送到两个串行端口,这样您就可以确切地看到发送的内容。

String ConnectAPCmd = "AT+CWJAP=\"";
ConnectAPCmd += SSID_ESP;
ConnectAPCmd += "\",\"";
ConnectAPCmd += SSID_KEY;
ConnectAPCmd += "\"";
Serial.println("Sent: " + ConnectAPCmd);
ESP8266.println(ConnectAPCmd);

答案 1 :(得分:1)

如果您没有自己更换,ESP8266不会在波特115200上运行。 默认值为9600。 即使ESP8266以波特115200运行,Arduino也不会很好地处理115200软件序列。您可能希望更改为较低的波特率。

除此之外,我同意@hlovdal。使用write或print并将\ r \ n提供给每个命令的末尾,例如

*.cer

答案 2 :(得分:0)

我认为这可能是因为低功耗。尝试并联电源,例如使用几节AA电池的Arduino UNO板3.3v为ESP供电。

这使我的ESP8266-01停止返回垃圾字符,并且不时地停止断开连接。

答案 3 :(得分:0)

您面临的问题是波特率 - 115200 。 将波特率更改为 9600 ,它将解决您的问题。