[ ESP32 Bluetooth Proxy for Home Assistant ]

Short guide for flashing an ESP32 as a Bluetooth proxy for Home Assistant — extends HA's BLE range across the house without any coding. Web-flash from Chrome, auto-adopt into HA, plug in near the room you want to cover. About 10 minutes start to finish per proxy.

[ What it does ]

A Bluetooth proxy extends HA's Bluetooth range. The ESP32 picks up BLE devices near it (Govee sensors, Xiaomi sensors, Mijia thermometers, Inkbird probes, etc.) and forwards the data to HA over WiFi. Great for covering rooms your HA server's built-in Bluetooth can't reach — basements, garages, far ends of a long house.

  [ BLE sensor ]  >>>  [ ESP32 proxy ]  >>>  [ Home Assistant ]
  (Govee, Xiaomi)       (ESPHome FW)            (over your WiFi)

[ What you need ]

  - ESP32 board (any variant — ESP32, ESP32-S3, ESP32-C3, M5Stack Atom)
  - USB cable (data-capable, not just charge)
  - Chrome or Edge browser (required for the web flasher)
  - A PC or Mac with a USB port
  - A working Home Assistant install on the same WiFi network

Time: ~10 minutes per proxy.


[ Step 1 — Flash via ESPHome Web ]

No coding required. The whole flash happens in a web page.

  1. Go to https://web.esphome.io in Chrome or Edge
  2. Plug the ESP32 into the PC via USB
  3. Click Connect → select the ESP32's serial port
     (often shows up as "USB Serial" or "CP210x" — see
     Troubleshooting if it's missing)
  4. Click Install → select Bluetooth Proxy from the project list
  5. The page downloads and flashes the firmware automatically
     (~2 minutes)
  6. Once done, click Connect to Wi-Fi and enter your network
     SSID + password

The ESP32 reboots, joins WiFi, and starts advertising itself as an ESPHome device. No .yaml editing, no esphome run commands — the project profile that ships with ESPHome Web handles all of it.


[ Step 2 — Adopt into Home Assistant ]

HA auto-discovers the proxy on the local network:

  1. Open HA → Settings → Devices & Services
  2. A notification should appear: "ESPHome — Bluetooth proxy discovered."
  3. Click ConfigureSubmit
  4. The device shows up as an ESPHome integration with Bluetooth proxy
     enabled

No password required at adoption time — the default web.esphome.io profile doesn't set an API password. You can lock it down later via the ESPHome dashboard if you want; see "Where to go from here" below.

If auto-discovery doesn't fire within a minute, go to Settings → Devices & Services → + Add Integration → ESPHome and enter the proxy's IP manually. Find it via your router's DHCP client list (look for a hostname starting with esp32-).


[ Step 3 — Verify it's working ]

Go to Settings → Devices & Services → Bluetooth. You should see a new Bluetooth adapter listed, named after the proxy.

Any BLE devices in range start auto-discovering through it. For example, a Govee H5075 sensor will show up under Devices within ~30 seconds of the proxy coming online. Plant the proxy 3–4 meters from a known BLE device and confirm HA picks it up.


[ Placement tips ]

  - Needs USB power — use a wall adapter or powered USB hub.
  - Place centrally in the room you want coverage in.
  - Mid-height works best for BLE — keep it off the floor.
  - Don't enclose in a metal cabinet (Faraday cage kills BLE).
  - Bluetooth and 2.4 GHz WiFi share spectrum — try not to put the
    proxy directly on top of your router. ~1m separation helps.

[ Best ESP32 boards for this ]

  ESP32-C3 Mini      tiny, cheap (~$5 in 5-packs). Single-core RISC-V;
                     plenty for proxy duty. Great for hiding behind
                     furniture.

  ESP32-S3           dual-core, BLE 5 + better antenna. Worth the
                     extra ~$3 if you want a 2-3m range bump.

  M5Stack Atom Lite  compact case, USB-C, looks clean if it's
                     going to be visible. Same ESP32 chip underneath;
                     you're paying for the enclosure.

  Olimex ESP32-EVB   overkill for proxy use, but useful if you want
                     PoE or extra GPIO for something else on the same
                     device.

Cheap unbranded ESP32 dev boards from Aliexpress / Amazon also work fine — the firmware doesn't care about the silkscreen.


[ Troubleshooting ]

Web flasher doesn't see the port:

  - Wrong browser. Chrome or Edge only (Web Serial API).
  - Missing USB driver. CP210x boards need the Silicon Labs driver on
    Windows; CH340 boards need the WCH driver. Both are 30-second
    installs from the vendor's site.
  - Bad USB cable. A lot of cables are charge-only — try a known
    data-capable one.
  - BOOT button. Some boards require holding BOOT while clicking
    Connect.

Proxy doesn't show up in HA:

  - Different VLAN/subnet than HA. mDNS doesn't cross VLANs by
    default; either move it to the same network or add a manual
    ESPHome integration with the IP.
  - Wrong WiFi credentials. Reconnect via USB, click Connect, then
    re-enter WiFi creds.
  - HA Bluetooth integration not loaded. Settings → Devices &
    Services → + Add Integration → "Bluetooth" first.

BLE devices nearby but not discovering:

  - Some devices broadcast rarely (every 30s+ for low-power sensors).
    Wait a few minutes.
  - The device may already be paired/bonded to something else (e.g.,
    your phone). Forget it from the phone first.
  - Confirm the device uses BLE advertising, not classic Bluetooth.
    Proxies only handle BLE.

[ Adding more proxies ]

Each additional ESP32 just goes through the same flash + adopt loop. HA happily uses multiple proxies in parallel — it picks whichever has the strongest signal for each BLE device. Practical layouts:

  - One per floor of the house
  - One per BLE-heavy room (kitchen, garage, plant room)
  - One near every cluster of BLE sensors that are out of range of
    the HA server

There's no real limit on count — the bottleneck is your WiFi network, not HA.


[ Where to go from here ]

  - Lock down the proxy via the ESPHome dashboard: set an API password
    and OTA password, disable the HTTP webserver.
  - If you have lots of stationary BLE thermometers, look at the
    passive_only config option — drops API overhead for sensors you
    don't need to actively poll.
  - For long-term reliability, plug proxies into a UPS or
    brown-out-tolerant DC supply. BLE re-discovery after a 10-second
    power blip can take minutes; a UPS smooths that over.

[ Raw markdown ]

This guide is also available as a single markdown file:

📄 esp32-bluetooth-proxy.md

[ See Also ]