Extend Home Assistant Bluetooth Range with ESP32-S3 Proxies
Deploy ESP32-S3 boards as Bluetooth proxies that extend Home Assistant's BLE range to every room in your house. Each proxy requires just 10 lines of ESPHome YAML, a USB power source, and 5 minutes of setup time. No soldering or custom firmware needed.
What You Need
BLE 5.0 vs BLE 4.2: Why the ESP32-S3
The ESP32-S3 supports Bluetooth Low Energy 5.0, while the classic ESP32 (ESP32-DevKitC) only supports BLE 4.2. For Bluetooth proxying, this difference matters in three ways.
First, range: BLE 5.0 hardware supports Coded PHY which can double range, though ESPHome's BLE proxy currently uses the standard 1M PHY by default. The main practical advantage is better signal stability and connection reliability. A typical 150-square-meter home needs 2-4 BLE proxies depending on wall construction and interference.
Second, throughput: BLE 5.0's 2M PHY mode doubles data rate to 2Mbps, reducing the time each device occupies the radio. This matters when a single proxy handles 10+ BLE devices — faster transactions mean less congestion and more responsive updates.
Third, advertising extensions: BLE 5.0 supports extended advertising with significantly larger payloads (up to 1650 bytes chained, vs 31 bytes in BLE 4.2). Some newer BLE sensors transmit all their data in a single extended advertisement, which only BLE 5.0 proxies can receive. The classic ESP32 silently drops these packets.
Step-by-Step Instructions
-
Step 1 Create ESPHome BLE Proxy Config
In the ESPHome dashboard (accessible from Home Assistant's sidebar), create a new device and select ESP32-S3 as the board. The complete BLE proxy configuration is minimal:
esphome: name: ble-proxy-living-room friendly_name: "BLE Proxy Living Room"
esp32: board: esp32-s3-devkitc-1 framework: type: esp-idf
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
api: encryption: key: !secret api_key
esp32_ble_tracker: scan_parameters: active: true
bluetooth_proxy: active: true
The bluetooth_proxy component with active: true enables both passive scanning (reading BLE advertisements) and active connections (connecting to devices for data reads and writes). This supports the full range of BLE integrations in Home Assistant including Switchbot, Xiaomi, and Govee devices.
Tip: Name each proxy after its physical location (kitchen, garage, bedroom). This makes it easy to identify which proxy is detecting each device in Home Assistant's Bluetooth settings. -
Step 2 Flash via Web Flasher
Connect the ESP32-S3 to your computer via USB-C. In the ESPHome dashboard, click the three-dot menu on your new device and select Install, then select Plug into this computer. The web flasher compiles the firmware and flashes it in about 2 minutes.
After flashing, the ESP32-S3 connects to your WiFi and appears in ESPHome as online. The first boot takes 10-15 seconds longer than subsequent boots as the ESP32 generates its initial encryption keys.
For subsequent firmware updates, ESPHome uses over-the-air (OTA) updates — you never need to physically connect the ESP32 again. Just click Install and select Wirelessly. Updates take about 30 seconds.
Tip: If the web flasher does not detect the ESP32-S3, try a different USB cable. Many cables are charge-only and do not carry data signals. -
Step 3 Place Proxy Near Bluetooth Devices
Position the ESP32-S3 proxy within 10-15 meters of the BLE devices you want to monitor. Plug it into any USB power source — a phone charger, a USB port on your router, or a power strip with USB ports.
For optimal coverage, place proxies at the edge of detection range rather than right next to the BLE devices. A single proxy at the center of a room covers most BLE devices in that room. For large rooms (over 40 square meters), position two proxies at opposite ends.
Avoid placing proxies inside metal enclosures, behind large appliances, or directly on concrete floors. The ESP32-S3's PCB antenna radiates best when mounted vertically on a wall or placed on a shelf at waist height. USB extension cables work fine if you need to separate the proxy from its power source.
Tip: Velcro-mount the ESP32-S3 behind furniture or under shelves to keep it out of sight. It draws only 100-150mA, generating negligible heat. -
Step 4 Verify in Home Assistant
Go to Home Assistant Settings, then Devices and Services, then Bluetooth. You should see your new proxy listed under Bluetooth adapters. Home Assistant automatically uses all available Bluetooth proxies — no manual configuration needed.
Click on the proxy to see which BLE devices it is detecting. Each detected device shows the RSSI (signal strength) from this proxy. If a device is detected by multiple proxies, Home Assistant uses the one with the strongest signal for active connections.
To verify the proxy is working correctly, check that BLE devices in the proxy's area show updated values in Home Assistant. Switchbot thermometers update every 5 minutes, Xiaomi plant sensors every 15 minutes, and Govee temperature sensors every 2 minutes. If values are stale, the proxy may be out of range.
The Bluetooth integration page also shows connection statistics for each proxy: total advertisements received, active connections, and error counts. A healthy proxy should show zero connection errors and a steadily increasing advertisement count.
Frequently Asked Questions
How many Bluetooth proxies do I need?
Plan for one proxy per 10-15 meters of coverage radius. A typical 150-square-meter home needs 2-4 proxies depending on wall construction. Start with one proxy in the room with the most BLE devices, then add more to cover dead zones. Each ESP32-S3 costs $8-10.
Do BLE proxies need to be plugged in all the time?
Yes. BLE proxies must be powered continuously to relay data. They draw 100-150mA (about 0.5W), costing approximately $0.50 per year in electricity. Plug them into any USB power source — phone chargers, power strips, router USB ports, or USB wall outlets.
Which BLE devices work with Bluetooth proxies?
All BLE devices supported by Home Assistant work through proxies: Switchbot (curtains, locks, buttons), Xiaomi (temperature, humidity, plant sensors), Govee (thermometers, hygrometers), RuuviTag (environmental sensors), and many others. Both passive (advertisement-based) and active (connection-based) devices are supported.
Should I use the ESP32-S3 or classic ESP32 for BLE proxies?
The ESP32-S3 is better due to BLE 5.0 support: 2x range with Coded PHY, 2x data rate with 2M PHY, and extended advertising support. The classic ESP32 (BLE 4.2) works but covers a smaller area and cannot receive BLE 5.0 extended advertisements from newer sensors. The price difference is only $1-2.
Can a BLE proxy also serve as a WiFi-connected sensor?
Yes. ESPHome supports running Bluetooth proxy alongside other components on the same ESP32-S3. You can add temperature sensors, motion sensors, status LEDs, or even WLED on the same board. However, adding heavy WiFi workloads may reduce BLE scanning reliability.
What is the range of a BLE proxy through walls?
Through standard drywall or wood-frame walls, expect 8-12 meters. Through concrete or brick, expect 5-8 meters. Through metal (ductwork, appliances), BLE signals are heavily attenuated or blocked entirely. Glass is essentially transparent to BLE signals.
Do BLE proxies add latency to device responses?
Minimal. BLE proxies add approximately 50-100ms of latency for active connections (like Switchbot commands) due to WiFi relay overhead. For passive sensors that broadcast advertisements, there is no added latency — the proxy simply forwards the data. Most users cannot perceive the difference.