ESPHome has had a driver for ST's VL53L0X time-of-flight sensor for years. Its bigger sibling, the VL53L1X, now gets one too. The vl53l1x sensor platform was merged on 21 October 2026, the same day ESPHome 2026.10.0 came out, so it will ship in 2026.11. The documentation page was merged the same day.
The VL53L1X measures distance by timing a pulse of infrared light, and the new driver reads up to 4 m. The code follows the register sequence of ST's Ultra Lite Driver (ULD), ported into ESPHome rather than pulled in as a library.
Configuration
A basic entry looks like this:
sensor:
- platform: vl53l1x
name: Distance
distance_mode: long # short, medium or long
timing_budget: 50ms # one of the ULD budgets for the mode
roi_width: 8
roi_height: 8
There are three distance modes. ST's ULD only has short and long. The medium mode uses the standard ranging preset from ST's full VL53L1 API, with timing budgets scaled from the long-mode table. Each mode accepts only the budgets that exist for it.
You can also set the region of interest (roi_width, roi_height), an offset and a signal-rate threshold. ESPHome checks all of them when it validates the config, so an impossible combination is rejected before anything is flashed. Only readings with a valid range status are published.
Several sensors on one bus
Every VL53L1X starts at I2C address 0x29, so two of them on the same bus collide until one is moved. The driver handles this the way vl53l0x does. Each sensor gets an enable_pin wired to its XSHUT pin. At boot all of them are held in reset, then each one is released in turn, checked, and given its own address.
The config check groups sensors by I2C bus. With more than one sensor on a bus, each needs an enable_pin, none may stay at 0x29, and the addresses must differ. A sensor that fails before it gets its new address is kept in reset, so it can't clash with the next one.
Smaller details
Measurements run in a loop that stays switched off while there is nothing to read. After waiting out the timing budget, the driver polls the data-ready bit and gives up after twice the budget plus 100 ms. The register tables live in flash (PROGMEM), and the component ships ST's BSD-3 licence notice for the ULD values.