Skip to content

Issue with implementation of VL53L0X and TCA9548A multiplexer #27

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
kgdthomas opened this issue Feb 23, 2021 · 2 comments
Closed

Issue with implementation of VL53L0X and TCA9548A multiplexer #27

kgdthomas opened this issue Feb 23, 2021 · 2 comments

Comments

@kgdthomas
Copy link

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
Copy link

codenio commented May 10, 2021

@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 Bugfix Channel Scan Adafruit_CircuitPython_TCA9548A#32 and see if it resolves your issue.

@caternuson
Copy link
Contributor

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/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants