Hierophect’s Circuitpython 2021

I’ve been working on Circuitpython for about a year and a half now, contributing to the module code that helps users access chip features. 2020 was tough, but this community has been a refuge against the worst parts of the pandemic, and I feel extremely lucky to have gotten to learn and work on so many different things despite other parts of life being put on hold.

Here’s some of the stuff that happened this year:

  • I spent the early part of 2020 working on support for the STM32 H7 and i.MX chips, and the later half on modules for the ESP32-S2.
  • Some of the stuff I had hoped for got added, like deep sleep/low power features.
  • Other stuff didn’t quite make the cut, like merging in Micropython and adding C module support (hopefully we’ll still get to that eventually).
  • My personal goal to contribute a community library for the Dynamixel servo motor went well!
  • My personal goal to add DMA support did not (I got hopelessly tied up in low level message corruption).
  • I’d hoped to start a meetup in Boston for Circuitpython. For sad and obvious reasons this could not happen. But the number of interested people was encouraging, and I think it’d be worth it to try again in the future.

I think we did a good job of expanding the platform with some new and highly capable chips – the STM32 H7 with raw power, the i.MX with crazy speed for the price, and the ESP32-S2 with WiFi.

But I think one challenge we faced was providing examples of how to actually apply this capability – this was easier with the ESP32-S2, which quickly inspires all kinds of internet-connected builds, but harder on the i.MX and STM32, which are best suited to more complicated projects that are hard to fit in a Learn guide.

So what would I like to see this year?

  • I’d like to see our more powerful chips given new example projects and documentation – big ram-consuming display projects on the H7, fast signal handling on the i.MX, and passed-over features like AudioIO on the F405.
  • I’d especially love to see some introductory robotics support:
    • STM32 has a machine learning module called CubeAI, which can be used for on-chip machine learning and computer vision. This, or any other ML tool, would be super cool to implement.
    • A ROS (Robot Operating System) messaging interface would open up Circuitpython microcontrollers to more advanced robotics teams, and could help beginners get started learning about popular robotics platforms.
    • Camera modules on the ESP32-S2 and STM32 chips would open up all kinds of neat projects.
    • I’d like to see more advanced servo libraries and display code aimed at robotics use.
  • I’d like to see more UI tools – Circuitpython already has some good tools for this, but there’s a lot of potential for new DisplayIO widgets and Touch libraries that could power more complex projects.
  • And a final, weirder idea – I’ve been wondering if we should try exposing some of the underlying code we’ve created for Circuitpython for use in C projects. I see the potential for a C API that that mirrors what’s used in Circuitpython, so you can jump into native embedded projects without having to learn a whole new codebase like Arduino. There are some big challenges with this, particularly when it comes to exception handling. But the appeal of being able to switch between chips with C projects as easily as we do in Circuitpython is super appealing to me. I’m hoping to work on my proof of concept more this year.

Outside of these broader dev ideas, I’ll also be plugging away at my various Circuitpython PCB projects, which I think are best summed up by this old quote from Bell Labs back in the 80s:

“The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time.”

Whether it’s projects or a pandemic, here’s to a year of wrapping things up.

Leave a Reply

Your email address will not be published. Required fields are marked *