ESP8266返回垃圾值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP8266返回垃圾值相关的知识,希望对你有一定的参考价值。
我正在开发一个基于Arduino的项目。当我通过串行监视器手动发送AT命令时,我得到正确的响应,但是当我通过代码尝试相同的命令时,ESP8266返回垃圾值。我已经附上了两个响应图像,并且还上传了所使用的程序。
#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(""
");
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() {}
The Fix
1. AT命令在命令结束时需要 r n。在这里,您将在命令的每个部分之后发送一个新行。
ESP8266.println("AT+CWJAP");
ESP8266.println(SSID_ESP);
ESP8266.println("","");
ESP8266.println(SSID_KEY);
ESP8266.println(""
");
简单的解决方法是将所有ESP8266.println()
更改为ESP8266.write()
此外,此命令的语法在="
AT+CWJAP
之后有一个https://github.com/espressif/ESP8266_AT/wiki/CWJAP。
所以ESP8266.println("AT+CWJAP");
应该是ESP8266.println("AT+CWJAP="");
Other Solution
这些类型的问题可能很难调试。出于这个原因,我尽量避免发送命令的一部分。如果使用字符串,调试会更容易。
这样做的好处是能够将命令发送到两个串行端口,这样您就可以确切地看到发送的内容。
String ConnectAPCmd = "AT+CWJAP="";
ConnectAPCmd += SSID_ESP;
ConnectAPCmd += "","";
ConnectAPCmd += SSID_KEY;
ConnectAPCmd += """;
Serial.println("Sent: " + ConnectAPCmd);
ESP8266.println(ConnectAPCmd);
如果您没有自己更改,ESP8266不会在波特115200上运行。默认值为9600.即使ESP8266以波特率115200运行,Arduino也不会很好地处理115200软件序列。您可能希望更改为较低的波特率。
除此之外我同意@hlovdal。使用写入或打印并将 r n提供给每个命令的末尾,例如
ESP8266.write("AT+CWJAP=");
ESP8266.write(SSID_ESP);
ESP8266.write(",");
ESP8266.write(SSID_KEY);
ESP8266.write("
");
我想这可能是因为低功耗。尝试并联电源,例如使用几节AA电池的Arduino UNO板3.3v为ESP供电。
这使我的ESP8266-01停止返回垃圾字符,并且不时地停止断开连接。
您遇到的问题是因为波特率 - 115200.将波特率更改为9600,它将解决您的问题。
以上是关于ESP8266返回垃圾值的主要内容,如果未能解决你的问题,请参考以下文章
ESP8266 NodeMCU MicroPython 串行垃圾,无法擦除闪存或上传文件