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