http code: connection refused. exception(2) con ESP8266 NodeMCU

Buenas, Estoy trabajando con el Esp8266 NodeMCU enviando datos como objetos de tipo Json a un servidor. Para no generar spam al servidor una vez compilado un numero de datos, 60 en mi caso, los envié como un array. Inicialmente, decidi crear los objetos con un ciclo For, sin embargo al correr el programa este me generaba un error del tipo "Exception(2)" en el monitor serial, lo que reiniciaba el ESP. Investigando en distintos foros sobre esta problematica todo apunta a un problema con la memoria flash, y sugerian el uso de funciones como Wifi.Persistent(false) para evitar que los datos del WiFi sobreescribieran en la memoria y que esto causara su reinicio, sin embargo esto no funciono. Asi que decidi no usar el ciclo For y crear objeto por objeto a través de una funcion que llame 60 veces. Hasta el objeto 15, este envia los datos satisfactoriamente al servidor, pero al ingresarle más objetos, el error "Exception(2)" y reset del Esp8266 persisten asi como el mensaje del servidor de "Connection Refused".
En otros foros sugieren que se use directamente la dirrecion Ip, en vez de host, sin embargo por el servidor que estoy utilizando esto no es permitido.

Adjunto mi codigo:

#include <ESP8266WiFi.h>
#include <WiFiManager.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>

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

int httpCode;

const char* ID = "ADBCD";
const char* PASS = "1234567890";
HTTPClient http;  //Objeto de clase HTTPClient

const int capacity = JSON_ARRAY_SIZE(30) + 30 * JSON_OBJECT_SIZE(10);
StaticJsonDocument<capacity> 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);
  
  // Cada array hasta , = 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: %d\n", httpCode);
      if (httpCode == HTTP_CODE_OK) {
        String payload = http.getString();
        Serial.println(payload);
      }
    }
    else {
      Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());

    }

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

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

Buenas tardes,

Disculpa me dirías en que momento ocurre la Excepción? Hace mucho tuve un problema así y estaba relacionado con el tamaño de la memoria Flash, tuve que modificar el tamaño en las opciones de la tarjeta y así solucione el problema.

Saludos

Ocurre exactamente cuando ejecuta el http.POST, es decir, cuando va enviar los datos hacia el servidor.

Y el proxy que estas usando no está evitando la conexión? si pruebas desde una API REST hacer un POST lo puedes hacer sin problema o también te rechaza la conexión?

La conexión WiFi que tengo no creo que sea el problema, debido a que lo utilizo con postman y lo realiza sin ningún problema (supongo que el API REST al que te refieres es a algo como postman no?). Yo creo que es un problema interno del propio ESP el cual no he podido ver (sólo es una suposición), poseo poca experiencia con esto sinceramente.

Vale, podrías subir la respuesta que te arroja en el monitor serial? a ver si podemos concluir algo de allí, la verdad que las excepciones y los reset no son muy amplios

Esto es lo que me aparece en el monitor serial al correr el codigo:

Connecting...
Connecting...
Connecting...
WiFi Conectado

Exception (2):
epc1=0x3ffe89a5 epc2=0x00000000 epc3=0x00000000 excvaddr=0x3ffe89a4 depc=0x00000000

>>>stack>>>

ctx: sys
sp: 3ffeffd0 end: 3fffffb0 offset: 01a0
3fff0170:  3ffef0c6 00000000 ffff0004 3ffe8994  
3fff0180:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0190:  40d33333 00000000 ffff0008 3ffe898c  
3fff01a0:  3fff0190 3fff0140 00000020 00000000  
3fff01b0:  42ee6666 00000000 00000008 3ffe89ab  
3fff01c0:  3f4ccccd 00000000 ffff0008 3ffe899e  
3fff01d0:  41733333 00000000 ffff0008 3ffe89a5  
3fff01e0:  3ffef0a1 00000000 ffff0004 3ffe8994  
3fff01f0:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0200:  40c66666 00000000 ffff0008 3ffe898c  
3fff0210:  3fff0200 3fff01b0 fff90020 00000000  
3fff0220:  42ed0000 00000000 00000008 3ffe89ab  
3fff0230:  3f333333 00000000 ffff0008 3ffe899e  
3fff0240:  411ccccd 00000000 ffff0008 3ffe89a5  
3fff0250:  3ffef07c 00000000 ffff0004 3ffe8994  
3fff0260:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0270:  40d66666 00000000 ffff0008 3ffe898c  
3fff0280:  3fff0270 3fff0220 fff90020 00000000  
3fff0290:  42edcccd 00000000 00000008 3ffe89ab  
3fff02a0:  3f4ccccd 00000000 ffff0008 3ffe899e  
3fff02b0:  41200000 00000000 ffff0008 3ffe89a5  
3fff02c0:  3ffef057 00000000 ffff0004 3ffe8994  
3fff02d0:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff02e0:  40a00000 00000000 ffff0008 3ffe898c  
3fff02f0:  3fff02e0 3fff0290 fff90020 00000000  
3fff0300:  42f10000 00000000 00000008 3ffe89ab  
3fff0310:  3f733333 00000000 ffff0008 3ffe899e  
3fff0320:  41cccccd 00000000 ffff0008 3ffe89a5  
3fff0330:  3ffef032 00000000 ffff0004 3ffe8994  
3fff0340:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0350:  40d9999a 00000000 ffff0008 3ffe898c  
3fff0360:  3fff0350 3fff0300 fff90020 00000000  
3fff0370:  42eb0000 00000000 00000008 3ffe89ab  
3fff0380:  3f800000 00000000 ffff0008 3ffe899e  
3fff0390:  41a40000 00000000 ffff0008 3ffe89a5  
3fff03a0:  3ffef00d 00000000 ffff0004 3ffe8994  
3fff03b0:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff03c0:  3fc00000 00000000 ffff0008 3ffe898c  
3fff03d0:  3fff03c0 3fff0370 fff90020 00000000  
3fff03e0:  42e9999a 00000000 00000008 3ffe89ab  
3fff03f0:  3f666666 00000000 ffff0008 3ffe899e  
3fff0400:  41733333 00000000 ffff0008 3ffe89a5  
3fff0410:  3ffeefe8 00000000 ffff0004 3ffe8994  
3fff0420:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0430:  40d33333 00000000 ffff0008 3ffe898c  
3fff0440:  3fff0430 3fff03e0 fff90020 00000000  
3fff0450:  42eb999a 00000000 00000008 3ffe89ab  
3fff0460:  3f4ccccd 00000000 ffff0008 3ffe899e  
3fff0470:  41a4cccd 00000000 ffff0008 3ffe89a5  
3fff0480:  3ffeefc3 00000000 ffff0004 3ffe8994  
3fff0490:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff04a0:  40d33333 00000000 ffff0008 3ffe898c  
3fff04b0:  3fff04a0 3fff0450 fff90020 00000000  
3fff04c0:  42ee6666 00000000 00000008 3ffe89ab  
3fff04d0:  3f733333 00000000 ffff0008 3ffe899e  
3fff04e0:  41733333 00000000 ffff0008 3ffe89a5  
3fff04f0:  3ffeef9e 00000000 ffff0004 3ffe8994  
3fff0500:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0510:  40c66666 00000000 ffff0008 3ffe898c  
3fff0520:  3fff0510 3fff04c0 fff90020 00000000  
3fff0530:  42ed0000 00000000 00000008 3ffe89ab  
3fff0540:  3f800000 00000000 ffff0008 3ffe899e  
3fff0550:  411ccccd 00000000 ffff0008 3ffe89a5  
3fff0560:  3ffeef79 00000000 ffff0004 3ffe8994  
3fff0570:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0580:  40d66666 00000000 ffff0008 3ffe898c  
3fff0590:  3fff0580 3fff0530 fff90020 00000000  
3fff05a0:  42edcccd 00000000 00000008 3ffe89ab  
3fff05b0:  3f666666 00000000 ffff0008 3ffe899e  
3fff05c0:  41200000 00000000 ffff0008 3ffe89a5  
3fff05d0:  3ffeef54 00000000 ffff0004 3ffe8994  
3fff05e0:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff05f0:  40a00000 00000000 ffff0008 3ffe898c  
3fff0600:  3fff05f0 3fff05a0 fff90020 00000000  
3fff0610:  42f10000 00000000 00000008 3ffe89ab  
3fff0620:  3f4ccccd 00000000 ffff0008 3ffe899e  
3fff0630:  41cccccd 00000000 ffff0008 3ffe89a5  
3fff0640:  3ffeef2f 00000000 ffff0004 3ffe8994  
3fff0650:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0660:  40d9999a 00000000 ffff0008 3ffe898c  
3fff0670:  3fff0660 3fff0610 fff90020 00000000  
3fff0680:  42eb0000 00000000 00000008 3ffe89ab  
3fff0690:  3f333333 00000000 ffff0008 3ffe899e  
3fff06a0:  41a40000 00000000 ffff0008 3ffe89a5  
3fff06b0:  3ffeef0a 00000000 ffff0004 3ffe8994  
3fff06c0:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff06d0:  3fc00000 00000000 ffff0008 3ffe898c  
3fff06e0:  3fff06d0 3fff0680 fff90020 00000000  
3fff06f0:  42eb999a 00000000 00000008 3ffe89ab  
3fff0700:  3f4ccccd 00000000 ffff0008 3ffe899e  
3fff0710:  41a4cccd 00000000 ffff0008 3ffe89a5  
3fff0720:  3ffeeee5 00000000 ffff0004 3ffe8994  
3fff0730:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0740:  40d33333 00000000 ffff0008 3ffe898c  
3fff0750:  3fff0740 3fff06f0 fff90020 00000000  
3fff0760:  42ee6666 00000000 00000008 3ffe89ab  
3fff0770:  3f733333 00000000 ffff0008 3ffe899e  
3fff0780:  41733333 00000000 ffff0008 3ffe89a5  
3fff0790:  3ffeeec0 00000000 ffff0004 3ffe8994  
3fff07a0:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff07b0:  40c66666 00000000 ffff0008 3ffe898c  
3fff07c0:  3fff07b0 3fff0760 fff90020 00000000  
3fff07d0:  42ed0000 00000000 00000008 3ffe89ab  
3fff07e0:  3f800000 00000000 ffff0008 3ffe899e  
3fff07f0:  411ccccd 00000000 ffff0008 3ffe89a5  
3fff0800:  3ffeee9b 00000000 ffff0004 3ffe8994  
3fff0810:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0820:  40d66666 00000000 ffff0008 3ffe898c  
3fff0830:  3fff0820 3fff07d0 fff90020 00000000  
3fff0840:  42edcccd 00000000 00000008 3ffe89ab  
3fff0850:  3f666666 00000000 ffff0008 3ffe899e  
3fff0860:  41200000 00000000 ffff0008 3ffe89a5  
3fff0870:  3ffeee76 00000000 ffff0004 3ffe8994  
3fff0880:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0890:  40a00000 00000000 ffff0008 3ffe898c  
3fff08a0:  3fff0890 3fff0840 fff90020 00000000  
3fff08b0:  42f10000 00000000 00000008 3ffe89ab  
3fff08c0:  3f4ccccd 00000000 ffff0008 3ffe899e  
3fff08d0:  41cccccd 00000000 ffff0008 3ffe89a5  
3fff08e0:  3ffeee51 00000000 ffff0004 3ffe8994  
3fff08f0:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0900:  40d9999a 00000000 ffff0008 3ffe898c  
3fff0910:  3fff0900 3fff08b0 fff90020 00000000  
3fff0920:  42eb0000 00000000 00000008 3ffe89ab  
3fff0930:  3f333333 00000000 ffff0008 3ffe899e  
3fff0940:  41a40000 00000000 ffff0008 3ffe89a5  
3fff0950:  3ffeee2c 00000000 ffff0004 3ffe8994  
3fff0960:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0970:  3fc00000 00000000 ffff0008 3ffe898c  
3fff0980:  3fff0970 3fff0920 fff90020 00000000  
3fff0990:  42eb999a 00000000 00000008 3ffe89ab  
3fff09a0:  3f4ccccd 00000000 ffff0008 3ffe899e  
3fff09b0:  41a4cccd 00000000 ffff0008 3ffe89a5  
3fff09c0:  3ffeee07 00000000 ffff0004 3ffe8994  
3fff09d0:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff09e0:  40d33333 00000000 ffff0008 3ffe898c  
3fff09f0:  3fff09e0 3fff0990 fff90020 00000000  
3fff0a00:  42ee6666 00000000 00000008 3ffe89ab  
3fff0a10:  3f733333 00000000 ffff0008 3ffe899e  
3fff0a20:  41733333 00000000 ffff0008 3ffe89a5  
3fff0a30:  3ffeede2 00000000 ffff0004 3ffe8994  
3fff0a40:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0a50:  40c66666 00000000 ffff0008 3ffe898c  
3fff0a60:  3fff0a50 3fff0a00 fff90020 00000000  
3fff0a70:  42ed0000 00000000 00000008 3ffe89ab  
3fff0a80:  3f800000 00000000 ffff0008 3ffe899e  
3fff0a90:  411ccccd 00000000 ffff0008 3ffe89a5  
3fff0aa0:  3ffeedbd 00000000 ffff0004 3ffe8994  
3fff0ab0:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0ac0:  40d66666 00000000 ffff0008 3ffe898c  
3fff0ad0:  3fff0ac0 3fff0a70 fff90020 00000000  
3fff0ae0:  42edcccd 00000000 00000008 3ffe89ab  
3fff0af0:  3f666666 00000000 ffff0008 3ffe899e  
3fff0b00:  41200000 00000000 ffff0008 3ffe89a5  
3fff0b10:  3ffeed98 00000000 ffff0004 3ffe8994  
3fff0b20:  4eba0557 00000000 ffff0008 3ffe8d5e  
3fff0b30:  40a00000 00000000 ffff0008 3ffe898c  
3fff0b40:  3fff0b30 3fff0ae0 fff90020 00000000  
3fff0b50:  42f10000 00000000 00000008 3ffe89ab  
3fff0b60:  3f4ccccd 0000N⸮⸮W⸮⸮r⸮!⸮Connecting...

Vale,

Mira cuando yo tuve un problema similar conseguí que puede ser generado por un problema de la flash, en el link de abajo tienes un código para las banderas de las configuración

No se si ya trataste de cambiar el tamaño de la flash pero prueba con 4M (1M SPIFFS) o 4M (3M SPIFFS).

Si funciona nos avisas

Configure el tamaño de la flash tanto como 4M (1M SPIFFS) y 4M (3M SPIFFS), sin embargo el error de la Exepcion (2) persiste.

Compilé el código del GitHub que me sugeriste y estos fueron los resultados:

Flash real id:   00164068
Flash real size: 4194304 bytes

Flash ide  size: 4194304 bytes
Flash ide speed: 40000000 Hz
Flash ide mode:  QIO
Flash Chip configuration ok.

Bajo la impletación de este codigo lo busqie tambien en internet y en un foro intentan solucionar este mismo problema con este metodo ESP-12E Module: Exception (2) after boot · Issue #1675 · esp8266/Arduino · GitHub, sin embargo los resultados tampoco fueron tan satisfactorios, el caso sale como soluciondo he intente utilizar las otras estrategias que sugieren sin embargo mis resultados no fueron satisfactorios.

Bueno el código no es para solucionar, el código lo que hace es decirnos cual es la configuración ideal para el ESP8266 que esta dentro del Nodemcu, no se si puedas probar con otra placa a ver si el error persiste, la verdad es que yo trataría de programar el ESP8266 desde el puerto RX y TX con un convertidor USB TTL, y cambiando las opciones de compilación a las que te indica el código que ejecutaste, la verdad es que ya no se me ocurre otra cosa. La verdad lamento no ser de más ayuda. :frowning: