使用 ESP8266 将 Arduino 连接到 wunderground
Connecting Arduino to wunderground using ESP8266
我正在尝试使用 ESP8266 和 Arduino Uno 连接到 wunderground 并获取 JSON 文件以获取当前天气。使用我的代码,我可以很好地连接到服务器。问题似乎是它没有给我整个 return 文件。
#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 found so your connected
AT+CIPSEND=97
GET http://api.wunderground.com/api/7287eb3ace065563/conditions/q/Canada/Regina.json HTTP/1.0
busy s...
Recv 97 bytes
SEND OK
+IPD,1460:HTTP/1.0:"0.1",
"termsofService":"http://www.wunderground.com/weather/api/d/terms.html",
"
Flag is false
如您所见,我只得到了 JSON 文件的一个片段。我不确定是什么问题。
它根本没有发送 JSON。它检测到你的 Arduino/ESP combo 不是人,正在骂你,让你知道你违反了 http://www.wunderground.com/weather/api/d/terms.html 中描述的服务条款。您需要设置一些 headers,以伪装成浏览器,从而作为人类用户通过。
我正在尝试使用 ESP8266 和 Arduino Uno 连接到 wunderground 并获取 JSON 文件以获取当前天气。使用我的代码,我可以很好地连接到服务器。问题似乎是它没有给我整个 return 文件。
#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 found so your connected AT+CIPSEND=97 GET http://api.wunderground.com/api/7287eb3ace065563/conditions/q/Canada/Regina.json HTTP/1.0
busy s...
Recv 97 bytes
SEND OK
+IPD,1460:HTTP/1.0:"0.1", "termsofService":"http://www.wunderground.com/weather/api/d/terms.html", " Flag is false
如您所见,我只得到了 JSON 文件的一个片段。我不确定是什么问题。
它根本没有发送 JSON。它检测到你的 Arduino/ESP combo 不是人,正在骂你,让你知道你违反了 http://www.wunderground.com/weather/api/d/terms.html 中描述的服务条款。您需要设置一些 headers,以伪装成浏览器,从而作为人类用户通过。