Close
0%
0%

Air Quality Sensor Stick & Bluetooth Proxy

ESP32-C6 USB stick for Home Assistant: Bluetooth Proxy + air quality sensor. Open source ESPHome firmware. Extends BLE to garden & basement.

Similar projects worth following
0 followers
The ESPHome BLE Proxy & Environmental Monitor is a compact USB stick based on the ESP32-C6 that serves two purposes: extending the Bluetooth Low Energy (BLE) reach of Home Assistant, and monitoring local air quality.
The Bluetooth proxy receives BLE advertisements from nearby devices — Gardena garden controllers, MiFlora plant sensors, SwitchBot, Govee/Inkbird thermometers — and forwards them to Home Assistant over WiFi. The ESP32-C6's separate WiFi and Bluetooth hardware means both radios run without competing for airtime.
A Bosch BME688 sensor delivers temperature, humidity, pressure, and an IAQ score with VOC and CO₂ estimates via the BSEC2 library. Two NeoPixel LEDs show air quality at a glance and WiFi status.
Power comes from any standard USB-A or USB-C charger. The device is auto-discovered by Home Assistant and fully adoptable in ESPHome for custom firmware changes. All source code is on GitHub.

Available on Tindie: https://www.tindie.com/products/42110/

The ESPHome BLE Proxy & Environmental Monitor is a custom-designed USB stick built around the ESP32-C6. It runs ESPHome firmware and combines an active Bluetooth proxy with a full environmental sensing stack in a single plug-in form factor.

Bluetooth Proxy

The device runs ESPHome's native BLE proxy stack, which captures Bluetooth Low Energy advertisements and forwards them to Home Assistant via the ESPHome API over WiFi. Active and passive BLE scanning are both supported. Advertisement bundling — introduced in ESPHome 2023.6 — reduces WiFi traffic between the proxy and Home Assistant by batching BLE packets, significantly lowering the time both radios compete for the 2.4 GHz band.

Compatible with any BLE device that Home Assistant supports: Gardena smart garden controllers, Xiaomi / MiFlora plant sensors, SwitchBot, Govee, Inkbird, Mopeka, and anything advertising standard BLE GATT profiles or proprietary manufacturer data that HA integrations can decode.

Environmental Sensing

The Bosch BME688 sensor is connected via I²C and driven by Bosch's BSEC2 library, integrated into ESPHome via the bme68x_bsec2 component. BSEC2 processes raw gas resistance readings through a trained neural network model to produce:

  • IAQ (Indoor Air Quality index, 0–500)
  • IAQ accuracy (0–3, with text states: Unreliable / Low / Medium / High)
  • Static IAQ — IAQ without auto-baseline compensation, useful for fixed installations
  • CO₂ equivalent (ppm)
  • Breath VOC equivalent (ppm)
  • Temperature, humidity, and barometric pressure

The BSEC2 state is periodically saved to flash so the calibration baseline survives reboots. A configurable temperature offset compensates for self-heating from the ESP32-C6, adjustable at runtime via a Home Assistant number entity without reflashing.

Two WS2812B NeoPixel RGB LEDs map the IAQ index to a colour scale (green → yellow → orange → red) and WiFi/API connection status indicator. The LED partition is managed in ESPHome's light platform with separate addressable partitions for IAQ and status functions.

Hardware

The ESP32-C6 mini module sits on a custom two-layer PCB designed by the me, in USB stick form factor. Power input is USB-A or USB-C, compatible with any standard 5V charger or powered USB port — no dedicated PSU required. The Firmware can be flashed via USB-A or USB-C. Once it is flashed also OTA updates are possible.

The ESPHome YAML is structured as a modular packages system:

  • base.yaml — shared configuration: NeoPixel, API, OTA, logging
  • wifi.yaml — WiFi component with captive portal fallback
  • bme688.yaml — BME688 component

This allows clean maintenance of multiple hardware variants from a single shared codebase. OTA updates work over WiFi. The device is fully adoptable in ESPHome — clone the repo, point ESPHome at your local copy, and customise freely.

All source is on GitHub including full YAML, pin mappings, and a bilingual EN/DE README covering hardware pinout, IAQ colour scale, BSEC2 accuracy levels, and Home Assistant integration.

Home Assistant Integration

Auto-discovered via the ESPHome integration. All entities — BLE proxy, IAQ metrics, environmental sensors, LED controls, temperature offset — appear immediately with no manual configuration. Ready for dashboards, automations, and template sensors out of the box.

Available on Tindie

Tindie Store

BT-Prox_Env_housing_green_powered.jpg

JPEG Image - 759.47 kB - 05/11/2026 at 18:03

Preview

BT-Prox_Env_housing_red_powered.jpg

JPEG Image - 1004.07 kB - 05/11/2026 at 18:03

Preview

BT-Prox_Env_housing_red_green_powered.jpg

JPEG Image - 981.02 kB - 05/11/2026 at 18:03

Preview

BT-Prox_Env_housing_pcb.jpg

JPEG Image - 1.41 MB - 05/11/2026 at 18:03

Preview

USB_Env_Stick_endcap_USB_A.STL

Endcap for the enclosure on the USB-A side

Standard Tesselated Geometry - 198.90 kB - 05/11/2026 at 17:58

Download

View all 8 files

  • Self heating exploration

    D. E.5 hours ago 0 comments

    Milling an island around the BME688 environmental sensor helps prevent heat from flowing from the Wi-Fi module and voltage regulator to the right of it. However, it is not possible to totally avoid the PCB self-heating. Therefore, I added an offset slider for temperature and relative humidity measurements to the UI. This can also compensate for offsets due to mounting issues and the housing.

View project log

Enjoy this project?

Share

Discussions

Does this project spark your interest?

Become a member to follow this project and never miss any updates