Configuring a bluetooth proxy on esp32-c3

When I flash my esp32-c3 using esphome.io/projects selecting “Bluetooth proxy” and then selecting “generic esp32” and flashing with the device connected to my laptop, the device works perfectly. In home assistant I can see all the mac addresses of the broadcasting sensors seen by each esp32 bluetooth proxy, especially now there is the great graph on http://homeassistant.local:8123/config/bluetooth/visualization

However, I would like to customise a device. I have used the python esphome running locally to “take control” of the device. I place the encrypted string into home assistant and everything appears to be fine, but actually I then no longer see any bluetooth mac addresses from that device. I find it confusing to know which yaml file the esphome.io firmware was compiled with. Even if I flash the yaml file found in the github repo, I can’t get the device to see those bluetooth broadcasts any longer.

Does anyone know of an exact config that should behave in the same way as when I install the device via esphome.io?

Post your YAML code for the ESPHome device, so people can scan it for errors or missing sections.

Thanks for your response Wally.

So here is my configuration:

My yaml file
substitutions:
  name: esp32-bluetooth-proxy-7b526c
  friendly_name: Bluetooth Proxy 7b526c
  min_version: 2025.8.0

esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}

api:
  encryption:
    key: Mhe2pWNAeLA2u8zlwiKAwKzGokfyvyfen5sCTr

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

logger:
  level: VERY_VERBOSE
    
esp32:
  variant: esp32c3
  framework:
    type: esp-idf
    sdkconfig_options:
      CONFIG_BT_BLE_42_FEATURES_SUPPORTED: y
      CONFIG_BT_BLE_50_FEATURES_SUPPORTED: y

ota:
  - platform: esphome
    id: ota_esphome

esp32_ble_tracker:
  scan_parameters:
    active: true

bluetooth_proxy:
  active: true

button:
  - platform: safe_mode
    id: button_safe_mode
    name: Safe Mode Boot

  - platform: factory_reset
    id: factory_reset_btn
    name: Factory reset

After flashing, the logs reported in esphome dashboard contain many lines of:

[10:15:27.227][VV][esp32_ble_tracker:294]: gap_scan_result - event 0
[10:15:27.602][VV][esp32_ble_tracker:294]: gap_scan_result - event 0

Hey Rob,

based on Configuration Options Reference - ESP32-C3 - — ESP-IDF Programming Guide v5.5.1 documentation you should not enable CONFIG_BT_BLE_42_FEATURES_SUPPORTED and CONFIG_BT_BLE_50_FEATURES_SUPPORTED at the same time.

Please try to disable CONFIG_BT_BLE_42_FEATURES_SUPPORTED

BR
Rene

Hi Rene, thanks for the documentation links. I wondered where all those settings came from :slight_smile:

I made the changes but have no luck as far as the advertisement-monitor goes.

Just to reiterate the problem I noticed. If I flash the esp32-c3 (SuperMini) device with esphome.io web flasher via → “ready-made projects” → “bluetooth proxy”, the device shows all the discovered devices in Home Assistant in /config/bluetooth/advertisement-monitor and works perfectly.

If I then open the locally running esphome dashboard, it discovers the device and offers to “take control”. If I do take control it gives me the new key to paste into Home Assistant, and proceeds flashing the device. The new key works in Home Assistant, and it connects. However from this point on I no longer get discovered devices - and that is without making any changes to the yaml file at all.

If I click edit in esphome I can see this is the yaml code:

substitutions:
  name: esp32-bluetooth-proxy-30a144
  friendly_name: Bluetooth Proxy 30a144
packages:
  esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic/esp32-generic-c3.yaml@main
esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}
api:
  encryption:
    key: oyn52tdH5yD9gvX+nE56H5KJgFxIxnrLV5jBhb/dK4U=
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

And under Connection slot allocations monitor it now shows Source 0C:4E:A0:30:A1:46 not found when before it showed a description of the GATT and a slider showing the connection allocations.

So simply following the “take control” path stops the device discovery, and is not proxying my temperature updates for example any longer.

Hi!

Well it all works now. It seems removing the device, updating home assistant, and re-adding the device, caused everything to start working.

So I went through the whole process again flashing with esphome.io and then taking control, and it all works now!

Thanks for your help.