arduino和esp8266接口

问题描述 投票:1回答:3

我想使用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重置自己。

arduino at-command esp8266
3个回答
1
投票

除了等待OK之外,您还需要确保为ThingSpeak使用正确的IP地址。 ThingSpeak的官方静态IP是184.106.153.149(http://www.mathworks.com/help/thingspeak/channel-settings.html#endpoints)。


0
投票

尝试在之前的At命令之后使用/ n,并检查AT + CIPSEND的正确格式

获取http://api.thingspeak.com/update?api_key=KTQXXXXXXXXXXXXX&field1=10 HTTP / 1.0 \ r \ n \ r \ n

试试这种格式


0
投票

在使用ESP8266通过网络进行通信时,请记住以下几点。

  • 1可能不会在恒定时间内收到响应,即100ms1ms等。总会有随机延迟。
  • 2在发出GET/POST请求时,检查ESP是否没有电流耗尽。
  • 3检查每个字符/转义序列('\r' '\n'等)并将它们放入“Request”字符串中的正确位置。

这可能会对你有所帮助:Arduino ESP8266 AT GET Request

谢谢。 :)

© www.soinside.com 2019 - 2024. All rights reserved.