X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/blobdiff_plain/29f7058916b5fd0af2518709fa9985259f98190c..c09eb24b13f6f2253a45938735d7b64c6dd3aaa4:/examples/mcps_busio_i2c.py diff --git a/examples/mcps_busio_i2c.py b/examples/mcps_busio_i2c.py index f3b4eea..e4da0f1 100644 --- a/examples/mcps_busio_i2c.py +++ b/examples/mcps_busio_i2c.py @@ -1,30 +1,60 @@ +# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries +# +# SPDX-License-Identifier: MIT import time -import sys -import board +import hid import busio -print("hello blinka!") +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 -i2c = busio.I2C(board.SCL, board.SDA) +MLXADDR = 0x33 +ADDRID1 = 0x2407 -print("I2C devices found: ", [hex(i) for i in i2c.scan()]) -if not 0x18 in i2c.scan(): - print("Didn't find MCP9808") - sys.exit() +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 -def temp_c(data): - value = data[0] << 8 | data[1] - temp = (value & 0xFFF) / 16.0 - if value & 0x1000: - temp -= 256.0 - return temp +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: - i2c.writeto(0x18, bytes([0x05]), stop=False) - result = bytearray(2) - i2c.readfrom_into(0x18, result) - print(temp_c(result)) - time.sleep(0.5) + 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)