Simple test¶
Ensure your device works with this simple test.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
# Simple demo of the VL53L0X distance sensor.
# Will print the sensed range/distance every second.
import time
import board
import busio
import adafruit_vl53l0x
# Initialize I2C bus and sensor.
i2c = busio.I2C(board.SCL, board.SDA)
vl53 = adafruit_vl53l0x.VL53L0X(i2c)
# Optionally adjust the measurement timing budget to change speed and accuracy.
# See the example here for more details:
# https://github.com/pololu/vl53l0x-arduino/blob/master/examples/Single/Single.ino
# For example a higher speed but less accurate timing budget of 20ms:
# vl53.measurement_timing_budget = 20000
# Or a slower but more accurate timing budget of 200ms:
# vl53.measurement_timing_budget = 200000
# The default timing budget is 33ms, a good compromise of speed and accuracy.
# Main loop will read the range and print it every second.
while True:
print("Range: {0}mm".format(vl53.range))
time.sleep(1.0)
|
Multiple VL53L0X on Same I2C Bus¶
Copy “../examples/vl53l0x_multiple_sensors.py” to your “CIRCUITPY” drive, then run the script with from vl53l0x_multiple_sensors import *
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
"""
Example of how to use the adafruit_vl53l0x library to change the assigned address of
multiple VL53L0X sensors on the same I2C bus. This example only focuses on 2 VL53L0X
sensors, but can be modified for more. BE AWARE: a multitude of sensors may require
more current than the on-board 3V regulator can output (typical current consumption during
active range readings is about 19 mA per sensor).
"""
import time
import board
from digitalio import DigitalInOut
from adafruit_vl53l0x import VL53L0X
# declare the singleton variable for the default I2C bus
i2c = board.I2C()
# declare the digital output pins connected to the "SHDN" pin on each VL53L0X sensor
xshut = [
DigitalInOut(board.D7),
DigitalInOut(board.D9),
# add more VL53L0X sensors by defining their SHDN pins here
]
for power_pin in xshut:
# make sure these pins are a digital output, not a digital input
power_pin.switch_to_output(value=False)
# These pins are active when Low, meaning:
# if the output signal is LOW, then the VL53L0X sensor is off.
# if the output signal is HIGH, then the VL53L0X sensor is on.
# all VL53L0X sensors are now off
# initialize a list to be used for the array of VL53L0X sensors
vl53 = []
# now change the addresses of the VL53L0X sensors
for i, power_pin in enumerate(xshut):
# turn on the VL53L0X to allow hardware check
power_pin.value = True
# instantiate the VL53L0X sensor on the I2C bus & insert it into the "vl53" list
vl53.insert(i, VL53L0X(i2c)) # also performs VL53L0X hardware check
# no need to change the address of the last VL53L0X sensor
if i < len(xshut) - 1:
# default address is 0x29. Change that to something else
vl53[i].set_address(i + 0x30) # address assigned should NOT be already in use
# there is a helpful list of pre-designated I2C addresses for various I2C devices at
# https://learn.adafruit.com/i2c-addresses/the-list
# According to this list 0x30-0x34 are available, although the list may be incomplete.
# In the python REPR, you can scan for all I2C devices that are attached and detirmine
# their addresses using:
# >>> import board
# >>> i2c = board.I2C()
# >>> if i2c.try_lock():
# >>> [hex(x) for x in i2c.scan()]
# >>> i2c.unlock()
def detect_range(count=5):
""" take count=5 samples """
while count:
for index, sensor in enumerate(vl53):
print("Sensor {} Range: {}mm".format(index + 1, sensor.range))
time.sleep(1.0)
count -= 1
print(
"Multiple VL53L0X sensors' addresses are assigned properly\n"
"execute detect_range() to read each sensors range readings"
)
|