我正在尝试使用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.您需要设置一些头,伪装成浏览器,从而作为人类用户传递。