How to fix MicroPython 'ValueError: invalid I2C peripheral'
If you see the error message
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid I2C peripheral
you are likely running code like this:
import machine
i2c = machine.I2C(machine.Pin(5), machine.Pin(4))
Solution
The MicroPython API has changed (source: forum). You need to use this syntax instead:
import machine
i2c = machine.I2C(-1, machine.Pin(5), machine.Pin(4))
-1
is the I2C ID that selects a specific peripheral. -1
selects a software I2C implementation which can work on most pins. See the MicroPython I2C class documentation for more details.