2021 was another banner year for CircuitPython. We got off to a roaring start with the launch of the RP2040 in January and found more folks who could use CircuitPython in their projects. Many new folks are using CircuitPython on their Raspberry Pi Picos to do USB Human Interface Device (HID) projects like “bad usb”, macropads and full keyboards. @ladyada dipped her toe in the deep rabbit hole of mechanical keyboards and Adafruit launched our own macropad along the way.
The chip shortage deepened in 2021 which enabled us to focus on more software-only work rather than new platforms. Jeff worked on RGB Matrices and cameras. Dan improved dynamic USB support and enable concurrency through asyncio. I created a BLE workflow on the nRF boards and then brought CircuitPython to the Raspberry Pi.
My two themes last year for myself were community and the BLE workflow. For a third year in a row, these will continue to be *my* focus but I’ve included some other ideas below as well. However, my perspective will be shifted this year compared to prior years.
My partner and I are expecting our first child towards the end of March and I plan on taking a total of 18 weeks off (6 at the start and then 12 as she goes back to work.) As a result, I’ll be relying more than I have in the past on the community we’ve built to keep CircuitPython going forwards. Two years ago I mentioned the value of having other people able to do the same work as you. I’m grateful for Kattni’s community leadership and all of the CircuitPython contributors who make it possible for me to step away for short breaks and now longer breaks. Our community not only takes care of the code but also the community itself. Moderating, helping, teaching and mentoring are all vital components of CircuitPython as an open source community. We’re so lucky to have many folks who have these skills.
Last year was also my first full year doing Deep Dive w/Scott streams. It’s been a wonderful experience hanging out with so many awesome folks each week. We’ve built up a large back catalog of topics and, thanks to David (@dcd) and Patrick (@askpatrickw) we have a searchable repo of all the stream notes. My plan is to stream through my ESP32-S3 work and then stop as the baby’s birth gets near. I’m not sure whether I’ll stream after I get back. It will depend on Adafruit priorities and how much time I’ve got to dedicate to streaming.
Taking longer stretches of time off and learning how to parent will also alter my ability to take on larger projects. So, in times near leave, I’ll be focused on smaller improvements and bug fixes. However, I have two-ish months until my first leave.
In the first two months of 2022 my focus will be on the ESP32-S3. I want to bring BLE to the ESP so that the BLE workflow works with those chips as well. The S3 will be the first chip that can do both WiFi and BLE at the same time (hopefully). This will make it a great BroadcastNet bridge for me. Much easier to maintain than a full Raspberry Pi.
Adding the BLE workflow to another platform will also help emphasize the work on the iOS apps File Glider and PyLeap (thanks Antonio and Trevor). code.circuitpython.org (thanks Melissa) is a great option for those on Chrome and Android. Much of the nRF work was done before the apps were ready and made it hard for folks to test along with my development progress. I’m excited to see folks testing the BLE workflow earlier on the ESP chips.
My hope is (fingers crossed) that the work I do for the ESP32-S3 will transfer easily to the ESP32-C3 and older ESP32 as well.
Other Ideas for CircuitPython
While I won’t have a lot of time for large projects this year, here are a few I’d love to see progress. There are many other skilled contributors who can take these on.
CircuitPython has excelled based on being a USB device. USB device allows for CircuitPython to act as a USB device such as keyboard, mouse, serial converter and midi input.
Adding USB Host will allow us to host devices like these. Hosting keyboards would allow us to take input directly into CircuitPython. In particular, this would be exciting for the Pi 400 because it has a built-in keyboard. When combining USB Host support with existing device support, CircuitPython would be able to augment existing HID devices by changing the way they behave to the computer.
USB Audio and Video
TinyUSB, the USB core used by CircuitPython, has basic audio and video support now. It’d be awesome to use this in CircuitPython to send audio and video from displayio up to a host computer. This would make it very easy to capture and/or stream displayio projects.
asyncio has largely been developed by the Python networking community. Network code often waits for more data from the computer at the other end and is therefore I/O bound. This makes is good for asyncio because other code can be run on the CPU while waiting for a response. While I don’t want us to rewrite all of our code to asyncio, I think it’d be useful for network libraries to do cooperate with other tasks using asyncio.
Automated, on device testing would greatly benefit CircuitPython over the long term. With 250+ boards and numerous chip families, it is getting harder and harder to keep all of the existing code working. We’ve started to see more regressions in CircuitPython 6.x and 7.x where functionality that used to work no longer does. Automated testing is very helpful at finding breakages when they occur and are easiest to fix.
This year will be much different for me (in a good way!) Thank you all for making it possible for me to step away without worry. I’m excited to see what we all create and grow this year.