Skip to content

Commit

Permalink
Merge pull request #43 from adafruit/pca9546a_update
Browse files Browse the repository at this point in the history
Adding a PCA9546A class and examples
  • Loading branch information
BlitzCityDIY committed Jan 11, 2023
2 parents a3acfb3 + 893d14d commit 98abd08
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 0 deletions.
19 changes: 19 additions & 0 deletions adafruit_tca9548a.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,22 @@ def __getitem__(self, key: Literal[0, 1, 2, 3, 4, 5, 6, 7]) -> "TCA9548A_Channel
if self.channels[key] is None:
self.channels[key] = TCA9548A_Channel(self, key)
return self.channels[key]


class PCA9546A:
"""Class which provides interface to TCA9546A I2C multiplexer."""

def __init__(self, i2c: I2C, address: int = _DEFAULT_ADDRESS) -> None:
self.i2c = i2c
self.address = address
self.channels = [None] * 4

def __len__(self) -> Literal[4]:
return 4

def __getitem__(self, key: Literal[0, 1, 2, 3]) -> "TCA9548A_Channel":
if not 0 <= key <= 3:
raise IndexError("Channel must be an integer in the range: 0-3.")
if self.channels[key] is None:
self.channels[key] = TCA9548A_Channel(self, key)
return self.channels[key]
25 changes: 25 additions & 0 deletions examples/pca9546a_multisensor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT

# This example shows using two TSL2491 light sensors attached to PCA9546A channels 0 and 1.
# Use with other I2C sensors would be similar.
import time
import board
import adafruit_tsl2591
import adafruit_tca9548a

# Create I2C bus as normal
i2c = board.I2C() # uses board.SCL and board.SDA
# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller

# Create the PCA9546A object and give it the I2C bus
mux = adafruit_tca9548a.PCA9546A(i2c)

# For each sensor, create it using the PCA9546A channel instead of the I2C object
tsl1 = adafruit_tsl2591.TSL2591(mux[0])
tsl2 = adafruit_tsl2591.TSL2591(mux[1])

# After initial setup, can just use sensors as normal.
while True:
print(tsl1.lux, tsl2.lux)
time.sleep(0.1)
20 changes: 20 additions & 0 deletions examples/pca9546a_simpletest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: 2021 Carter Nelson for Adafruit Industries
# SPDX-License-Identifier: MIT

# This example shows using TCA9548A to perform a simple scan for connected devices
import board
import adafruit_tca9548a

# Create I2C bus as normal
i2c = board.I2C() # uses board.SCL and board.SDA
# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller

# Create the PCA9546A object and give it the I2C bus
mux = adafruit_tca9548a.PCA9546A(i2c)

for channel in range(4):
if mux[channel].try_lock():
print("Channel {}:".format(channel), end="")
addresses = mux[channel].scan()
print([hex(address) for address in addresses if address != 0x70])
mux[channel].unlock()

0 comments on commit 98abd08

Please sign in to comment.