CircuitPython in 2019 #circuitpython2019

2019 is starting with us as a community coming together to discuss the future of CircuitPython. Undoubtedly, the future is bright but what will it be exactly? While none of us can tell the future, each of us posted our individual thoughts earlier this year. (See the links below for each post.) This post is an aggregation of those ideas done by myself, Scott (@tannewt), one of the first developers to work on CircuitPython.

Thank you, everyone, for a great 2018. CircuitPython grew as we had hoped it would by continuing to encourage and engage beginners. In 2018, the CircuitPython project had the breadth of community, core, hardware, documentation, libraries and tools that we laid out this time last year. Each individual piece grew tremendously throughout 2018 thanks to the hard work of a multitude of people. In 2018, many contributors stepped up to help in new ways, making it easier for those of us who started CircuitPython.

In 2019, let’s again focus on community and collaboration. CircuitPython is a leading example of making electronics, computers and software accessible to all. Let’s keep this in mind for all that we do.

Community

In 2018, the CircuitPython community continued to grow at a rapid pace. The weekly community meeting didn’t miss a beat and brought in a number of new contributors. The Discord server broke 10,000 registered users. Raspberry Pi users discovered CircuitPython libraries and joined us on the Adafruit forums.

This would not have been possible without our awesome Community Helpers who have stepped up to help groom our growing community. @kattni lead an effort to tailor our Code of Conduct to better address Discord in addition to its use on GitHub.

Dan, Kattni and Scott spoke about CircuitPython at several events: PyCon, Maker Faire New York and Open Hardware Summit. These events are an important way for the CircuitPython community to meet face-to-face and build further trust in each other.

At these events, we also made connections which have led to SparkFun and Electronic Cats creating boards that support CircuitPython from the start. It’s extremely exciting to see other businesses test CircuitPython for their own products and we should continue encouraging everyone to bring CircuitPython to their devices and their communities.

In 2019, we want to reach out to new audiences for CircuitPython and help them accomplish their goals faster and easier than they can now.

Core Platform

In 2018, we spent a bunch of time focused on SAMD51 (aka M4) development that culminated in July with the 3.0.0 release. This sibling of the original CircuitPython microcontroller (the SAMD21) showed just how much is possible with CircuitPython when you have more memory and speed to work with. Part of the 2019 work will be stretching our understanding of the SAMD51 to bring new support for displays, audio and more to CircuitPython.

Towards the second half of the year, @arturo182, @hathach, @microbuilder and @danh also did a bunch of work on CircuitPython support for nRF52840 based on the work done in upstream MicroPython. The nRF52840 lets us combine the USB workflow of CircuitPython with the power of Bluetooth Low Energy. Perhaps in 2019, we’ll even begin to supersede our beloved USB workflow with a BLE one that works across an even wider array of devices.

Near the end of the year, @ladyada, with @jerryn’s help, spent time adding library support for the ESP8266 and ESP32 as a WiFi coprocessor. The result was the welcome combination of CircuitPython’s USB with WiFi accessibility. This work highlighted the fact that focusing on a USB workflow streamlines our development process significantly. Without USB, library development is much slower.

So, in 2019 we’re focused on supporting CircuitPython on USB. We’re no longer supporting the ESP8266 as of CircuitPython 4.0.0 and we removed nRF52832 support as well. Doing so frees us up to work on TinyUSB, the USB library shared between the SAMD and nRF52840 support. By sharing this core, we can easily bring USB functionality, like USB MIDI, to all of CircuitPython.

Overall in 2019, for core CircuitPython, we’re focused on improving our existing platforms to enable more uses of them for things like displays and radios. Expect to see more frequent stable releases that add functionality rather than platforms.

Hardware

2018 CircuitPython hardware was headlined by Adafruit’s introduction of the M4 (SAMD51) line of boards which brought much needed RAM to CircuitPython. As some pointed out, the M4 boards let CircuitPython shine.

By the end of 2018, Adafruit wasn’t the only creator of hardware designed for CircuitPython anymore. Towards the end of 2018, we saw CircuitPython come to other boards running the SAMD and nRF52840. Electronic Cats added support for their SAMD boards to CircuitPython and SparkFun introduced their nRF52840 mini.

In 2019, we’ll see board designers ranging from hobbyists, like @deshipu, @cgrover and @siddacious, to companies, like Adafruit and SparkFun, push the boundaries of what we can do with the M4 and nRF52840. By the end of 2019, we’ll be wanting more RAM so that we do something even more amazing.

For us as a CircuitPython community, we need to support all of these designers to help them bring all aspects of CircuitPython to their boards. We can help with board definitions, up-to-date builds, up-to-date docs, library support and tooling. Let’s make sure that CircuitPython means the same thing regardless of the hardware it’s used on. Let’s let hardware designers push us to make all of these aspects better and easier for everyone.

Documentation

Our documentation has been solid in 2018. We saw many many new guides on the Adafruit Learn system and @kattni and @ladyada did a bunch of rework and fine tuning of individual guides and layout.

In the spring @tannewt and @ptorrone revamped the Python for Microcontrollers newsletter (sign-up and archive) and @ptorrone and @TheKitty (MikeB) have helped it grow to over 4,657 subscribers. It’s a curated list of all things CircuitPython, MicroPython and CPython that is emailed out every Tuesday morning.

Early in 4.0 development we added the ability to translate messages, including error messages, that CircuitPython returns. Thank you to everyone who has volunteered to bring CircuitPython to non-English speakers. In 2019, let’s broaden this effort into other areas of documentation like ReadTheDocs, tutorials and libraries.

A number of folks noted that while the docs are individually great, there is no central location to go for all things CircuitPython. Picking the correct download has become harder due to the numerous boards and languages we’ve added in 2018. In 2019, we need a better story for getting people to resources, such as docs and downloads, when they need them. We’ve begun work on circuitpython.org but could use help to see it through.

Libraries

circuitpython newsletter holiday 2018 blinka github adabot tux Adafruit

The CircuitPython libraries have grown into their own in 2018. We now have over 125, supporting most of Adafruit’s breakouts and peripherals. Thank you to everyone who has contributed in any way to our libraries. Contributions are not only code in pull requests but also testing the latest code, filing issues, helping others use the libraries and writing a tutorial on using a library.

Throughout 2018 we saw more and more people consistently contribute to the libraries including @kattni, @brentru, @sommersoft, @cater and @siddacious. In the fall, @kattni officially took on the task of organizing the library work and seeing everything through end-to-end. Her work has already become essential to CircuitPython’s libraries and CircuitPython’s success overall.

Many people are now using the CircuitPython libraries on Raspberry Pis thanks to @brennen and @ladyada’s hard work on Blinka, the CPython compatibility library. Single board computers like the Raspberry Pi are a huge new audience for CircuitPython’s libraries.

In 2019, CircuitPython’s libraries will continue to grow into more areas. Not only will we continue to support new chipsets but we’ll see more high level libraries created to make getting started easier. We saw this with the Circuit Playground Express library and now ServoKit and MotorKit. Later in 2019 we’ll see this apply to displays and BLE as well.

Tools

Great tooling is often an afterthought in many projects. However, MicroPython gave us a great foundation for testing the core and we’ve brought that philosophy to our libraries as well. Now many of our libraries are automatically linted and automatically released.

In 2019, as the number of libraries continues to grow, maintaining this automation will become trickier and trickier, updating and expanding it will be even harder. Luckily, @sommersoft continues to push what AdaBot can do nightly for us and is making it easier to update our repos en masse. Let’s make sure changing and releasing all things CircuitPython stays as easy and accessible as possible.

CircuitPython would be all alone without great text editors. Mu has been our goto since last year for its simplicity and focus on the beginner. With it’s 1.0 release last July it brought a simple editor to many beginners. Later in the year Mu released translation support which inspired translations in CircuitPython.

In 2019, we’ll need to push the boundaries of editors to be even easier. For example, there is still room to improve updating CircuitPython and libraries from Mu.

One fascinating area for editor experimentation is on touchscreens and over BLE. Touchscreen code editing unlocks a much larger and younger audience for learning to code. Now that we have BLE in CircuitPython, in 2019 we should both consider how BLE can impact the way we write code. Let’s lay the foundation for a wireless workflow so that folks like Josh from EduBlocks and Tim (aka foamyguy, who created an Android python editor) can iterate on what it means to code on a touchscreen.

Conclusion

Thank you to everyone who has contributed in any way to CircuitPython, from helping someone else on Discord to hundreds of code contributions throughout the year. We are in a great spot to make coding and hardware more easily accessible to everyone.

While none of us can predict the future, together we build it every day. It ends up being mix of ideas. Let’s remember to look up when lost in the weeds and think about where CircuitPython should be headed. Together, CircuitPython is what we make it.

Want to help with CircuitPython? Join us on Discord, we’d love to help you get started contributing.

CircuitPython Quick Stats

Here are some quick stats about CircuitPython since its creation. Change from last year is in parentheses.
1769 (+1158) commits to CircuitPython (separate from MicroPython and its pull requests)
35 (+20) authors of core platform contributions
10,172 (+3,723) members of Adafruit’s Discord server
129 (+67) libraries in the Adafruit CircuitPython bundle
815 (+500) GitHub stars

All posts

Thank you to everyone who posted:
@brennen – https://p1k3.com/2019/1/21/
@brentr – https://gist.github.com/brentru/d63f23d2ff8b35d118f100e06cad4211
@siddacious – https://github.com/siddacious/CircuitPython2019
@kattni – https://blog.adafruit.com/2019/01/14/a-story-and-some-thoughts-from-kattni-for-circuitpython2019/
@MakerMelissa – https://melissagirl.com/electronics#01142019
@danh – https://gist.github.com/dhalbert/162d496e0f146eec2cecb60c4a0de4c9
@MattyT – https://gist.github.com/mattytrentini/d5b22a1bce46aaaea3dc26dca4a10a13
@TangoJuliett – http://peden.software/2019/01/09/circuitpython2019/
@cgrover – https://github.com/CedarGroveStudios/CircuitPython2019/blob/master/README.md
@ntoll – http://madewith.mu/mu/users/2019/01/04/CircuitPython2019.html
@deshipu – http://dopieralski.pl/posts/2019-01-04-circuitpython/
@tannewt – https://blog.adafruit.com/2019/01/04/scotts-tannewts-circuitpython2019/