使用ESP8266将Arduino连接到神童乐园



我正在尝试使用ESP8266和Arduino Uno连接到神童世界,并获取JSON文件以获取当前天气。使用我的代码,我可以很好地连接到服务器。问题似乎是它没有给我完整的退货文件。

#include <SoftwareSerial.h>
#include <ArduinoJson.h>
SoftwareSerial esp8266(8, 9);
bool flag = true;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  esp8266.begin(9600);
}
void loop() {
  if (flag) {
    String cmd;
    int length;
    cmd = "AT+CIPSTART="TCP","";
    cmd += "api.wunderground.com";
    cmd += "",80";
    esp8266.println(cmd);
    Serial.println(cmd);
    delay(2000);
    Serial.write(esp8266.read());
    if (esp8266.find("CONNECT")) {
      Serial.println("CONNECT found so your connected");
    }
    String action;
    action = "GET http://api.wunderground.com/api/APIKEY/conditions/q/Canada/Regina.json HTTP/1.0rnrn";
    length = action.length();
    cmd = "AT+CIPSEND=";
    cmd += length;
    esp8266.println(cmd);
    Serial.println(cmd);
    delay(5000);
    if (esp8266.find(">")) {
      Serial.print(">");
    } else {
      esp8266.println("AT+CIPCLOSE");
      Serial.println(F("connect timeout"));
    }
    esp8266.println(action);
    Serial.println(action);
    delay(700);
    String test = "";
    while (esp8266.available()) {
      char c = esp8266.read();
      test += c;
    }
    Serial.println(test);
    flag = false;
    Serial.println("Flag is false");
  }
}

运行此代码会得到以下结果:

AT+CIPSTART="TCP","api.wunderground.com",80ACONNECT发现您的连接在+CIPSEND=97得到http://api.wunderground.com/api/7287eb3ace065563/conditions/q/Canada/Regina.jsonHTTP://1.0

繁忙的…

Recv 97字节

发送OK

+IPD,1460:HTTP/1.0:"0.1","服务条款":"http://www.wunderground.com/weather/api/d/terms.html","标志为错误

正如您所看到的,我只得到了JSON文件的一个片段。我不确定问题出在哪里。

它根本没有发送JSON。它检测到你的Arduino/ESP组合不是人类,正在斥责你,让你知道你违反了服务条款,如中所述http://www.wunderground.com/weather/api/d/terms.html.您需要设置一些头,伪装成浏览器,从而作为人类用户传递。

最新更新