From: Melissa LeBlanc-Williams Date: Thu, 8 Oct 2020 14:27:06 +0000 (-0600) Subject: Merge pull request #349 from simallaire/multiple_mcp X-Git-Tag: 5.5.1 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/b901c0161f4ed71b39d50ed3125b6c2c0b28812e?hp=e812739ff688119c9863756c54a10efcd4900784 Merge pull request #349 from simallaire/multiple_mcp Enable support for multiple mcp2221 --- diff --git a/examples/mcps_busio_i2c.py b/examples/mcps_busio_i2c.py new file mode 100755 index 0000000..4729e3e --- /dev/null +++ b/examples/mcps_busio_i2c.py @@ -0,0 +1,57 @@ +import time +import hid +import busio + +from adafruit_blinka.microcontroller.mcp2221.mcp2221 import mcp2221 as _mcp2221 +from adafruit_blinka.microcontroller.mcp2221.mcp2221 import MCP2221 as _MCP2221 +from adafruit_blinka.microcontroller.mcp2221.i2c import I2C as _MCP2221I2C + +MLXADDR = 0x33 +ADDRID1 = 0x2407 + + +class MCP2221(_MCP2221): # pylint: disable=too-few-public-methods + def __init__(self, address): + self._hid = hid.device() + self._hid.open_path(address) + print("Connected to " + str(address)) + self._gp_config = [0x07] * 4 # "don't care" initial value + for pin in range(4): + self.gp_set_mode(pin, self.GP_GPIO) # set to GPIO mode + self.gpio_set_direction(pin, 1) # set to INPUT + + +class MCP2221I2C(_MCP2221I2C): # pylint: disable=too-few-public-methods + def __init__(self, mcp2221, *, frequency=100000): + self._mcp2221 = mcp2221 + self._mcp2221.i2c_configure(frequency) + + +class I2C(busio.I2C): # pylint: disable=too-few-public-methods + def __init__(self, mcp2221_i2c): + self._i2c = mcp2221_i2c + + +addresses = [mcp["path"] for mcp in hid.enumerate(0x04D8, 0x00DD)] + +i2c_devices = [] +i2c_devices.append(I2C(MCP2221I2C(_mcp2221))) + +for addr in addresses: + try: + i2c_device = I2C(MCP2221I2C(MCP2221(addr))) + i2c_devices.append(i2c_device) + except OSError: + print("Device path: " + str(addr) + " is used") + + +while True: + for i2c in i2c_devices: + addrbuf = bytearray(2) + addrbuf[0] = ADDRID1 >> 8 + addrbuf[1] = ADDRID1 & 0xFF + inbuf = bytearray(6) + i2c.writeto_then_readfrom(MLXADDR, addrbuf, inbuf) + print("Device " + str(i2c_devices.index(i2c)) + ": ") + print(inbuf) + time.sleep(0.5)