2016-04-15 106 views
0

我正在尝试使用ESP8266和Arduino Uno连接到wunderground并获取JSON文件以获取当前天气。与我的代码,我连接到服务器罚款。什么似乎是问题是它没有给我整个返回文件。使用ESP8266将Arduino连接到wunderground

#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.0\r\n\r\n"; 
    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”,80 ACONNECT找到让你连接 AT + CIPSEND = 97 GET http://api.wunderground.com/api/7287eb3ace065563/conditions/q/Canada/Regina.json HTTP/1.0

忙小号...

的Recv 97个字节

SEND OK

+ IPD,1460:HTTP/1.0 “0.1”, “termsofService”: “http://www.wunderground.com/weather/api/d/terms.html”, “ 标志是假的

正如你可以看到我只得到JSON文件的片段。我不确定问题是什么。

回答

0

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

+0

当我问到这个问题后,我发现有人提到你需要设置更多标题。我将不得不多看看这一点。是否有特定的标题,你知道我必须设置? –

+0

https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending你想要的是USER_AGENT。 – dda