2016-04-15 102 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