ESPHome basics
Start with ESP32 and ESPHome.
An ESPHome Bluetooth Proxy places a remote BLE radio near your devices and forwards data to Home Assistant over the network. It is especially useful when Home Assistant runs in a VM, rack, basement or metal enclosure.
BLE device ⇄ ESP32 Bluetooth Proxy ⇄ Wi-Fi/Ethernet ⇄ Home Assistantconnection_slots slot
and ESP32 memory.Use one when:
It cannot help when a device uses classic Bluetooth, requires an unsupported proprietary gateway or speaks a protocol ESPHome/Home Assistant cannot decode.
| Connection | Advantage | Trade-off |
|---|---|---|
| Wi-Fi | Inexpensive and easy to place | Wi-Fi and BLE share the 2.4 GHz radio |
| Ethernet | Stable network path with less radio contention | Requires cabling and a compatible board |
| PoE | One cable for power and network | More expensive hardware and correct PoE equipment |
A regular Wi-Fi ESP32 is often enough for passive temperature sensors. Ethernet or PoE can be more stable for several active locks, thermostats or persistent GATT links. An external antenna only helps when antenna, placement and configuration are correct.
ESPHome provides an official ready-made Bluetooth Proxy installer using WebSerial in a supported Chromium browser.
bt-proxy-living-room.Never select a “nearly identical” Ethernet board. Wrong PHY and pin settings can prevent networking from starting.
This minimal configuration uses ESP-IDF and stores credentials in
secrets.yaml:
substitutions: name: bt-proxy-living-room friendly_name: Bluetooth Proxy Living Room
esphome: name: ${name} friendly_name: ${friendly_name}
esp32: board: esp32dev framework: type: esp-idf
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
logger:
api: encryption: key: !secret api_encryption_key
ota: - platform: esphome password: !secret ota_password
esp32_ble_tracker:
bluetooth_proxy: active: true cache_services: true connection_slots: 3Confirm the board ID in ESPHome documentation. active: true enables active
connections while passive scanning also remains available. Official defaults
can change between ESPHome releases, so explicit values document this guide’s
choices.
After flashing:
RSSI alone does not prove active control. Verify discovery, state updates and a real command where applicable.
connection_slots limits simultaneous active GATT connections, not passive
sensor count.
Do not increase slots to solve poor range. Identify persistent connections and consider multiple well-placed proxies instead.
Ethernet/PoE with an external antenna may help difficult locations, but correct placement matters more than deploying the largest number of nodes.
ESP-IDF is recommended for Bluetooth Proxy. Very old devices or a switch from Arduino may involve a different partition table, and ordinary OTA does not always replace it.
Before migration:
Do not start a risky framework migration on an inaccessible device without a physical recovery plan.
Bluetooth scanning and active links consume RAM and radio time. Stability can drop when the same ESP32 also hosts:
On resets, reduce the device to the official minimal configuration, then add one feature at a time.
Check esp32_ble_tracker, API connectivity, distance, power supply and whether
the target actually broadcasts BLE advertisements. Confirm Home Assistant lists
the proxy as a Bluetooth adapter.
Passive reception works, but active GATT may not. Check integration support, free slots, RSSI and whether another device holds connections open.
Wi-Fi and BLE share a radio. Return to default scan parameters, improve Wi-Fi, remove web server/heavy components or test Ethernet.
Use ESP-IDF, reduce slots, remove web/audio features and verify the partition table. Preserve the boot log: watchdog, brownout and out-of-memory failures are different root causes.
Inspect Bluetooth diagnostics and RSSI over time. Move the proxy, remove interference and verify every proxy has a stable API connection.
ESPHome basics
Start with ESP32 and ESPHome.
Presence
Continue with the LD2410 mmWave guide.