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

ItemCostNotes
ESP32 board (any variant)$2–5ESP32-WROOM, ESP32-C3 SuperMini, or ESP32-S3
USB power cable$1Micro USB or USB-C depending on board
MicroSD card reader (for first flash)Only if not flashing via web
Home Assistant instanceWith 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_slots is 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

SymptomLikely CauseFix
Proxy shows online but no sensor dataScanning is disabled or active: false without passive devices configuredVerify esp32_ble_tracker: is present in the YAML
Home Assistant shows “Device unavailable”BLE device supports a protocol not in the proxy’s integration listCheck Home Assistant Integrations page for your device model
WiFi disconnects when many BLE connections are activeToo many connection_slots for a WiFi-based boardReduce to connection_slots: 2 or switch to Ethernet board
Proxy reboots periodicallyMemory exhaustion from arduino frameworkSwitch to esp-idf framework (complete reflash needed)
Overheating on PoE proxyActive scanning with aggressive intervalsSet 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

From The Network

AI Tools

ToolBrain

In-depth AI tool reviews, comparisons, and guides

AI Agents

NiteAgent

AI agent frameworks, orchestration, and production patterns

Engineering

CodeIntel

Code intelligence, testing patterns, and production engineering

Tutorials

Hermes Tutorials

Step-by-step guides for the Hermes AI agent framework

No-Code

NoCode Insider

No-code workflows, automation tools, and visual development