求助ESP8266获取XML的问题
本帖最后由 benclee 于 2018-6-18 19:57 编辑#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
char ssid[] = "GTWY1";// WiFi名 SSID (name)
char pass[] = "58025952"; // WiFi密码
const unsigned long BAUD_RATE = 115200;
String payload = ""; //获取数据储存变量
String webadd = "http://wthrcdn.etouch.cn/WeatherApi?citykey=101010100"; //接口地址
int time1 = 0;//WIFI等待时间(500ms)
int sta,sta2;
String com;
void setup()
{
delay(1000);
Serial.begin(BAUD_RATE);
WiFi.begin(ssid, pass);//连接WIFI
}
void loop(){
http();
}
/*****************************************http数据获取*******************************************/
void http(){
HTTPClient http;
http.begin(webadd);
int httpCode = http.GET();//返回的代号200为正常
if(httpCode > 0) {
payload = http.getString();//获取XML数据
int a = payload.indexOf("shidu");
com = payload.substring(a,a+12);
Serial.println(payload);
Serial.println(httpCode);
Serial.println(com);
Serial.println(a);
}
http.end();
}
为什么获取不到XML数据呢。谢谢 嗯,这的确是个问题(原文:This is exactly a question)
请原谅我上面的废话,您这个问题真是有去试的。
结论:请求是成功的,但是无法正确获取到返回的数据,所以显示不出来。
至于原因请您自己去发掘,您可能觉得我又在说废话了...但是以我的描述能力是无法有效率地说明这个问题的,真是十分抱歉
作为补偿,我修改了示例里的代码,
下面这套代码能够获取相对完整的信息,并且能用串口输出一些东西来...但是处理编码的,所以看上去有点乱
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#define USE_SERIAL Serial
ESP8266WiFiMulti WiFiMulti;
void setup() {
USE_SERIAL.begin(115200);
// USE_SERIAL.setDebugOutput(true);
USE_SERIAL.println();
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf(" WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
}
WiFi.mode(WIFI_STA);
WiFiMulti.addAP("填上您的WIFI SSID", "填上您的WIFI密码");
}
void loop() {
// wait for WiFi connection
if((WiFiMulti.run() == WL_CONNECTED)) {
HTTPClient http;
USE_SERIAL.print(" begin...\n");
// configure server and url
http.begin("http://wthrcdn.etouch.cn/WeatherApi?citykey=101010100");
//http.begin("192.168.1.12", 80, "/test.html");
USE_SERIAL.print(" GET...\n");
// start connection and send HTTP header
int httpCode = http.GET();
if(httpCode > 0) {
// HTTP header has been send and Server response header has been handled
USE_SERIAL.printf(" GET... code: %d\n", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
// get lenght of document (is -1 when Server sends no Content-Length header)
int len = http.getSize();
// create buffer for read
uint8_t buff = { 0 };
// get tcp stream
WiFiClient * stream = http.getStreamPtr();
// read all data from server
while(http.connected() && (len > 0 || len == -1)) {
// get available data size
size_t size = stream->available();
if(size) {
// read up to 128 byte
int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));
// write it to Serial
USE_SERIAL.write(buff, c);
if(len > 0) {
len -= c;
}
}
delay(1);
}
USE_SERIAL.println();
USE_SERIAL.print(" connection closed or file end.\n");
}
} else {
USE_SERIAL.printf(" GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
delay(100000);
}
为了保证代码里不参杂奇怪的字符,这里来一份文本文件的下载
可惜本坛不支持直接上存文本文件,希望能对您有一点点帮助
页:
[1]