/ examples / mcps_busio_i2c.py
mcps_busio_i2c.py
 1  import time
 2  import hid
 3  import busio
 4  
 5  from adafruit_blinka.microcontroller.mcp2221.mcp2221 import mcp2221 as _mcp2221
 6  from adafruit_blinka.microcontroller.mcp2221.mcp2221 import MCP2221 as _MCP2221
 7  from adafruit_blinka.microcontroller.mcp2221.i2c import I2C as _MCP2221I2C
 8  
 9  MLXADDR = 0x33
10  ADDRID1 = 0x2407
11  
12  
13  class MCP2221(_MCP2221):  # pylint: disable=too-few-public-methods
14      def __init__(self, address):
15          self._hid = hid.device()
16          self._hid.open_path(address)
17          print("Connected to " + str(address))
18          self._gp_config = [0x07] * 4  # "don't care" initial value
19          for pin in range(4):
20              self.gp_set_mode(pin, self.GP_GPIO)  # set to GPIO mode
21              self.gpio_set_direction(pin, 1)  # set to INPUT
22  
23  
24  class MCP2221I2C(_MCP2221I2C):  # pylint: disable=too-few-public-methods
25      def __init__(self, mcp2221, *, frequency=100000):
26          self._mcp2221 = mcp2221
27          self._mcp2221.i2c_configure(frequency)
28  
29  
30  class I2C(busio.I2C):  # pylint: disable=too-few-public-methods
31      def __init__(self, mcp2221_i2c):
32          self._i2c = mcp2221_i2c
33  
34  
35  addresses = [mcp["path"] for mcp in hid.enumerate(0x04D8, 0x00DD)]
36  
37  i2c_devices = []
38  i2c_devices.append(I2C(MCP2221I2C(_mcp2221)))
39  
40  for addr in addresses:
41      try:
42          i2c_device = I2C(MCP2221I2C(MCP2221(addr)))
43          i2c_devices.append(i2c_device)
44      except OSError:
45          print("Device path: " + str(addr) + " is used")
46  
47  
48  while True:
49      for i2c in i2c_devices:
50          addrbuf = bytearray(2)
51          addrbuf[0] = ADDRID1 >> 8
52          addrbuf[1] = ADDRID1 & 0xFF
53          inbuf = bytearray(6)
54          i2c.writeto_then_readfrom(MLXADDR, addrbuf, inbuf)
55          print("Device " + str(i2c_devices.index(i2c)) + ": ")
56          print(inbuf)
57          time.sleep(0.5)