espressif / esp-idf

Espressif IoT Development Framework. Official development framework for Espressif SoCs.
Apache License 2.0
13.03k stars 7.13k forks source link

Deep Sleep consumes high current even after call to shutdown WiFi (IDFGH-1097) #3418

Closed mreutman closed 5 years ago

mreutman commented 5 years ago

Environment

Problem Description

I'm trying to get Deep Sleep to work for a project that also uses WiFi. What I see is that if I go into deep sleep without initializing station mode and connecting to WiFi AP, the current consumption drops down to approximately 58uA. However, if I initialize WiFi and connect to nearby AP, attempt to power down WiFi by calling esp_wifi_stop (and esp_wifi_deinit to be safe), and then go into deep sleep, the current remains at nearly 60mA (where it jumped to when the WiFi on the ESP32 was turned on).

I'm not sure if there is something wrong in the SDK, if I'm using the API incorrectly, or if there is something in my configuration that is causing this.

Expected Behavior

When calling functions to disable the WiFi and enter deep sleep, the current consumption to drop to around 58uA.

Actual Behavior

Chip enters deep sleep but power consumption remains at nearly 60mA.

Steps to reproduce

  1. Initialize WiFi on ESP32 in station mode.
  2. Connect to local WiFi AP.
  3. Power down WiFi using esp_wifi_stop and ensuring it disconnects from WiFi AP.
  4. Enter deep sleep using timer function (configured using calls to esp_sleep_enable_timer_wakeup and esp_deep_sleep_start to cause ESP32 to wake up some time in the future.
  5. Measure current draw.

Code to reproduce this issue

I modified the example application in esp-idf/examples/wifi/getting_started/station and added the following to the end of the app_main function.

void app_main()
{
    //Initialize NVS
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
      ESP_ERROR_CHECK(nvs_flash_erase());
      ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);

    ESP_LOGI(TAG, "ESP_WIFI_MODE_STA");
    wifi_init_sta();

    ESP_LOGI(TAG, "wait....."); // measure current here for consumption under WiFi
    vTaskDelay(30000 / portTICK_PERIOD_MS);
    ESP_LOGI(TAG, "wifi stop");
    esp_wifi_stop();
    vTaskDelay(5000 / portTICK_PERIOD_MS); // wait a bit to make sure WiFi disconnects
    ESP_LOGI(TAG, "deinit");
    esp_wifi_deinit(); // deinit just to be safe
    esp_sleep_enable_timer_wakeup(15 * 1000000); // wake up 15 seconds in the future
    ESP_LOGI(TAG, "deep sleep");
    esp_deep_sleep_start(); // begin deep sleep
}

Debug Logs

I (10124) wifi station: ESP_WIFI_MODE_STA                                  
I (10124) wifi: wifi driver task: 3ffb7bb4, prio:23, stack:3072, core=0    
I (10124) wifi: wifi firmware version: 7240fb7                             
I (10124) wifi: config NVS flash: enabled
I (10124) wifi: config nano formating: enabled
I (10124) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (10124) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (10124) wifi: Init dynamic tx buffer num: 32
I (10124) wifi: Init data frame dynamic rx buffer num: 32
I (10124) wifi: Init management frame dynamic rx buffer num: 32
I (10124) wifi: Init management short buffer num: 32
I (10124) wifi: Init static rx buffer size: 1600
I (10224) wifi: Init static rx buffer num: 10
I (10224) wifi: Init dynamic rx buffer num: 32
I (10424) phy: phy_version: 4100, 2a5dd04, Jan 23 2019, 21:00:07, 0, 0
I (10424) wifi: mode : sta (cc:50:e3:8d:af:24)
I (10424) wifi station: wifi_init_sta finished.
I (10424) wifi station: connect to ap SSID:thesignal password:palmerho
I (10424) wifi station: wait.....
I (11124) wifi: new:<6,0>, old:<1,0>, ap:<255,255>, sta:<6,0>, prof:1
I (12124) wifi: state: init -> auth (b0)
I (12124) wifi: state: auth -> assoc (0)
I (12124) wifi: state: assoc -> run (10)
I (12124) wifi: connected with thesignal, channel 6, bssid = 20:e5:2a:60:b1:ca
I (12224) wifi: pm start, type: 1

I (15624) event: sta ip: 10.0.0.3, mask: 255.255.255.0, gw: 10.0.0.1
I (15624) wifi station: got ip:10.0.0.3
I (40424) wifi station: wifi stop
I (40424) wifi: state: run -> init (0)
I (40424) wifi: pm stop, total sleep time: lu us / lu us

I (40424) wifi: new:<6,0>, old:<6,0>, ap:<255,255>, sta:<6,0>, prof:1
I (40424) wifi: flush txq
I (40424) wifi: stop sw txq
I (40424) wifi: lmac stop hw txq
I (40424) wifi station: retry to connect to the AP
I (40424) wifi station: connect to the AP fail

I (45424) wifi station: deinit
I (45424) wifi: Deinit lldesc rx mblock:10
I (45424) wifi station: deep sleep

Other Items

Here are the defaults I use for building my applications.

#
# SDK tool configuration
#
CONFIG_TOOLPREFIX="/opt/xtensa-esp32-elf/bin/xtensa-esp32-elf-"
CONFIG_PYTHON="python"
CONFIG_MAKE_WARN_UNDEFINED_VARIABLES=y

#
# Bootloader config
#
CONFIG_LOG_BOOTLOADER_LEVEL_NONE=
CONFIG_LOG_BOOTLOADER_LEVEL_ERROR=
CONFIG_LOG_BOOTLOADER_LEVEL_WARN=
CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y
CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG=
CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE=
CONFIG_LOG_BOOTLOADER_LEVEL=3
CONFIG_BOOTLOADER_VDDSDIO_BOOST=y

#
# Serial flasher config
#
CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0"
CONFIG_ESPTOOLPY_BAUD_115200B=y
CONFIG_ESPTOOLPY_BAUD_230400B=
CONFIG_ESPTOOLPY_BAUD_921600B=
CONFIG_ESPTOOLPY_BAUD_2MB=
CONFIG_ESPTOOLPY_BAUD_OTHER=
CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200
CONFIG_ESPTOOLPY_BAUD=115200
CONFIG_ESPTOOLPY_COMPRESSED=y
CONFIG_FLASHMODE_QIO=
CONFIG_FLASHMODE_QOUT=
CONFIG_FLASHMODE_DIO=y
CONFIG_FLASHMODE_DOUT=
CONFIG_ESPTOOLPY_FLASHMODE="dio"
CONFIG_ESPTOOLPY_FLASHFREQ_80M=
CONFIG_ESPTOOLPY_FLASHFREQ_40M=y
CONFIG_ESPTOOLPY_FLASHFREQ_26M=
CONFIG_ESPTOOLPY_FLASHFREQ_20M=
CONFIG_ESPTOOLPY_FLASHFREQ="40m"
CONFIG_ESPTOOLPY_FLASHSIZE_1MB=
CONFIG_ESPTOOLPY_FLASHSIZE_2MB=
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=
CONFIG_ESPTOOLPY_FLASHSIZE="2MB"
CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y
CONFIG_ESPTOOLPY_BEFORE_RESET=y
CONFIG_ESPTOOLPY_BEFORE_NORESET=
CONFIG_ESPTOOLPY_BEFORE="default_reset"
CONFIG_ESPTOOLPY_AFTER_RESET=y
CONFIG_ESPTOOLPY_AFTER_NORESET=
CONFIG_ESPTOOLPY_AFTER="hard_reset"
CONFIG_MONITOR_BAUD_9600B=
CONFIG_MONITOR_BAUD_57600B=
CONFIG_MONITOR_BAUD_115200B=y
CONFIG_MONITOR_BAUD_230400B=
CONFIG_MONITOR_BAUD_921600B=
CONFIG_MONITOR_BAUD_2MB=
CONFIG_MONITOR_BAUD_OTHER=
CONFIG_MONITOR_BAUD_OTHER_VAL=115200
CONFIG_MONITOR_BAUD=115200

#
# Partition Table
#
CONFIG_PARTITION_TABLE_SINGLE_APP=
CONFIG_PARTITION_TABLE_TWO_OTA=
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000
CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv"
CONFIG_APP_OFFSET=0x10000

#
# Compiler options
#
CONFIG_OPTIMIZATION_LEVEL_DEBUG=y
CONFIG_OPTIMIZATION_LEVEL_RELEASE=
CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
CONFIG_OPTIMIZATION_ASSERTIONS_SILENT=
CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED=
CONFIG_CXX_EXCEPTIONS=
CONFIG_STACK_CHECK_NONE=y
CONFIG_STACK_CHECK_NORM=
CONFIG_STACK_CHECK_STRONG=
CONFIG_STACK_CHECK_ALL=
CONFIG_STACK_CHECK=

#
# Component config
#

#
# Application Level Tracing
#
CONFIG_ESP32_APPTRACE_DEST_TRAX=
CONFIG_ESP32_APPTRACE_DEST_NONE=y
CONFIG_ESP32_APPTRACE_ENABLE=
CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y

#
# Bluetooth
#
CONFIG_BT_ENABLED=y
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE_0=y
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE_1=
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI=y
CONFIG_BTDM_CONTROLLER_HCI_MODE_UART_H4=
CONFIG_BLUEDROID_ENABLED=y
CONFIG_BLUEDROID_PINNED_TO_CORE_0=y
CONFIG_BLUEDROID_PINNED_TO_CORE_1=
CONFIG_BLUEDROID_PINNED_TO_CORE=0
CONFIG_BTC_TASK_STACK_SIZE=8000
CONFIG_BLUEDROID_MEM_DEBUG=
CONFIG_CLASSIC_BT_ENABLED=
CONFIG_GATTS_ENABLE=y
CONFIG_GATTC_ENABLE=y
CONFIG_BLE_SMP_ENABLE=y
CONFIG_BT_STACK_NO_LOG=
CONFIG_BT_ACL_CONNECTIONS=4
CONFIG_SMP_ENABLE=y
CONFIG_BT_RESERVE_DRAM=0x10000

#
# ESP32-specific
#
CONFIG_ESP32_DEFAULT_CPU_FREQ_80=
CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160
CONFIG_MEMMAP_SMP=y
CONFIG_SPIRAM_SUPPORT=
CONFIG_MEMMAP_TRACEMEM=
CONFIG_MEMMAP_TRACEMEM_TWOBANKS=
CONFIG_ESP32_TRAX=
CONFIG_TRACEMEM_RESERVE_DRAM=0x0
CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH=
CONFIG_ESP32_ENABLE_COREDUMP_TO_UART=
CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y
CONFIG_ESP32_ENABLE_COREDUMP=
CONFIG_TWO_UNIVERSAL_MAC_ADDRESS=
CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y
CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4
CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32
CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2048
CONFIG_MAIN_TASK_STACK_SIZE=8192
CONFIG_IPC_TASK_STACK_SIZE=1024
CONFIG_TIMER_TASK_STACK_SIZE=3584
CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y
CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF=
CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR=
CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF=
CONFIG_NEWLIB_STDIN_LINE_ENDING_LF=
CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y
CONFIG_NEWLIB_NANO_FORMAT=y
CONFIG_CONSOLE_UART_DEFAULT=y
CONFIG_CONSOLE_UART_CUSTOM=
CONFIG_CONSOLE_UART_NONE=
CONFIG_CONSOLE_UART_NUM=0
CONFIG_CONSOLE_UART_BAUDRATE=115200
CONFIG_ULP_COPROC_ENABLED=
CONFIG_ULP_COPROC_RESERVE_MEM=0
CONFIG_ESP32_PANIC_PRINT_HALT=
CONFIG_ESP32_PANIC_PRINT_REBOOT=y
CONFIG_ESP32_PANIC_SILENT_REBOOT=
CONFIG_ESP32_PANIC_GDBSTUB=
CONFIG_ESP32_DEBUG_OCDAWARE=y
CONFIG_INT_WDT=y
CONFIG_INT_WDT_TIMEOUT_MS=10000
CONFIG_INT_WDT_CHECK_CPU1=y
CONFIG_TASK_WDT=y
CONFIG_TASK_WDT_PANIC=
CONFIG_TASK_WDT_TIMEOUT_S=5
CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y
CONFIG_BROWNOUT_DET=y
CONFIG_BROWNOUT_DET_LVL_SEL_0=y
CONFIG_BROWNOUT_DET_LVL_SEL_1=
CONFIG_BROWNOUT_DET_LVL_SEL_2=
CONFIG_BROWNOUT_DET_LVL_SEL_3=
CONFIG_BROWNOUT_DET_LVL_SEL_4=
CONFIG_BROWNOUT_DET_LVL_SEL_5=
CONFIG_BROWNOUT_DET_LVL_SEL_6=
CONFIG_BROWNOUT_DET_LVL_SEL_7=
CONFIG_BROWNOUT_DET_LVL=0
CONFIG_ESP32_TIME_SYSCALL_USE_RTC=
CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y
CONFIG_ESP32_TIME_SYSCALL_USE_FRC1=
CONFIG_ESP32_TIME_SYSCALL_USE_NONE=
CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y
CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL=
CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024
CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000
CONFIG_ESP32_XTAL_FREQ_40=y
CONFIG_ESP32_XTAL_FREQ_26=
CONFIG_ESP32_XTAL_FREQ_AUTO=
CONFIG_ESP32_XTAL_FREQ=40
CONFIG_DISABLE_BASIC_ROM_CONSOLE=
CONFIG_ESP_TIMER_PROFILING=

#
# Wi-Fi
#
CONFIG_SW_COEXIST_ENABLE=
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
CONFIG_ESP32_WIFI_TX_BA_WIN=6
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
CONFIG_ESP32_WIFI_RX_BA_WIN=6
CONFIG_ESP32_WIFI_NVS_ENABLED=y

#
# FreeRTOS
#
CONFIG_FREERTOS_UNICORE=
CONFIG_FREERTOS_CORETIMER_0=y
CONFIG_FREERTOS_CORETIMER_1=
CONFIG_FREERTOS_HZ=10
CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y
CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE=
CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL=
CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y
CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=
CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y
CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y
CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE=
CONFIG_FREERTOS_ASSERT_DISABLE=
CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1024
CONFIG_FREERTOS_ISR_STACKSIZE=1536
CONFIG_FREERTOS_LEGACY_HOOKS=
CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16
CONFIG_SUPPORT_STATIC_ALLOCATION=
CONFIG_TIMER_TASK_PRIORITY=1
CONFIG_TIMER_TASK_STACK_DEPTH=2048
CONFIG_TIMER_QUEUE_LENGTH=10
CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
CONFIG_FREERTOS_USE_TRACE_FACILITY=
CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=
CONFIG_FREERTOS_DEBUG_INTERNALS=

#
# Heap memory debugging
#
CONFIG_HEAP_POISONING_DISABLED=y
CONFIG_HEAP_POISONING_LIGHT=
CONFIG_HEAP_POISONING_COMPREHENSIVE=
CONFIG_HEAP_TRACING=

#
# Log output
#
CONFIG_LOG_DEFAULT_LEVEL_NONE=
CONFIG_LOG_DEFAULT_LEVEL_ERROR=
CONFIG_LOG_DEFAULT_LEVEL_WARN=
CONFIG_LOG_DEFAULT_LEVEL_INFO=y
CONFIG_LOG_DEFAULT_LEVEL_DEBUG=
CONFIG_LOG_DEFAULT_LEVEL_VERBOSE=
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_LOG_COLORS=y

#
# SPIFFS Configuration
#
CONFIG_SPIFFS_MAX_PARTITIONS=3

#
# SPIFFS Cache Configuration
#
CONFIG_SPIFFS_CACHE=y
CONFIG_SPIFFS_CACHE_WR=y
CONFIG_SPIFFS_CACHE_STATS=
CONFIG_SPIFFS_PAGE_CHECK=y
CONFIG_SPIFFS_GC_MAX_RUNS=10
CONFIG_SPIFFS_GC_STATS=
CONFIG_SPIFFS_OBJ_NAME_LEN=15
CONFIG_SPIFFS_USE_MAGIC=n
CONFIG_SPIFFS_USE_MAGIC_LENGTH=

#
# Debug Configuration
#
CONFIG_SPIFFS_DBG=
CONFIG_SPIFFS_API_DBG=
CONFIG_SPIFFS_GC_DBG=
CONFIG_SPIFFS_CACHE_DBG=
CONFIG_SPIFFS_CHECK_DBG=
CONFIG_SPIFFS_TEST_VISUALISATION=

#
# AWS Configuration
#
CONFIG_AWS_IOT_SDK=y
CONFIG_AWS_IOT_MQTT_HOST=""
CONFIG_AWS_IOT_MQTT_PORT=8883
CONFIG_AWS_IOT_MQTT_TX_BUF_LEN=1024
CONFIG_AWS_IOT_MQTT_RX_BUF_LEN=1024
CONFIG_AWS_IOT_MQTT_NUM_SUBSCRIBE_HANDLERS=5
CONFIG_AWS_IOT_MQTT_MIN_RECONNECT_WAIT_INTERVAL=1000
CONFIG_AWS_IOT_MQTT_MAX_RECONNECT_WAIT_INTERVAL=128000
CONFIG_AWS_IOT_OVERRIDE_THING_SHADOW_RX_BUFFER=
CONFIG_AWS_IOT_SHADOW_MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES=80
CONFIG_AWS_IOT_SHADOW_MAX_SIMULTANEOUS_ACKS=10
CONFIG_AWS_IOT_SHADOW_MAX_SIMULTANEOUS_THINGNAMES=10
CONFIG_AWS_IOT_SHADOW_MAX_JSON_TOKEN_EXPECTED=120
CONFIG_AWS_IOT_SHADOW_MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME=60
CONFIG_AWS_IOT_SHADOW_MAX_SIZE_OF_THING_NAME=40
mreutman commented 5 years ago

I went ahead and tried v4.0-dev-459-gba1ff1692 and v3.0.7-53-g9be6f0c0a releases of esp-idf to see if changing versions would fix the problem and (un)fortunately, it looks like I get the same behavior for those versions as well.

This leads me to believe that the issue lies either in my use of the API or some configuration setting I have.

igrr commented 5 years ago

@mreutman You have mentioned that you are using a DevKit-C. Can you please describe the method of current measurement? DevKit-C includes some supporting circuits which are not powered down in sleep, so it is very hard to obtain accurate results, at least not without modifying the PCB.

mreutman commented 5 years ago

Hi @igrr, thanks for taking some time to help me out! I have a multimeter wired in series to the 3.3V input pin and my PSU when running these tests.

I'm not too concerned with getting accurate results, but simply some degree of power savings that is in the ballpark of what is advertised in the datasheet. Ultimately, I want to use this with a product I am working on that utilizes the ESP32 and has additional circuitry in place. The Dev C kit exhibits the same behavior as my custom board, so I'm trying to use that to debug for now given it is understood by many more individuals.

One thing that seems very concerning is that I can get around 58uA when entering deep sleep mode without enabling WiFi on the Dev C board (i.e. I just comment out the call to wifi_init_sta in the application I've been using for testing), but stay at around 60mA when entering deep sleep with WiFi enabled/disabled beforehand. The three orders of magnitude difference between the two tests makes me think that I'm somehow not successfully shutting down the WiFi on the ESP32.

igrr commented 5 years ago

Is the USB-UART connected to the PC in both cases (when you are doing a no-wifi deep sleep measurement, and when doing a with-wifi deep sleep measurement)? 60mA looks about the amount of current that the USB-Serial chip consumes when it is not in the power-down mode.

mreutman commented 5 years ago

All tests have been performed with USB disconnected; unit powered by PSU through 3.3V input pin.

I just reran my test case where I put it into deep sleep before ever initializing WiFi and I measured a current draw of 2.3mA on the Dev C board. The 58uA value I initially reported for deep sleep was actually taken from the board I'm working on for a company product. I did reconfirm though that they both idle at around 60mA when trying to go to sleep after WiFi enable/disable. Apologies for the inaccurate data.

Does 2.3mA sound reasonable for a Dev C board with the ESP32 in deep sleep? And similarly, does 60mA sound reasonable for a Dev C board with WiFi enabled? Hoping I'm not overlooking something in my tests. Looking at the schematic for the Dev C kit though, I'm really not sure 2.3mA makes sense assuming the ESP32 is actually getting into deep sleep and it is only being powered by the 3v3 input. Something seems off to me.

mreutman commented 5 years ago

I believe my issue has been solved. It looks like the multi-meter I was using was affecting overall power delivery to the ESP32. As soon as I bumped my PSU's voltage from 3.3V to 4V, the unit entered into deep sleep consuming around 43uA.

I actually think that the meter was possibly even preventing WiFi from initializing, so that 60mA current I observed was some state before WiFi was fully enabled. The switch to 4V causes the ESP32 to jump to ~100mA current consumption where I believe it to be enabling WiFi. This is then followed by the disconnect and deep sleep putting the current at 43uA.

@igrr, thanks for taking the time to help trouble shoot. Sorry for the rabbit chase this caused.

MadDogMayCry0 commented 5 years ago

Same issue :( In my case i have 7uA without wifi and 1.3mA after wifi connection...

maikereis commented 4 years ago

2020, this help topic helped me. I was making the same mistake with my multimeter