乐鑫技术交流
直播中

刘满贵

8年用户 1565经验值
私信 关注
[问答]

http代码连接被拒绝是为什么?

大家好,我正在使用 ESP8266(NodeMCU),在 Arduino IDE 中,我正在检测不同设备的功耗并将该数据作为 Json 文件发送到 Web 服务器,为了不向服务器发送垃圾邮件,我' m 创建一个包含 60 个 Json 对象的数组,其中保存数据。我尝试使用 For 循环来创建 Jsons 对象,但它在串行监视器上显示了一个名为“异常(2)”的问题,该问题重置了 ESP8266,我进行了研究,发现它发生在闪存被覆盖时,通常由 Wifi 函数,如 Wifi.begin() 和解决方案实施 Wifi.Persistent(false)。它对我没有用,所以我实施了其他策略,比如逐个创建 Json 对象,尽管它在我创建第十五个对象时似乎一开始工作,但 Exception(2) 再次出现并且消息“Connection Refused”。有些人通过用直接 IP 地址替换“localhost”来解决这个问题,但是对于我正在使用的服务器 Herokuapp,它不允许你直接使用它。
这是我的代码:
代码:全选#include
#include
#include
#include

String bearer = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3N1ZWRBdCI6MTU2MDQ4NjQ5NS45OTQ5MzUsImlzc3VlciI6I";
String Host = "http://efihome.herokuapp.com/api/logs";

int httpCode;


const char* ID = "abcdefg";
const char* PASS = "12345678";

HTTPClient http;  //Objeto de clase HTTPClient

const int capacity = JSON_ARRAY_SIZE(30) + 30 * JSON_OBJECT_SIZE(10);
StaticJsonDocument doc;
JsonObject obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8, obj9, obj10,
           obj11, obj12, obj13, obj14, obj15, obj16, obj17, obj18, obj19, obj20,
           obj21, obj22, obj23, obj24, obj25, obj26, obj27, obj28, obj29, obj30,
           obj31, obj32, obj33, obj34, obj35, obj36, obj37, obj38, obj39, obj40,
           obj41, obj42, obj43, obj44, obj45, obj46, obj47, obj48, obj49, obj50;

float current[60] = {1.5, 6.8, 5.0, 6.7, 6.2, 6.6, 1.5, 6.8, 5.0, 6.7,
                     6.2, 6.6, 1.5, 6.8, 5.0, 6.7, 6.2, 6.6, 1.5, 6.8,
                     5.0, 6.7, 6.2, 6.6, 6.6, 1.5, 6.8, 5.0, 6.7, 6.2,
                     6.6, 1.5, 6.8, 5.0, 6.7, 6.2, 6.6, 1.5, 6.8, 5.0,
                     6.7, 6.2, 6.6, 1.5, 6.8, 5.0, 6.7, 6.2, 6.6, 6.6};
double date = 1560456080;
String deviceID = "97367434-CA04-4FC7-A8BA-703DCFCBA081";
float power[60] = {20.5, 25.6, 10.0, 9.8, 15.2, 20.6, 20.5, 25.6, 10.0, 9.8,
                   15.2, 20.6, 20.5, 25.6, 10.0, 9.8, 15.2, 20.6, 20.5, 25.6,
                   10.0, 9.8, 15.2, 20.6, 15.2, 20.5, 25.6, 10.0, 9.8, 15.2,
                   20.6, 20.5, 25.6, 10.0, 9.8, 15.2, 20.6, 20.5, 25.6, 10.0,
                   9.8, 15.2, 20.6, 20.5, 25.6, 10.0, 9.8, 15.2, 20.6, 15.2};
float FactorPower[60] = {0.7, 0.8, 0.9, 1.0, 0.95, 0.8, 0.7, 0.8, 0.9, 1.0,
                         0.95, 0.8, 0.7, 0.8, 0.9, 1.0, 0.95, 0.8, 0.7, 0.8,
                         0.9, 1.0, 0.95, 0.8, 0.9, 1.0, 0.95, 0.8, 0.7, 0.8,
                         0.7, 0.8, 0.9, 1.0, 0.95, 0.8, 0.7, 0.8, 0.9, 1.0,
                         0.95, 0.8, 0.7, 0.8, 0.9, 1.0, 0.95, 0.8, 0.7, 0.8,
                         0.9, 1.0, 0.95, 0.8, 0.9, 1.0, 0.95, 0.8, 0.7, 0.8};
float voltage[60] = {117.5, 120.5, 118.9, 118.5, 119.2, 117.8, 117.5, 120.5, 118.9, 118.5,
                     119.2, 117.8, 117.5, 120.5, 118.9, 118.5, 119.2, 117.8, 117.5, 120.5,
                     118.9, 118.5, 119.2, 117.8, 116.8, 117.5, 120.5, 118.9, 118.5, 119.2,
                     117.8, 117.5, 120.5, 118.9, 118.5, 119.2, 117.8, 117.5, 120.5, 118.9,
                     118.5, 119.2, 117.8, 117.5, 120.5, 118.9, 118.5, 119.2, 117.8, 116.8};

void setup() {
  Serial.begin(9600);
  //  WiFi.persistent(false);
  WiFi.begin(ID, PASS);  //Inicia la conexión con la red Wi-Fi.

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting...");
  }

  Serial.println("WiFi Conectado");
  
  GETServidor();
}

void loop() {
  // put your main code here, to run repeatedly:

}

void GETServidor() {
  CreateObj(obj1, 0);
  CreateObj(obj2, 1);  
  CreateObj(obj3, 2);
  CreateObj(obj4, 3);
  CreateObj(obj5, 4);
  CreateObj(obj6, 5);
  CreateObj(obj7, 6);
  CreateObj(obj8, 7);
  CreateObj(obj9, 8);
  CreateObj(obj10, 9);
  CreateObj(obj11, 10);
  CreateObj(obj12, 11);
  CreateObj(obj13, 12);
  CreateObj(obj14, 13);
  CreateObj(obj15, 14);
  CreateObj(obj16, 15);
  CreateObj(obj17, 16);
  CreateObj(obj18, 17);
  CreateObj(obj19, 18);
  CreateObj(obj20, 19);
  CreateObj(obj21, 20);
  CreateObj(obj22, 21);
  CreateObj(obj23, 22);
  CreateObj(obj24, 23);
  CreateObj(obj25, 24);
  CreateObj(obj26, 25);
  CreateObj(obj27, 26);
  CreateObj(obj28, 27);
  CreateObj(obj29, 28);
  CreateObj(obj30, 29);
  CreateObj(obj31, 30);
  CreateObj(obj32, 31);  
  CreateObj(obj33, 32);
  CreateObj(obj34, 33);
  CreateObj(obj35, 34);
  CreateObj(obj36, 35);
  CreateObj(obj37, 36);
  CreateObj(obj38, 37);
  CreateObj(obj39, 38);
  CreateObj(obj40, 39);
  CreateObj(obj41, 40);
  CreateObj(obj42, 41);  
  CreateObj(obj43, 42);
  CreateObj(obj44, 43);
  CreateObj(obj45, 44);
  CreateObj(obj46, 45);
  CreateObj(obj47, 46);
  CreateObj(obj48, 47);
  CreateObj(obj49, 48);
  CreateObj(obj50, 49);
  
  // Each array until , = 185
  char rootBuffer[185*50];

  serializeJsonPretty(doc, rootBuffer);
  //Serial.println(rootBuffer);

  if (http.begin(Host)) {
    http.addHeader("Accept", "application/json");
    http.addHeader("Authorization", "Bearer " + bearer);
    http.addHeader("Content-Type", "application/json");
    httpCode = http.POST(rootBuffer);

    if (httpCode > 0) {
      Serial.printf("[HTTP] POST... code: %dn", httpCode);
      if (httpCode == HTTP_CODE_OK) {
        String payload = http.getString();
        Serial.println(payload);
      }
    }
    else {
      Serial.printf("[HTTP] POST... failed, error: %sn", http.errorToString(httpCode).c_str());
//      String payload = http.getString();
//      Serial.println(payload);
    }

    http.end();
  } else {
    Serial.println("Fallo en conexión con servidor");
  }
  //===================================================================================
  //===================================================================================
  //===================================================================================

}

void CreateObj(JsonObject obj, int i) {
  obj = doc.createNestedObject();
  obj["current"] = current;
  obj["date"] = date;
  obj["device_id"] = deviceID;
  obj["power"] = power;
  obj["factor_power"] = FactorPower;
  obj["voltage"] = voltage;
}

更多回帖

发帖
×
20
完善资料,
赚取积分