请原谅我上面的废话,您这个问题真是有去试的。
结论:请求是成功的,但是无法正确获取到返回的数据,所以显示不出来。
至于原因请您自己去发掘,您可能觉得我又在说废话了...但是以我的描述能力是无法有效率地说明这个问题的,真是十分抱歉
作为补偿,我修改了示例里的代码,
下面这套代码能够获取相对完整的信息,并且能用串口输出一些东西来...但是处理编码的,所以看上去有点乱
- #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("[SETUP] 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("[HTTP] 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("[HTTP] 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("[HTTP] 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[128] = { 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("[HTTP] connection closed or file end.\n");
- }
- } else {
- USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
- }
- http.end();
- }
- delay(100000);
- }
复制代码
为了保证代码里不参杂奇怪的字符,这里来一份文本文件的下载
可惜本坛不支持直接上存文本文件,希望能对您有一点点帮助
|