Skip to content

Power Saving

BTHome devices are often battery-powered. These configurations help minimize power consumption.

Lower the CPU frequency from 240MHz (default) to 80MHz for significant power savings:

esp32:
board: seeed_xiao_esp32s3
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80: y

Available frequencies:

  • CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240 - 240MHz (default, highest performance)
  • CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 - 160MHz (balanced)
  • CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 - 80MHz (lowest power)

Combine disabling WiFi on boot with power save mode for maximum savings:

wifi:
enable_on_boot: false
ap: {}
power_save_mode: HIGH

enable_on_boot: false - WiFi radio stays off at startup. BLE continues to work independently.

power_save_mode - Controls WiFi power consumption when enabled:

  • NONE - No power saving (default)
  • LIGHT - Light power saving, minimal latency impact
  • HIGH - Maximum power saving, higher latency

For maximum battery life, use deep sleep to power down the ESP32 completely between readings:

deep_sleep:
run_duration: 1min # Stay awake for 1 minute
sleep_duration: 5min # Sleep for 5 minutes

During deep sleep, the ESP32 consumes only ~10µA. The device will:

  1. Wake up from deep sleep
  2. Initialize BLE and sensors
  3. Broadcast sensor data for run_duration
  4. Enter deep sleep for sleep_duration
  5. Repeat
esphome:
name: bthome-sensor
friendly_name: BTHome Sensor
esp32:
board: seeed_xiao_esp32s3
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80: y
logger:
wifi:
enable_on_boot: false
ap: {}
power_save_mode: HIGH
esp32_ble:
id: ble
sensor:
- platform: internal_temperature
id: temp
update_interval: 60s # Less frequent updates
bthome:
min_interval: 30s # Longer advertising interval
max_interval: 60s
tx_power: -6 # Lower TX power
sensors:
- type: temperature
id: temp
SettingImpactRecommendation
Deep sleepVery HighUse for battery devices (~10µA sleep)
CPU frequencyHighUse 80MHz for BLE-only devices
WiFi on bootHighDisable with enable_on_boot: false
WiFi power saveMediumUse power_save_mode: HIGH
Advertising intervalMedium30s+ for battery devices
TX powerMediumLower if range permits
Sensor update intervalLowMatch to advertising interval
LoggerLowDisable in production

For production deployments, disable logging to save additional power:

logger:
level: NONE

Or remove the logger: section entirely.