Simple test

Ensure your device works with this simple test.

 1# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
 2# SPDX-License-Identifier: MIT
 4# Simple demo of the VL53L0X distance sensor.
 5# Will print the sensed range/distance every second.
 6import time
 8import board
 9import busio
11import adafruit_vl53l0x
13# Initialize I2C bus and sensor.
14i2c = busio.I2C(board.SCL, board.SDA)
15vl53 = adafruit_vl53l0x.VL53L0X(i2c)
17# Optionally adjust the measurement timing budget to change speed and accuracy.
18# See the example here for more details:
20# For example a higher speed but less accurate timing budget of 20ms:
21# vl53.measurement_timing_budget = 20000
22# Or a slower but more accurate timing budget of 200ms:
23# vl53.measurement_timing_budget = 200000
24# The default timing budget is 33ms, a good compromise of speed and accuracy.
26# Main loop will read the range and print it every second.
27while True:
28    print("Range: {0}mm".format(vl53.range))
29    time.sleep(1.0)

Multiple VL53L0X on Same I2C Bus

Copy “../examples/” to your “CIRCUITPY” drive, then run the script with from vl53l0x_multiple_sensors import *

 1# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
 2# SPDX-License-Identifier: MIT
 5Example of how to use the adafruit_vl53l0x library to change the assigned address of
 6multiple VL53L0X sensors on the same I2C bus. This example only focuses on 2 VL53L0X
 7sensors, but can be modified for more. BE AWARE: a multitude of sensors may require
 8more current than the on-board 3V regulator can output (typical current consumption during
 9active range readings is about 19 mA per sensor).
11import time
12import board
13from digitalio import DigitalInOut
14from adafruit_vl53l0x import VL53L0X
16# declare the singleton variable for the default I2C bus
17i2c = board.I2C()  # uses board.SCL and board.SDA
18# i2c = board.STEMMA_I2C()  # For using the built-in STEMMA QT connector on a microcontroller
20# declare the digital output pins connected to the "SHDN" pin on each VL53L0X sensor
21xshut = [
22    DigitalInOut(board.D7),
23    DigitalInOut(board.D9),
24    # add more VL53L0X sensors by defining their SHDN pins here
27for power_pin in xshut:
28    # make sure these pins are a digital output, not a digital input
29    power_pin.switch_to_output(value=False)
30    # These pins are active when Low, meaning:
31    #   if the output signal is LOW, then the VL53L0X sensor is off.
32    #   if the output signal is HIGH, then the VL53L0X sensor is on.
33# all VL53L0X sensors are now off
35# initialize a list to be used for the array of VL53L0X sensors
36vl53 = []
38# now change the addresses of the VL53L0X sensors
39for i, power_pin in enumerate(xshut):
40    # turn on the VL53L0X to allow hardware check
41    power_pin.value = True
42    # instantiate the VL53L0X sensor on the I2C bus & insert it into the "vl53" list
43    vl53.insert(i, VL53L0X(i2c))  # also performs VL53L0X hardware check
44    # no need to change the address of the last VL53L0X sensor
45    if i < len(xshut) - 1:
46        # default address is 0x29. Change that to something else
47        vl53[i].set_address(i + 0x30)  # address assigned should NOT be already in use
48# there is a helpful list of pre-designated I2C addresses for various I2C devices at
50# According to this list 0x30-0x34 are available, although the list may be incomplete.
51# In the python REPR, you can scan for all I2C devices that are attached and detirmine
52# their addresses using:
53#   >>> import board
54#   >>> i2c = board.I2C()
55#   >>> if i2c.try_lock():
56#   >>>     [hex(x) for x in i2c.scan()]
57#   >>>     i2c.unlock()
60def detect_range(count=5):
61    """take count=5 samples"""
62    while count:
63        for index, sensor in enumerate(vl53):
64            print("Sensor {} Range: {}mm".format(index + 1, sensor.range))
65        time.sleep(1.0)
66        count -= 1
70    "Multiple VL53L0X sensors' addresses are assigned properly\n"
71    "execute detect_range() to read each sensors range readings"