Using I2C with MaixPy

Note: Requires MaixPy image and firmware >= 4.2.1

The I2C and corresponding pins of MaixCAM can be seen in the diagram:

For MaixCAM, due to limited pin resources, the pins for I2C1 and I2C3 overlap with those of the WiFi module (SDIO1). Therefore, you can only use either WiFi or hardware I2C, but not both. Additionally, there is an I2C5, which is simulated by software at the lower driver level. It is recommended to use this one, as the drivers are already set up, and its use is the same as using hardware I2C.

By default, the pins for I2C5 are configured as GPIO. Therefore, before using the i2c module, you should first use the pinmap module to set the pin functions to I2C5 as follows:

from maix import i2c, pinmap

pinmap.set_pin_function("A15", "I2C5_SCL")
pinmap.set_pin_function("A27", "I2C5_SDA")

bus1 = i2c.I2C(5, i2c.Mode.MASTER)
slaves = bus1.scan()
print("find slaves:", slaves)

For more APIs, see i2c API documentation.

As mentioned above, for the MaixCAM, you must choose between using hardware I2C and WiFi. If you need to use I2C, you must disable WiFi and use the pinmap module to set the pin functions for I2C, then operate using the maix.i2c module.

TODO: Provide a method to disable WiFi (requires disabling the WiFi driver in the system, which is more complex).

from maix import i2c, pinmap

pinmap.set_pin_function("P18", "I2C1_SCL")
pinmap.set_pin_function("P21", "I2C1_SDA")

bus1 = i2c.I2C(1, i2c.Mode.MASTER)
slaves = bus1.scan()
print("find slaves:", slaves)