我正在嘗試使用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文件的片段。我不確定問題是什麼。
當我問到這個問題後,我發現有人提到你需要設置更多標題。我將不得不多看看這一點。是否有特定的標題,你知道我必須設置? –
https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending你想要的是USER_AGENT。 – dda