nRF52840 Zigbee sleepy deep_sleep still draws ~5.88 mA with minimal YAML
The problem
I am testing the new ESPHome Zigbee sleepy/deep sleep support on an nRF52840 board, but even the most minimal Zigbee + deep_sleep YAML still draws about 5.88 mA after the firmware logs that it is entering sleep.
This looks like the MCU/radio/USB stack is not actually reaching low-power sleep/system-off, or something in the Zigbee/Zephyr path keeps the device awake.
Hardware
Board/module: MINI NRF52840 Development Board BT5.0 Bluetooth Module MCU Main Control Board 18*21MM QSPIFlash TYPE-C
The YAML currently uses:
nrf52:
board: xiao_blebecause this has been the working board profile for compiling/flashing this nRF52840 target.
Current measurement
Measured current after the sleep message: ~5.88 mA
Expected current for a real sleepy/deep sleep end device would be in the uA range, not mA.
ESPHome version
ESPHome 2026.6.2What I tested
I stripped the configuration down to a minimal Zigbee deep sleep test:
- no I2C
- no ADC
- no real sensors
- no custom measurement loop
- no application logic waiting for pairing/join
- only one dummy template sensor, because ESPHome Zigbee requires at least one endpoint
zigbee.sleepy: truedeep_sleep.run_duration: 10sdeep_sleep.sleep_duration: 1min
The generated code confirms that ESPHome configured deep sleep:
deep_sleep_test->set_sleep_duration(60000);
deep_sleep_test->set_run_duration(10000);The Zephyr backend generated for this build also contains sys_poweroff() in deep_sleep_zephyr.cpp, so it looks like the deep sleep path should be active.
Minimal YAML
substitutions:
firmware_variant: "zigbee-deep-sleep-test"
firmware_version: "2026.06.27-minimal-zigbee-deep-sleep-1min"
logger_baud: "115200"
awake_time: 10s
sleep_time: 1min
sleep_minutes: "1"
esphome:
name: nrf52840-zigbee-tof
friendly_name: nRF52840 Zigbee ToF
project:
name: jbrepogmailcom.zigbee_deep_sleep_test
version: ${firmware_version}
on_boot:
- priority: -100
then:
- logger.log:
format: "Firmware %s %s"
args: ['"${firmware_variant}"', '"${firmware_version}"']
- logger.log: "Minimal Zigbee deep sleep test: no sensors, no I2C, no ADC"
- logger.log: "Awake 10s, then native deep sleep for 1 minute"
nrf52:
board: xiao_ble
logger:
baud_rate: ${logger_baud}
level: DEBUG
zigbee:
power_source: BATTERY
wipe_on_boot: false
sleepy: true
deep_sleep:
id: deep_sleep_test
run_duration: ${awake_time}
sleep_duration: ${sleep_time}
preferences:
flash_write_interval: never
sensor:
- platform: template
id: dummy_battery
name: "Battery"
unit_of_measurement: "%"
accuracy_decimals: 0
update_interval: never
lambda: |-
return 100.0f;Question
Is this expected with the current nRF52 Zigbee sleepy/deep sleep implementation, or is there an additional required configuration/API call to actually put the nRF52840 + Zigbee radio into a uA-range sleep state?
If this should already work, what logs or generated files would be useful to debug why the device stays around 5.88 mA after entering deep sleep?
Source: esphome/esphome