首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用ESP8266连接Arduino与ESP8266

利用ESP8266连接Arduino与ESP8266
EN

Stack Overflow用户
提问于 2016-04-15 07:36:57
回答 1查看 1.4K关注 0票数 1

我正在尝试使用ESP8266和Arduino Uno连接到current,并获取JSON文件以获取当前天气。使用我的代码,我可以连接到服务器。问题似乎是,它没有给我所有的返回文件。

代码语言:javascript
复制
#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字节 发送OK +IPD,1460:HTTP/1.0:"0.1","termsofService":"http://www.wunderground.com/weather/api/d/terms.html",“国旗是假的”

如您所见,我只得到JSON文件的一个片段。我不知道问题出在哪里。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-17 06:27:35

它根本没有发送JSON。它检测到您的Arduino/ESP组合不是人类,并且正在斥责您,让您知道您正在违反服务条款,正如http://www.wunderground.com/weather/api/d/terms.html中所描述的。您需要设置一些标题,将其伪装为浏览器,从而作为人工用户传递。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36641016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档