'ESP32 board_POST_Error_[E][WiFiClient.cpp:258] connect(): socket error on fd 56, errno: 113, "Software caused connection abort"

I need to send HTTP POST request using ESP32 module, to my REST API server which coded using python. But when running following code, an error comes. Running on Windows 10 OS. WiFi is connecting with the module. here I need to send "A" to the REST API server.

Code - Running on VSCode PlatformIO IDE.

#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>

const char *ssid = "***need to fill***";
const char *password = "***need to fill***";

const char *serverName = "***need to fill***";
String sensorReadings;

String httpGETRequest(const char *serverName);

void setup()
{
   Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED)
{
  Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
}

void loop()
{
 //Check WiFi connection status
if (WiFi.status() == WL_CONNECTED)
{
sensorReadings = httpGETRequest(serverName);
Serial.println(sensorReadings);
JSONVar myObject = JSON.parse(sensorReadings);

// JSON.typeof(jsonVar) can be used to get the type of the var
if (JSON.typeof(myObject) == "undefined")
{
  Serial.println("Parsing input failed!");
  return;
}

Serial.print("JSON object = ");
Serial.println(myObject);

// myObject.keys() can be used to get an array of all the keys in the object
JSONVar keys = myObject.keys();

for (int i = 0; i < keys.length(); i++)
{
  JSONVar value = myObject[keys[i]];
  Serial.print(keys[i]);
  Serial.print(" = ");
  Serial.println(value);
}
}
else
{
Serial.println("WiFi Disconnected");
}
delay(2000);
}

String httpGETRequest(const char *serverName)
{
WiFiClient client;
HTTPClient http;

 // Your Domain name with URL path or IP address with path
http.begin(client, serverName);
http.addHeader("Content-Type", "application/json");

 // Reading one byte from serial buffer
 uint8_t buffer;
 Serial.readBytes(&buffer, 1);

  // Dummy data to check
  // this is the hex value for
  // 'A' = 0x41
  buffer = 0x41;

 // creating payload buff
  char buff[100];
  sprintf(buff, "{\"Serial_Data\": \"%c\"}", buffer);

 // Send HTTP POST request
 int httpResponseCode = http.POST(buff);
 String payload = "{}";

 if (httpResponseCode > 0)
 {
 Serial.print("HTTP Response code: ");
 Serial.println(httpResponseCode);
 payload = http.getString();
 }
  else
 {
  Serial.print("Error code: ");
  Serial.println(httpResponseCode);
 }
  // Free resources
 http.end();

  return payload;
  }  

Error comes as below,

 [E][WiFiClient.cpp:258] connect(): socket error on fd 54, errno: 113, "Software caused 
 connection abort"
 Error code: -1
 {}
 JSON object = {}


Solution 1:[1]

Though this is very late I have an answer that could help any that will run into this problem. Follow the steps.

  1. Make sure you are running your service on a WiFi IP that your PC and the ESP-32 are connected to. In my case, my Pc is connected to the WiFi with the IP 192.168.43.178 and I am using FastAPI, so I have the following line of code in my run.py
import unicorn

if __name__ == "__main__":
    uvicorn.run("app.main:app", host="192.168.43.178", port=8080, reload=True)
  1. Increase the delay. When the dataset is huge, the ESP-32 needs more time to send it, therefore it is necessary to increase the delay to suit your needs of the data sending.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 LARTEY JOSHUA