EDIT: Other people I've talked to and one poster here (since deleted) have said that they have the same issue while going through the Instructables tutorial to set up multiple I2C busses. There are also multiple comments on the Instructables describing the same issue. So something is wrong with the tutorial. As of now, I can't find any other tutorials explaining how to set up multiple I2C busses on the Raspberry Pi.
I am trying to connect multiple Vl6180x sensors to my Raspberry Pi 3. The addresses of these sensors are 0x29 (unchangeable) so unless I use a mux, I have to set up multiple I2C busses. I followed the instructions detailed in this tutorial to do so, but when I run "sudo i2cdetect -y 3" it just checks the addresses really slowly and does not find anything on 0x29. Yes, I connected SDA to 23 and SCL to 24. Yes, I tested it on bus 1 and it worked. I am also using 2.2k pullup resistors on both sda and scl. I2C is not blacklisted and here is my config file:
# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# uncomment for composite PAL
#sdtv_mode=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
dtparam=spi=on
# Uncomment this to enable the lirc-rpi module
#dtoverlay=lirc-rpi
# Additional overlays and parameters are documented /boot/overlays/README
# Enable audio (loads snd_bcm2835) dtparam=audio=on
# --- added by adafruit-pitft-helper Wed Apr 24 16:27:14 HDT 2019 ---
dtparam=spi=on
dtparam=i2c1=on
dtparam=i2c_arm=on
dtoverlay=pitft28-resistive,rotate=90,speed=64000000,fps=30
# --- end adafruit-pitft-helper Wed Apr 24 16:27:14 HDT 2019 ---
enable_uart=1
dtoverlay=i2c-gpio,bus=3,i2c_gpio_delay_us=2,i2c_gpio_sda=23,i2c_gpio_scl=24
dtoverlay=i2c-gpio,bus=4,i2c_gpio_delay_us=2,i2c_gpio_sda=17,i2c_gpio_scl=27
Here is a picture of the sensor on i2c bus 1, and the address is properly detected:
And here is a picture of the sensor connected to my created i2c bus 3 (SDA=23, SCL=24):
So why isn't this working?
EDIT: The device is detected on I2C bus 4:
pi@raspberrypi:~ $ i2cdetect -y 3
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- ^C
pi@raspberrypi:~ $ i2cdetect -y 4
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- 29 -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
And here is the output of "i2cdetect -l":
pi@raspberrypi:~ $ i2cdetect -l
i2c-3 i2c i2c@4 I2C adapter
i2c-1 i2c bcm2835 I2C adapter I2C adapter
i2c-4 i2c i2c@3 I2C adapter