Skip to content

HTTPClient POST getting stuck after few requests when used with deep sleep #580

@chris-gunawardena

Description

@chris-gunawardena

Hardware:

Board: Sparkfun ESP32 thing
Core Installation/update date: Latest stable
IDE name: Platform.io
Flash Frequency: 40Mhz
Upload Speed: 115200

Description:

I have a simple sketch that resumes from sleep every 60 seconds and performs a https POST request, but it seems to get stuck after 5 to 10 requests. I have tried with setReuse true/false and with HTTPClient http; in setup() and inside the loop()

I tried the same request without deep sleep and it's working fine. (sketch below)

Sketch that fails after 5 requests:

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

const char* firebase_ca =     "-----BEGIN CERTIFICATE-----\n" \
    "MIIEKDCCAxCgAwIBAgIQAQAhJYiw+lmnd+8Fe2Yn3zANBgkqhkiG9w0BAQsFADBC\n" \
    "MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMS\n" \
    "R2VvVHJ1c3QgR2xvYmFsIENBMB4XDTE3MDUyMjExMzIzN1oXDTE4MTIzMTIzNTk1\n" \
    "OVowSTELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMT\n" \
    "HEdvb2dsZSBJbnRlcm5ldCBBdXRob3JpdHkgRzIwggEiMA0GCSqGSIb3DQEBAQUA\n" \
    "A4IBDwAwggEKAoIBAQCcKgR3XNhQkToGo4Lg2FBIvIk/8RlwGohGfuCPxfGJziHu\n" \
    "Wv5hDbcyRImgdAtTT1WkzoJile7rWV/G4QWAEsRelD+8W0g49FP3JOb7kekVxM/0\n" \
    "Uw30SvyfVN59vqBrb4fA0FAfKDADQNoIc1Fsf/86PKc3Bo69SxEE630k3ub5/DFx\n" \
    "+5TVYPMuSq9C0svqxGoassxT3RVLix/IGWEfzZ2oPmMrhDVpZYTIGcVGIvhTlb7j\n" \
    "gEoQxirsupcgEcc5mRAEoPBhepUljE5SdeK27QjKFPzOImqzTs9GA5eXA37Asd57\n" \
    "r0Uzz7o+cbfe9CUlwg01iZ2d+w4ReYkeN8WvjnJpAgMBAAGjggERMIIBDTAfBgNV\n" \
    "HSMEGDAWgBTAephojYn7qwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUSt0GFhu89mi1\n" \
    "dvWBtrtiGrpagS8wDgYDVR0PAQH/BAQDAgEGMC4GCCsGAQUFBwEBBCIwIDAeBggr\n" \
    "BgEFBQcwAYYSaHR0cDovL2cuc3ltY2QuY29tMBIGA1UdEwEB/wQIMAYBAf8CAQAw\n" \
    "NQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2cuc3ltY2IuY29tL2NybHMvZ3RnbG9i\n" \
    "YWwuY3JsMCEGA1UdIAQaMBgwDAYKKwYBBAHWeQIFATAIBgZngQwBAgIwHQYDVR0l\n" \
    "BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQDKSeWs\n" \
    "12Rkd1u+cfrP9B4jx5ppY1Rf60zWGSgjZGaOHMeHgGRfBIsmr5jfCnC8vBk97nsz\n" \
    "qX+99AXUcLsFJnnqmseYuQcZZTTMPOk/xQH6bwx+23pwXEz+LQDwyr4tjrSogPsB\n" \
    "E4jLnD/lu3fKOmc2887VJwJyQ6C9bgLxRwVxPgFZ6RGeGvOED4Cmong1L7bHon8X\n" \
    "fOGLVq7uZ4hRJzBgpWJSwzfVO+qFKgE4h6LPcK2kesnE58rF2rwjMvL+GMJ74N87\n" \
    "L9TQEOaWTPtEtyFkDbkAlDASJodYmDkFOA/MgkgMCkdm7r+0X8T/cKjhf4t5K7hl\n" \
    "MqO5tzHpCvX2HzLc\n" \
    "-----END CERTIFICATE-----\n";;

const char* ssid = "xxx";
const char* password = "yyy";
RTC_DATA_ATTR int bootCount = 1;

void setup(){
  Serial.begin(115200);
  delay(5000);
  Serial.println("Boot number: " + String(bootCount++));

  // WiFi
  WiFi.begin(ssid, password); 
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");

  // POST  
  HTTPClient http;
  http.setReuse(true);
  http.begin("https://water-9dbfa.firebaseio.com/users/chris/readings.json", firebase_ca);
  http.addHeader("Content-Type", "application/json");
  int httpResponseCode = http.POST("{ \"level\": " + String(bootCount) + ", \"timestamp\": {\".sv\": \"timestamp\"} }");   
  Serial.println("httpResponseCode: " + http.errorToString(httpResponseCode));
  http.end();
  

  // sleep
  esp_deep_sleep_enable_timer_wakeup(10 * 1000000);
  esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
  esp_deep_sleep_start();
}

void loop(){

}

Debug Messages:

rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0x00
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0008,len:8
load:0x3fff0010,len:160
load:0x40078000,len:10632
load:0x40080000,len:252
entry 0x40080034
Boot number: 49
Reading: 3373
I (51382) wifi: wifi firmware version: 6c86a1c
I (51382) wifi: config NVS flash: enabled
I (51382) wifi: config nano formating: disabled
I (51392) wifi: Init dynamic tx buffer num: 32
I (51392) wifi: Init dynamic rx buffer num: 64
I (51393) wifi: wifi driver task: 3ffcfb0c, prio:23, stack:4096
I (51395) wifi: Init static rx buffer num: 10
I (51399) wifi: Init dynamic rx buffer num: 0
I (51403) wifi: Init rx ampdu len mblock:7
I (51407) wifi: Init lldesc rx ampdu entry mblock:4
I (51412) wifi: wifi power manager task: 0x3ffd4ed4 prio: 21 stack: 2560
I (51420) wifi: wifi timer task: 3ffd5f54, prio:22, stack:3584
I (51431) wifi: mode : sta (24:0a:c4:00:a1:7e)
I (51553) wifi: n:6 0, o:1 0, ap:255 255, sta:6 0, prof:1
I (52210) wifi: state: init -> auth (b0)
I (52212) wifi: state: auth -> assoc (0)
I (52216) wifi: state: assoc -> run (10)
I (52234) wifi: connected with FASTWEB-1-D2700B, channel 6
Connecting to WiFi..
Connected to the WiFi network
http begun
[E][WiFiClient.cpp:121] setSocketOption(): 9
{"name":"-KrVCaWKVFBRIP3sdrmU"}
ets Jun  8 2016 00:22:57

rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0x00
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0008,len:8
load:0x3fff0010,len:160
load:0x40078000,len:10632
load:0x40080000,len:252
entry 0x40080034
Boot number: 50
Reading: 1666
I (51382) wifi: wifi firmware version: 6c86a1c
I (51382) wifi: config NVS flash: enabled
I (51382) wifi: config nano formating: disabled
I (51392) wifi: Init dynamic tx buffer num: 32
I (51392) wifi: Init dynamic rx buffer num: 64
I (51393) wifi: wifi driver task: 3ffcfb0c, prio:23, stack:4096
I (51395) wifi: Init static rx buffer num: 10
I (51399) wifi: Init dynamic rx buffer num: 0
I (51403) wifi: Init rx ampdu len mblock:7
I (51407) wifi: Init lldesc rx ampdu entry mblock:4
I (51412) wifi: wifi power manager task: 0x3ffd4ed4 prio: 21 stack: 2560
I (51420) wifi: wifi timer task: 3ffd5f54, prio:22, stack:3584
I (51431) wifi: mode : sta (24:0a:c4:00:a1:7e)
I (51553) wifi: n:6 0, o:1 0, ap:255 255, sta:6 0, prof:1
I (52210) wifi: state: init -> auth (b0)
I (52212) wifi: state: auth -> assoc (0)
I (52216) wifi: state: assoc -> run (10)
I (52237) wifi: connected with FASTWEB-1-D2700B, channel 6
Connecting to WiFi..
Connected to the WiFi network
http begun
[E][ssl_client.cpp:25] handle_error(): X509 - Certificate verification failed, e.g. CRL, CA or signature check failed
[E][ssl_client.cpp:27] handle_error(): MbedTLS message code: -9984
[E][WiFiClientSecure.cpp:102] connect(): lwip_connect_r: 11
httpResponseCode: connection refused
ets Jun  8 2016 00:22:57

rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0x00
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0008,len:8
load:0x3fff0010,len:160
load:0x40078000,len:10632
load:0x40080000,len:252
entry 0x40080034
Boot number: 51
Reading: 2995
I (51372) wifi: wifi firmware version: 6c86a1c
I (51372) wifi: config NVS flash: enabled
I (51372) wifi: config nano formating: disabled
I (51382) wifi: Init dynamic tx buffer num: 32
I (51382) wifi: Init dynamic rx buffer num: 64
I (51383) wifi: wifi driver task: 3ffcfc60, prio:23, stack:4096
I (51385) wifi: Init static rx buffer num: 10
I (51389) wifi: Init dynamic rx buffer num: 0
I (51393) wifi: Init rx ampdu len mblock:7
I (51397) wifi: Init lldesc rx ampdu entry mblock:4
I (51402) wifi: wifi power manager task: 0x3ffd4f98 prio: 21 stack: 2560
I (51410) wifi: wifi timer task: 3ffd6000, prio:22, stack:3584
I (51421) wifi: mode : sta (24:0a:c4:00:a1:7e)
I (51543) wifi: n:6 0, o:1 0, ap:255 255, sta:6 0, prof:1
I (52200) wifi: state: init -> auth (b0)
I (52202) wifi: state: auth -> assoc (0)
I (52206) wifi: state: assoc -> run (10)
I (52274) wifi: connected with FASTWEB-1-D2700B, channel 6
Connecting to WiFi..
Connected to the WiFi network
http begun
I (62206) wifi: pm start, type:0


Gets stuck after this.

This sketch works fine without the deepsleep bit

#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
 
const char* firebase_ca =     "-----BEGIN CERTIFICATE-----\n" \
    "MIIEKDCCAxCgAwIBAgIQAQAhJYiw+lmnd+8Fe2Yn3zANBgkqhkiG9w0BAQsFADBC\n" \
    "MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMS\n" \
    "R2VvVHJ1c3QgR2xvYmFsIENBMB4XDTE3MDUyMjExMzIzN1oXDTE4MTIzMTIzNTk1\n" \
    "OVowSTELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMT\n" \
    "HEdvb2dsZSBJbnRlcm5ldCBBdXRob3JpdHkgRzIwggEiMA0GCSqGSIb3DQEBAQUA\n" \
    "A4IBDwAwggEKAoIBAQCcKgR3XNhQkToGo4Lg2FBIvIk/8RlwGohGfuCPxfGJziHu\n" \
    "Wv5hDbcyRImgdAtTT1WkzoJile7rWV/G4QWAEsRelD+8W0g49FP3JOb7kekVxM/0\n" \
    "Uw30SvyfVN59vqBrb4fA0FAfKDADQNoIc1Fsf/86PKc3Bo69SxEE630k3ub5/DFx\n" \
    "+5TVYPMuSq9C0svqxGoassxT3RVLix/IGWEfzZ2oPmMrhDVpZYTIGcVGIvhTlb7j\n" \
    "gEoQxirsupcgEcc5mRAEoPBhepUljE5SdeK27QjKFPzOImqzTs9GA5eXA37Asd57\n" \
    "r0Uzz7o+cbfe9CUlwg01iZ2d+w4ReYkeN8WvjnJpAgMBAAGjggERMIIBDTAfBgNV\n" \
    "HSMEGDAWgBTAephojYn7qwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUSt0GFhu89mi1\n" \
    "dvWBtrtiGrpagS8wDgYDVR0PAQH/BAQDAgEGMC4GCCsGAQUFBwEBBCIwIDAeBggr\n" \
    "BgEFBQcwAYYSaHR0cDovL2cuc3ltY2QuY29tMBIGA1UdEwEB/wQIMAYBAf8CAQAw\n" \
    "NQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2cuc3ltY2IuY29tL2NybHMvZ3RnbG9i\n" \
    "YWwuY3JsMCEGA1UdIAQaMBgwDAYKKwYBBAHWeQIFATAIBgZngQwBAgIwHQYDVR0l\n" \
    "BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQDKSeWs\n" \
    "12Rkd1u+cfrP9B4jx5ppY1Rf60zWGSgjZGaOHMeHgGRfBIsmr5jfCnC8vBk97nsz\n" \
    "qX+99AXUcLsFJnnqmseYuQcZZTTMPOk/xQH6bwx+23pwXEz+LQDwyr4tjrSogPsB\n" \
    "E4jLnD/lu3fKOmc2887VJwJyQ6C9bgLxRwVxPgFZ6RGeGvOED4Cmong1L7bHon8X\n" \
    "fOGLVq7uZ4hRJzBgpWJSwzfVO+qFKgE4h6LPcK2kesnE58rF2rwjMvL+GMJ74N87\n" \
    "L9TQEOaWTPtEtyFkDbkAlDASJodYmDkFOA/MgkgMCkdm7r+0X8T/cKjhf4t5K7hl\n" \
    "MqO5tzHpCvX2HzLc\n" \
    "-----END CERTIFICATE-----\n";;


const char* ssid = "xxxx";
const char* password = "yyy";
RTC_DATA_ATTR int bootCount = 1;

void setup(){
  Serial.begin(115200);
  delay(5000);

  // WiFi
  WiFi.begin(ssid, password); 
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");

}

void loop(){
  Serial.println("Boot number: " + String(bootCount++));

  // POST  
  HTTPClient http;
  http.setReuse(true);
  http.begin("https://water-9dbfa.firebaseio.com/users/chris/readings.json", firebase_ca);
  http.addHeader("Content-Type", "application/json");
  int httpResponseCode = http.POST("{ \"level\": " + String(bootCount) + ", \"timestamp\": {\".sv\": \"timestamp\"} }");   
  Serial.println("httpResponseCode: " + http.errorToString(httpResponseCode));
  http.end();
  delay(5000);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions