Issue with implementation of VL53L0X and TCA9548A multiplexer
kgdthomas opened this issue · 2 comments
kgdthomas commented
I've been trying to work one vl53l0x with a TCA9548A. My code is as follows:
import time
import board
import busio
import adafruit_vl53l0x
import adafruit_tca9548a
# Create I2C bus as normal
i2c = busio.I2C(board.SCL, board.SDA)
# Create the TCA9548A object and give it the I2C bus
tca = adafruit_tca9548a.TCA9548A(i2c)
# For each sensor, create it using the TCA9548A channel instead of the I2C object
vl53a = adafruit_vl53l0x.VL53L0X(tca[0])
#vl53b = adafruit_vl53l0x.VL53L0X(tca[1])
#tsl2 = adafruit_tsl2591.TSL2591(tca[1])
# print range 1 per second
while True:
print("Range: {0}mm".format(vl53a.range))
# print("Range: {0}mm".format(vl53b.range))
time.sleep(1.0)
# 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:
# Measured in microseconds
# 1 second = 1000 millisecond = 1000000 microsecond
# 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.
but every attempt leads to the following error.
%Run test-i2c.py
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/adafruit_bus_device/i2c_device.py", line 154, in __probe_for_device
self.i2c.writeto(self.device_address, b"")
File "/home/pi/.local/lib/python3.7/site-packages/adafruit_tca9548a.py", line 67, in writeto
return self.tca.i2c.writeto(address, buffer, **kwargs)
File "/home/pi/.local/lib/python3.7/site-packages/busio.py", line 116, in writeto
return self._i2c.writeto(address, buffer, stop=stop)
File "/home/pi/.local/lib/python3.7/site-packages/adafruit_blinka/microcontroller/generic_linux/i2c.py", line 49, in writeto
self._i2c_bus.write_bytes(address, buffer[start:end])
File "/home/pi/.local/lib/python3.7/site-packages/Adafruit_PureIO/smbus.py", line 308, in write_bytes
self._device.write(buf)
OSError: [Errno 121] Remote I/O error
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/adafruit_bus_device/i2c_device.py", line 160, in __probe_for_device
self.i2c.readfrom_into(self.device_address, result)
File "/home/pi/.local/lib/python3.7/site-packages/adafruit_tca9548a.py", line 61, in readfrom_into
return self.tca.i2c.readfrom_into(address, buffer, **kwargs)
File "/home/pi/.local/lib/python3.7/site-packages/busio.py", line 106, in readfrom_into
return self._i2c.readfrom_into(address, buffer, stop=stop)
File "/home/pi/.local/lib/python3.7/site-packages/adafruit_blinka/microcontroller/generic_linux/i2c.py", line 56, in readfrom_into
readin = self._i2c_bus.read_bytes(address, end - start)
File "/home/pi/.local/lib/python3.7/site-packages/Adafruit_PureIO/smbus.py", line 179, in read_bytes
return self._device.read(number)
OSError: [Errno 121] Remote I/O error
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/pi/Desktop/test-i2c.py", line 19, in <module>
vl53l0x = adafruit_vl53l0x.VL53L0X(tca9548a[0])
File "/usr/local/lib/python3.7/dist-packages/adafruit_vl53l0x.py", line 142, in __init__
self._device = i2c_device.I2CDevice(i2c, address)
File "/usr/local/lib/python3.7/dist-packages/adafruit_bus_device/i2c_device.py", line 50, in __init__
self.__probe_for_device()
File "/usr/local/lib/python3.7/dist-packages/adafruit_bus_device/i2c_device.py", line 163, in __probe_for_device
raise ValueError("No I2C device at address: 0x%x" % self.device_address)
ValueError: No I2C device at address: 0x29
codenio commented
@kgdthomas , I Had faced similar issue in the past. while interfacing multiple MCP4725 using TCA9548A.
Error : OSError: [Errno 121] Remote I/O error, says i2c is unable to detect your terminal sensors
Some Debuging Steps are as follows
- Check for lose connections with vl53l0x and TCA9548A interface.
- Check if each vl53l0x is alive by directly connecting it to Main I2C of your board and try
i2cdetect -y 0
or with suitable I2C scan command - Check if Active Low Reset of TCA9548A is pulled up to 5v using suitable Pull up Resistor
- Try the patch available in adafruit/Adafruit_CircuitPython_TCA9548A#32 and see if it resolves your issue.
caternuson commented
Can't recreate issue. Combo seems to work fine:
Adafruit CircuitPython 7.1.1 on 2022-01-14; Adafruit ItsyBitsy M4 Express with samd51g19
>>> import board
>>> import adafruit_vl53l0x
>>> import adafruit_tca9548a
>>> tca = adafruit_tca9548a.TCA9548A(board.I2C())
>>> vl53a = adafruit_vl53l0x.VL53L0X(tca[0])
>>> vl53a.range
127
>>> vl53a.range
280
>>>
Based on the error messages, this is most likely a connection issue of some kind. Please post in the forums with photos of your setup.
https://forums.adafruit.com/