我想使用arduino向esp8266发送一些AT命令,并从串口监视器获得回复。这是代码:(此代码的目的是更新一个thingpeak频道)
#include<SoftwareSerial.h>
SoftwareSerial esp8266(3,2);
#define ID "user"
#define PASS "pass"
String apiKey = "apikey";
void setup() {
Serial.setTimeout(5000);
Serial.begin(9600);
esp8266.begin(9600);
// delay(1000);
String command6="AT+RST";
esp8266.println(command6);
if(esp8266.available())
{
while(esp8266.available())
{
char c=esp8266.read();
Serial.write(c);
}
}
delay(2000);
}
void loop() {
delay(2000);
String command="\nAT";
esp8266.println(command);
if(esp8266.available())
{
while(esp8266.available())
{
char c=esp8266.read();
Serial.write(c);
}
}
String cmd = "\nAT+CIPSTART=\"TCP\",\"";
cmd += "144.212.80.11"; // api.thingspeak.com
cmd += "\",80";
esp8266.println(cmd);
if(esp8266.available())
{
while(esp8266.available())
{
char c=esp8266.read();
Serial.write(c);
}
}
delay(3000);
String command3="\nAT+CIPSEND=200";
esp8266.println(command3);
if(esp8266.available())
{
while(esp8266.available())
{
char c=esp8266.read();
Serial.write(c);
}
}
delay(1000);
String getStr = "GET /update?api_key=";
getStr += apiKey;
getStr += "&field1=10";
esp8266.println(getStr);
esp8266.println("\r\r\r\r\r\r\r\r");
if(esp8266.available())
{
while(esp8266.available())
{
char c=esp8266.read();
Serial.write(c);
}
}
delay(15000);
}
用户和通行证是我的wifi用户名和密码。问题是,esp8266对命令的响应“ok”但是当它到达最后的部分时,它给了我:
A))-R¤%%JHÕ¨TUPZ="TCP","144.212.80.11",80
CONNECT
OK
ERROR
AT+CIPSEND=200
OK
> GET /update?api_key=apikey&field1=10
CAT
AT+CIPSTART="TCP","144.212.80.11",80
AT+CIPSEND=200
GET /update?api_key=apikey&field1=10
AT
AT+CIPSTART="TCP","144.212.80.11",80
busy s...
我在代码中放了一些延迟但是在它插入GET后它返回循环再次运行程序没有延迟然后esp8266重置自己。
除了等待OK之外,您还需要确保为ThingSpeak使用正确的IP地址。 ThingSpeak的官方静态IP是184.106.153.149(http://www.mathworks.com/help/thingspeak/channel-settings.html#endpoints)。
尝试在之前的At命令之后使用/ n,并检查AT + CIPSEND的正确格式
获取http://api.thingspeak.com/update?api_key=KTQXXXXXXXXXXXXX&field1=10 HTTP / 1.0 \ r \ n \ r \ n
试试这种格式
在使用ESP8266
通过网络进行通信时,请记住以下几点。
100ms
或1ms
等。总会有随机延迟。GET/POST
请求时,检查ESP是否没有电流耗尽。'\r' '\n'
等)并将它们放入“Request”字符串中的正确位置。这可能会对你有所帮助:Arduino ESP8266 AT GET Request
谢谢。 :)