For a maker/art project, I need a bunch of microcontrollers, preferably CircuitPython-based, networked together (using a minimal number of wires) I've been using a chain of uart/serial connections: each node relaying commands down and responses back; effectively implementing my own app-layer mesh network, and it's a real pain.
What I would love is something like a bunch of QtPy style boards connected through their Stemma/QT ports, used for both power and data. I bought several QyPy SAMD21 boards, and quickly discovered that they are missing the I2CPERIPHERAL library. i.e., they can be I2c masters, but not clients. With some effort, I recompiled the U2F firmware image for the QtPy boards, adding CIRCUITPY_I2CPERIPHERAL=1 and removing CIRCUITPY_USB_HID=0 to make space. This does actually work- I can get I2C messages from one board to another in Python. But the SAMD21 boards just don't have enough RAM to run my real application.
I'm looking forward to the QtPy RP2040 boards, which will have plenty of RAM. In the meantime, I got a RP2040 Feather board. It is also missing the I2CPERIPHERAL library. I tried the same trick- but after hours fighting with the firmware build system, I just can't get it to work- there are literally hundreds of errors when I run the "make": conflicting types, missing includes, something about unsupported shift registers in Thumb mode.. I've no idea how to tackle these.
Surely I'm not the only one who needs a bunch of CircuitPython controllers to talk to each other.. I thought Stemma/QT and I2C seemed ideal for this, but now I'm not sure.
Any thoughts on either how to make I2C work between CircuitPython boards, or perhaps whether there's some completely different approach that's likely easier?
Thanks in advance!
- Ken