ESP Projects

Turn a $5 ESP32 into a Home Assistant Bluetooth proxy

Lots of cheap sensors talk Bluetooth: thermometers, plant sensors, smart locks, BBQ probes. The catch is range. Your Home Assistant box can only hear the ones in the next room. An ESPHome Bluetooth proxy fixes that by relaying Bluetooth traffic over your network, so one ESP32 per floor covers the whole house.

What a proxy does

The proxy listens for Bluetooth Low Energy advertisements nearby and forwards them to Home Assistant, which handles them exactly as if its own Bluetooth adapter had heard them. Any integration that uses Bluetooth works through a proxy automatically, with no extra setup per device.

It can also make active connections, where Home Assistant connects to a device to read or control it. Locks and some lights need this. An ESP32 handles 3 active connections at once by default.

What you need

  • An ESP32 board. Classic ESP32, C3 and S3 boards all work. The ESP8266 has no Bluetooth, so it can't be a proxy.
  • A USB power supply where the proxy will live.
  • Optional but better: an ESP32 board with wired Ethernet, such as the Olimex ESP32-PoE-ISO. ESPHome's docs recommend Ethernet because it leaves the radio free for Bluetooth instead of sharing it with Wi-Fi.

Option 1: the one-click installer

ESPHome publishes ready-made proxy firmware you can install from a browser. Open the Bluetooth proxy section of ESPHome's ready-made projects in Chrome or Edge, plug in the ESP32, and click Connect. It asks for your Wi-Fi details at the end, and Home Assistant discovers the proxy a minute later.

This is the quickest route if the proxy will only ever be a proxy.

Option 2: add it to your own config

If you want the proxy to do something else too, such as also read a temperature sensor, add these lines to any ESP32 config. Start from the config generator if you don't have one yet.

esp32_ble_tracker:
  scan_parameters:
    active: true

bluetooth_proxy:
  active: true

active: true under the proxy allows active connections. Leave the scan parameters at their defaults; ESPHome warns that aggressive scan settings can make Wi-Fi unstable.

Use the ESP-IDF framework, which is ESPHome's default for ESP32 now. It uses less memory than Arduino, and Bluetooth plus Wi-Fi needs all the memory it can get. Skip the web_server component on a proxy for the same reason.

Where to put proxies

  • One per floor is a good start; add more where devices drop out.
  • Keep it at least 3 meters from your router or network switch. ESPHome's docs call out network gear as a source of interference.
  • Up high and out in the open beats inside a cabinet. Bluetooth is weak and walls, appliances and people all absorb it.
  • Close to the devices that need active connections, like a lock, since those links are more fragile than plain listening.

Checking that it works

In Home Assistant, go to Settings → Devices & services → Bluetooth. Each proxy shows up as a Bluetooth adapter. Open the Advertisement monitor there to see every Bluetooth device each proxy can hear and how strong its signal is. If a sensor shows a weak signal (around −90 dBm or lower), move the proxy closer or add another.

Devices worth adding once you have a proxy

  • Cheap Bluetooth thermometer-hygrometers for every room.
  • Bluetooth plant sensors, which pair well with the DIY soil moisture sensor for pots further from the house.
  • BLE meat thermometers for the grill or smoker, where the model has a Home Assistant integration.
  • Smart locks and blinds that use Bluetooth instead of Wi-Fi.