With 2020 just starting, I wanted to take the opportunity to share my thoughts on CircuitPython for the coming year. However, before I get to that I wanted to take the opportunity to share my story with becoming involved with Adafruit and CircuitPython. When I started at Adafruit, I was given the opportunity to do this, but I wanted some more time to gather my thoughts. Last year, Kattni had written a blog post in the same fashion which I found very inspirational and in the same tradition, I would like to do the same. Her story was one of the major factors in my belief that I could turn this from a hobby into a dream career and I am hoping to be able to help someone else as well.
I had been following Adafruit as a company for about 10 years, but I really started getting involved with the Adafruit Community about a year and a half ago while building a Calculator with a Raspberry Pi Zero W inside. While working on that calculator, I ended up writing a driver for a custom board I built to read the voltage of the battery and this was really my very first experience with Python. I ended up cobbling together two scripts I found. One was for the MCP3008 and the other was for displaying icons on the Raspberry Pi desktop. I got that working and ordered my boards. My board had an MCP3002 and it wasn’t until I tried the new board that I realized the chips were a little different. Looking at data sheets for the two chips, I was able to convert the driver to work on the MCP3002 and my custom board worked perfectly on the first try.
Another issue I was having was getting the Adafruit PiTFT to work on a Raspberry Pi Zero W. I looked on Github and saw there was an issue already filed because another person was having the same issue. Since I didn’t want to wait for the issue to be solved, I decided to tackle this myself and started debugging and dug deeper than I had into the Raspberry Pi’s internal files. I found that I needed to load a couple of modules before the driver loaded and posted my solution and a detailed explanation of how I found it to the issue. Although the solution didn’t involve code changes, I was able to help another person and that felt great.
During that time, I had heard about CircuitPython through the weekly Ask an Engineer show that I was listening to. I made my first Show and Tell appearance about that time to show off my calculator and a few more over the next couple months. Shortly after this, I started up my own YouTube channel. One of the projects I featured on my channel used CircuitPython and four Neotrellis boards that I used to create an easy picture maker. This was mostly a modified version of one of the examples, but it worked great and was really my first time ever using CircuitPython. I announced it on Twitter and it was featured in the Newsletter and on the Ask an Engineer show. I got quite a few followers from that and it encouraged me to look at CircuitPython some more. Another project I ended up making was an alphanumeric scroller using a HalloWing M0 and the Alphanumeric FeatherWing.
I happened to hear about the weekly CircuitPython meetings around this time and was curious about checking that out. I kept forgetting about the meetings and I ended up listening to my first one on YouTube. A couple of weeks later, around the beginning of the year, I ended up lurking for my first couple of meetings and during one of the meetings, I heard Scott make a request for blog posts regarding what people would like to see as part of CircuitPython in 2019.
Right before that, I had made my first contribution to an Adafruit library, which was a tweak to the Arduino RA8875 library to load bitmaps faster because I was trying to get LittlevGL running on it, which was quite slow. This was for a project I was working on that never came to be. However, hoping CircuitPython might work better, I included an RA8875 driver as one of the items I would like to see in a post I wrote up for CircuitPython in 2019. Limor had seen my post about having a CircuitPython driver for the RA8875 display and requested that I write it. I accepted with a lot of apprehension because I was going from modifying examples to writing a full fledged library.
Before I started, I had no idea that the CircuitPython libraries were written in Python. I had thought they were written in c and so writing it ended up being easier than thought. It mostly involved learning a lot of CircuitPython, but learning for a project is really how I learn best. So I started going over driver examples and had my first CircuitPython library written within a week. Once I was finished, because she was in charge of the libraries, Kattni ended up being the person tasked with helped me with getting this passing Travis and added into Github and she answered a lot of the questions that I had. She became my main contact at this point and whenever I had questions, regarding contributing to Adafruit I asked her. She usually had an answer, whether it meant pointing me to a guide or just her best understanding and really helped me learn some of the basic procedures. I started with a few pieces of hardware I already owned and worked on issues related to those such as some bug fixes in the FRAM library. She also helped set me up with some additional hardware to work on, so I could tackle additional issues.
Not long after, the collection blog posts was published and I read through everyone else’s blog posts and was particularly intrigued by Kattni’s post because it included her story about joining Adafruit. This planted a seed in my head because doing the kind of work that I saw others doing for Adafruit sounded like an absolute dream job for me and it actually sounded attainable. I continued participating in the CircuitPython weekly meetings and always looked forward to those. I started focusing on the FeatherWing helper library and Kattni was able to help me with that since she had previously worked on the library. I decided to I start reviewing Pull Requests as well. A Pull Request is a set of code changes that users can submit to libraries that are approved by reviewers before becoming permanently becoming part of the new code. I remember occasionally referring back to Kattni’s Adafruit story because I found it very inspirational. Encouraged by her journey, I asked about writing my first guide as well, which was for the RA8875 since I had worked on both the Arduino and CircuitPython drivers. It took me about a month to finish my first guide and it was very well received.
During another weekly CircuitPython meeting Scott had mentioned PyCon and that if people weren’t able to afford to go to request assistance. I really wanted to go to PyCon because I was hoping to learn more so I could contribute more. I was preparing for a big move at that time though and was saving up for a deposit on a new place, so I was short on funds and I requested assistance. Adafruit was able to help me out because of all the contributions I had been making.
I continued working on the FeatherWing library, even during my move, but it was starting to come down to just a few boards remaining that were dependent on displayio being further developed. I switched over to getting some of the displayio drivers written so that I could continue and added my first contributions to the CircuitPython core. Since I was going through so many libraries, Kattni asked me to update examples as I would touch each one. She would occasionally ask me to review a PR (Pull Request) that was urgent when she was busy with some other tasks, which I was happy to help with because she had helped me so much. I felt like we were really starting to develop a friendship.
Eventually she talked to me about asking to join Adafruit on a part-time basis because I was starting to contribute on such a significant basis and I was already spending about 30 hours per week on Adafruit projects. I had secretly been hoping that this was what she wanted to talk with me about and was ecstatic. I remember one of the points that she stressed is that you need to advocate for yourself. I composed an email that she reviewed for me and sent it to Limor and Phil and heard back pretty quickly. They had noticed all the stuff I was doing and had been thinking about approaching me anyways, so they accepted. I probably had a constant grin plastered on my face for at least the next week.
I started working part-time that week and ended up asking Kattni a ton of questions and I got to know her a lot better during that time. Over the next couple of months, I would ask her lots of questions and she was always there to answer them. At this point, I mostly continued what I was doing, but focused on adding displayio drivers and doing more reviews. I started working on a second guide for the displays and finished that up a little quicker than my first guide.
It was almost May and PyCon was coming up quickly. The day before I left, I quickly wrote a little conference badge program for my PyBadge since I was kind of considered the displayio expert at that point. Even though I had only been really working with CircuitPython for a few months, I was able to help mentor others at PyCon, which was a great feeling. The conference badge program ended up being way more popular than I anticipated and I improved it throughout the conference. It really shows how far I had come in just a short time.
When I got to PyCon, I was finally able to meet Kattni in person and she was just as awesome as I thought. We got to talk a lot more and get to know one another better. I had a lot of fun at PyCon. With my other job, I had been working at least 70 hours per week and the conference was a nice break. It really gave me the opportunity to experience focusing on Adafruit stuff full-time. So, I composed an email, while at the conference, which talked about starting to work on a full-time basis. Somehow the email never arrived, but after following up a week later, Limor and Phil were definitely interested. We talked numbers and I started full-time in June.
After I started working full-time, one of the tasks that I was asked to help out with was working on Raspberry Pi support. One of the major components with Raspberry Pi support revolves around Blinka, which is our CircuitPython compatibility layer for Raspberry Pi and other Single Board computers. So I picked up on leading the way with Blinka and have added a few boards. As well as helped others contribute to Blinka. We have recently added a section to the weekly CircuitPython meeting to discuss any Blinka contributions. Another area that I have been working really hard on since starting full-time is updating and adding display drivers and their associated guides. I have also been helping with circuitpython.org website contributions. Most of those contributions are adding supported boards as they are added to CircuitPython, but I recently added a little counter to show the number of boards that are being displayed because there were starting to be so many that counting them manually was taking a while.
For CircuitPython 2020, some of the things that I would like to see include the expansion of Blinka to many more Single Board Computers. We are already well on our way to this, so it will most likely happen anyways. Another area related to this is that I would like to see more functionality added to Blinka such as displayio. Displayio is already gaining a lot of popularity on Microcontrollers and it would be pretty excellent to be able to run the same examples on other Single Board Computers running Blinka. As we wrap up any display updates, I see this happening as a good possibility as well. Another thing I would like to see, although it may not happen this year, is for CircuitPython to be the “go to” library for interfacing with hardware on the Raspberry Pi. I think additional functionality will go a long way in helping contribute to this.
Another area that I would like to see expanded is even more library support for third-party hardware. At this point we have a number of third-party devices already supported via a community bundle of libraries and even in the Adafruit libraries, but I would love to see CircuitPython continue to grow in popularity. I would also love to see support for RGB Matrices added as well. I think this one may or may not happen soon as the timing to write to these panels may be a bit difficult without interrupt support, but I would love to see it happen anyways.
It really has been amazing to watch CircuitPython grow over the past year and to be a part of it. I have seen versions 4 and 5 releases along the way and I went from knowing very little about Python to being a large contributor and for that am very thankful. For 2020, I really would love to see it grow even more in both capabilities and popularity.