How to Build an ESP32 Bluetooth Proxy Network for Home Assistant
If your smart home relies on Bluetooth Low Energy sensors — temperature tags, contact sensors, presence beacons — you’ve hit the dead zone problem. A single USB dongle on your Home Assistant server can’t reach the far end of a house, let alone through brick walls or into a basement.
The fix is a Bluetooth proxy network: cheap ESP32 boards placed around your home that relay BLE traffic over WiFi back to Home Assistant. Multiple proxies work together transparently — Home Assistant aggregates them into a single, fault-tolerant Bluetooth mesh. No second server. No expensive hubs. Just $3 microcontrollers running ESPHome.
This guide covers everything from your first flash to optimizing coverage for a whole-house deployment.
What You’ll Need
| Item | Cost | Notes |
|---|---|---|
| ESP32 board (any variant) | $2–5 | ESP32-WROOM, ESP32-C3 SuperMini, or ESP32-S3 |
| USB power cable | $1 | Micro USB or USB-C depending on board |
| MicroSD card reader (for first flash) | — | Only if not flashing via web |
| Home Assistant instance | — | With ESPHome add-on installed |
Board recommendations from official ESPHome docs: For best performance, use a board with an Ethernet connection and external antenna — the Olimex ESP32-PoE-ISO-EA is the top recommendation. For most home users, a $3 ESP32-C3 SuperMini on WiFi works fine.
Flashing Your First Proxy
The fastest path is the ESPHome web installer — no software to install. Browse to ESPHome Bluetooth Proxy projects, pick a pre-built firmware, and click to flash.
For more control, use the ESPHome add-on inside Home Assistant:
substitutions:
name: living-room-proxy
esphome:
name: ${name}
name_add_mac_suffix: true
esp32:
variant: esp32
framework:
type: esp-idf
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
logger:
api:
ota:
platform: esphome
esp32_ble_tracker:
bluetooth_proxy:
active: true
Why esp-idf framework matters: The Arduino framework uses more RAM and can cause instability with active Bluetooth connections. From the ESPHome docs: “Use esp-idf framework — uses less memory than arduino.” For ESP32-C3 boards, this is mandatory for reliable proxy performance.
Flash the device via USB, let it connect to WiFi, then confirm it appears in Home Assistant under Settings → Devices & Services → ESPHome.
Configuring for Range and Reliability
Default scan parameters work well for most setups, but you can tune them for your environment:
esp32_ble_tracker:
scan_parameters:
interval: 800ms
window: 800ms
active: true
bluetooth_proxy:
active: true
connection_slots: 3
The official ESPHome docs warn against aggressive scan tuning: “Changing interval or window from their defaults typically provides no meaningful benefit while increasing CPU usage and network traffic. Aggressive scan settings can cause overheating on PoE-based proxies and WiFi instability on WiFi-based proxies.”
Key numbers:
- Each active GATT connection uses one slot and ~1 KB of RAM
- Max
connection_slotsis 9; recommended maximum is 5 - Passive broadcast data (BTHome, Xiaomi sensors) is not limited by connection slots — you can have dozens of broadcasting sensors hitting one proxy
- Boards using Ethernet can reliably handle 4+ connection slots
Placing Proxies for Maximum Coverage
The physical placement of your proxies determines whether your $3 investment actually solves the dead zone problem.
- Spacing rule: Place a proxy every 30–50 feet in your home, depending on wall construction. Brick and concrete block more signal than drywall.
- Avoid interference: Keep ESP32s at least 10 feet from WiFi routers, network switches, and microwave ovens. The ESP docs state: “Maintain at least 3 meters distance for best signal.”
- High traffic zones first: Start with the living room (where your phone and most sensors are), then expand to bedrooms, garage, and basement.
- Ethernet is better for dense areas: If you have a room with 6+ BLE devices (e.g., a workshop with sensor-packed shelving), use an Ethernet-based proxy to offload WiFi contention from the ESP32’s radio.
Each proxy auto-connects to Home Assistant. You don’t need to configure anything on the server side — just add another ESPHome node and Home Assistant begins routing BLE traffic through it.
Integrating with Home Assistant
Once proxies are live, compatible BLE devices appear automatically. Home Assistant scans the proxy network and discovers:
- Xiaomi LYWSD02 / LYWSD03 temperature and humidity sensors
- SwitchBot contact and motion sensors
- Govee thermometers and hygrometers (models with BLE)
- BTHome sensors (open standard, many brands)
- Presence beacons (ESP32-based BLE tags, iBeacon, Eddystone)
- Smart locks with BLE (August, Aqara U-series)
For a passive tracker setup with Xiaomi sensors:
esp32_ble_tracker:
scan_parameters:
window: 800ms
interval: 800ms
active: false
sensor:
- platform: xiaomi_lywsd02
mac_address: "E7:2E:01:40:C9:08"
temperature:
name: "Living Room Temperature"
humidity:
name: "Living Room Humidity"
battery_level:
name: "Living Room Battery Level"
From my testing, 8+ LYWSD02 sensors on a single ESP32-C3 SuperMini showed no data loss. The proxy handles passive broadcasts without connection limits — each sensor sends a brief advertisement packet and goes back to sleep.
Troubleshooting Common Issues
| Symptom | Likely Cause | Fix |
|---|---|---|
| Proxy shows online but no sensor data | Scanning is disabled or active: false without passive devices configured | Verify esp32_ble_tracker: is present in the YAML |
| Home Assistant shows “Device unavailable” | BLE device supports a protocol not in the proxy’s integration list | Check Home Assistant Integrations page for your device model |
| WiFi disconnects when many BLE connections are active | Too many connection_slots for a WiFi-based board | Reduce to connection_slots: 2 or switch to Ethernet board |
| Proxy reboots periodically | Memory exhaustion from arduino framework | Switch to esp-idf framework (complete reflash needed) |
| Overheating on PoE proxy | Active scanning with aggressive intervals | Set active: false under scan_parameters |
Going Further
A Bluetooth proxy network is the cheapest reliability upgrade you can make in Home Assistant. For under $15, you can cover a 2,000-square-foot home with three strategically placed ESP32s. No wires beyond USB power, no configuration beyond the initial flash.
If you want maximum performance, build your central proxy with an Ethernet ESP32 (Olimex or WT32-ETH01) and fill in gaps with $3 ESP32-C3 SuperMinis on WiFi. The Ethernet proxy handles the heavy lifting — active connections to locks, continuous scanning — while the WiFi proxies catch passive broadcasts from temperature sensors and presence beacons.
Related: Pair your proxy network with Zigbee and Z-Wave coordinators for a truly protocol-agnostic smart home.
← Back to guides