 Hello, everyone! This is the Circuit Python Weekly for July 12, 2021. It's the time of the week when we get together to talk about all things Circuit Python. I'm Jeff, and I'm sponsored by Adafruit to work on Circuit Python. Circuit Python is a version of Python designed to run on tiny little computers called microcontrollers. Development of Circuit Python is primarily sponsored by Adafruit, so if you want to support them and Circuit Python, consider purchasing hardware from Adafruit.com. This meeting is hosted on the Adafruit Discord server. You can join anytime by going to adafru.it. We hold the meeting in the Circuit Python Dev Text Channel and the Circuit Python Voice Channel. The meeting typically happens, as it does today, Mondays at 2 p.m. Eastern, 11 a.m. Pacific, although we do move it when it coincides with a U.S. holiday. When the meeting time is changed, we put it on the calendar, which is linked from the notes document. This meeting is recorded. We record audio from the Voice Channel and video of the Text Channel. If for any reason you don't like to have your voice recorded, you're still welcome to participate by leaving us notes. The video of the meeting will be posted on YouTube, and an audio-only version will be released as a podcast. If you find we're not available on your favorite podcast service, please let us know. As I mentioned, there is a notes doc to accompany the meeting and recording. If you can't make it to the meeting and like to participate anyway, you can leave your hug reports and status updates in the document, and we'll read them off during the next meeting. It also contains timestamps to go along with the video after the fact, so you can use the doc to help skip to the parts of the video that interest you the most. The meeting has been running 60 to 90 minutes lately, so the option to skip around can be very helpful. A link to the notes document is posted to the CircuitPython dev channel on the Adafruit Discord every week. Check the pinned messages to find the latest notes doc. This meeting is held in five parts. The first part is community news, where we take a look at all things CircuitPython and Python on hardware from the community, and it's also a preview of the Python on microcontrollers newsletter. Next up after that is the state of CircuitPython, the libraries and Blinka. It's a statistical look at the whole project, a chance to consider the numbers separate from kind of the nitty gritty of what we're all up to. After that, we get to the participatory parts. Hug reports is an opportunity to highlight the good things folks are doing, taking the time to recognize the awesome folks in our community. Next after that is status updates, an opportunity to sync up on what we've been up to. We invite you to take a couple of minutes and talk about what you've been doing in the last week since the last meeting, and what you'll be up to over the next week until the next meeting. And finally, in the weeds, an opportunity for more long form discussions, whether these discussions come out of status updates or something that you've thought up ahead of time will take these in the order that they are in the notes document, and that covers how the meeting will go. With that, I will scroll back to Community News in the notes document. Big number one, CircuitPython Day is August 6, 2021. Set your calendars. We've decreed arbitrarily that 8-6-2021 is the snakiest day of the year, and it's also this year's CircuitPython Day. So we've got about three weeks, I think, to plan this, and we are talking internally about what we'd like to do, and we also would love to hear from community members what they would want to do. I think the hashtag is hashtag CircuitPython Day 2021. Check out the newsletter for a little more info about that. Next up, CircuitPython and MicroPython. There was a live stream hosted by Michael Kennedy last week with Scott and Damien on July 8. And you can catch the coverage on the Adafruit blog or watch it on YouTube. Last week, late, Dan released CircuitPython 7 Alpha 4, which is the highest-numbered version of CircuitPython ever. It is relatively stable, but contains a number of issues still to be addressed for version 7.0.0 that Python APIs it presents may change. The notes document has a short list of notable additions to 7.0, so check that out. There's more on the Adafruit blog and, of course, on GitHub if you want the full release notes. Mew110beta5 is out and is available on the downloads page. This beta release may contain bugs or unfinished features. The Mew team had hoped for regular fortnightly release tempo, but due to the voluntary nature of Mew's development, and because some of the updates in this release were quite challenging, this release is later than the developers have planned. You can also check out the Mew blog. Next up, popularity. Pulse for 2021. Python C and Java all compete for most popular programming language in the Tyobi index. It is near a dead heat among those three, so check it out on Tyobi and the Adafruit blog. More trends and numbers. The 2021 Global IoT Trends report from Newark. They surveyed their global customer base between September 2020 and December 2020, and they've compiled the results which you can now read on the Newark website. And finally, a project from the community. Quote, now that my Sphero RVR drives to specific coordinates on the floor, I can get my apartment delivery system online for use during quarantine. Powered by an Adafruit Metro M4 running CircuitPython and elements of the SDK. There's a link to Twitter where there is more info. There is a lot more than this in the CircuitPython Weekly newsletter. Our community run newsletter emailed every Tuesday. The complete archives are online. Check the note stock for a link. It highlights the latest Python on hardware news from around the web, including CircuitPython, Python and MicroPython. To contribute your own news or project, you can edit next week's draft on GitHub and submit a poll request with the changes. You can also tag a tweet with hashtag CircuitPython on Twitter or email cpnews at Adafruit.com. And that wraps up the overview of the community news. Moving on to the state of CircuitPython, the libraries and Blinka. Once again, this is a statistics based overview of the health of the project. Overall, and this is across the CircuitPython core, the libraries and Blinka. We had 41 poll requests merged by 15 authors. Thank you to all of those. She is not new to contributing, but I want to highlight that Katni had a contribution to the core in this past week. So thank you very much for that. D Griswold, GM Paris, and Fear Zero are some names that I am less familiar with, so I want to thank those contributors as well. On the reviewers side, we had 12 reviewers. I want to thank Tio Mitch because I asked him for a review in an area of the code where he had been working and he kindly replied and suggested some improvements. Of course, Jose Posada, a more recent addition to the review team, thanks to you as well. And with that, I will ask Scott to tell us about the core. Hello. So we had 11 poll requests merged from 9 different authors. Thank you to all of our authors. We had 6 reviewers for those 11 poll requests, so thank you to all of our reviewers. And shout out to Tio Mitch again for being in Katni, our new reviewers on this list, I think, as well, and Micronev Chandin too. So thank you to those relatively new reviewers. We have 17 open poll requests, which is quite good for us. We've been above 20 for a while, so it's nice to be under 20. We do have a couple poll requests that are over 200 days old, so we should take a look at those. I think a couple of them actually did get pinged, which is great. So if somebody's looking for a way to get started in core development, either doing reviews is a great way, or also picking up some of these older PRs is really, really helpful as well. I know there are a couple PRs for just adding board support. So if you happen to have one of those boards, it would be awesome if you would just pick it up and get it merged in. We'd love to support all the boards we can. We have 5 closed issues by 4 people and 9 open by 7 people, so we're net up 4 issues for a total of 472 open issues. The way that we keep track of our issues is we use milestones to determine prioritization for those of us sponsored by Adafruit. We don't have a whole lot of contributions outside of that. That's kind of why it's Adafruit-sponsored prioritization. But again, if non-funded folks want to help on this, that's great as well. We'd love to hear your feedback. So we have 74 open issues for 70, which is clearly a huge number, and we need to go through that mouse on this and kind of decide where things should go. We have 372 long-term issues and 6 support issues. So those 6 support issues are likely a bit stale. We could probably just close those. The support milestone tends to just be questions and things that people have, not things that are actionable to the core itself. And then we have 5 issues not assigned to milestones. So this is kind of keeping track of how well we're doing keeping on top of the new issues coming in. This number is not too worrisome. We do try to stay on top of that. And it's generally kind of what's come in over the weekend that hasn't been looked at since then. So we should be able to get on top of that this week. Overall, 70 turned out to be, I think, bigger than we all expected, which is great. And Dan did Alpha 4, which is really helpful. And so people, please try. Everybody, feel free to use Alpha 4. Let us know what you think. We're going to really try to drive into the beta phase, which is kind of like we're not going to break anything else, and then quickly hopefully get to the release candidates as well. We need to figure out out of those 70 plus issues, which ones we actually want to block a new stable release on. But it's been long enough that I think we want to push towards a stable release so we can get people onto 7 off of 630. So that's it for the core. Thank you, Scott. Next, I will ask Katne to tell us about the libraries. Hello. So this is a section about the libraries. It is about the Adafruit Circuit Python libraries, which is everything that starts with Adafruit underscore circuit Python underscore, as well as a few others such as Cookie Cutter and the Community Bundle. So we had 28 pull requests merged by six authors, which means somebody's putting in a lot of work, and eight reviewers leaving us with 47 open pull requests, which is good because that number is going down. We have 12 issues closed by five people and eight opened by eight people, leaving us with 317 open issues. Three of those are labeled good first issues. If you are interested in contributing to circuit Python on the Python side of things, go to circuitpython.org slash contributing. There is a list of open pull requests and a list of open issues. You can search the issues by label. Good first issue is a good place to start. There are not very many of them at the moment. We need to curate that a little bit better, but that's a good place to start if you're new to things. Or if you're looking for something a little more complicated, bug or enhancement are excellent ones to search. Take a look, see whether anything speaks to you. If you're interested in picking up an issue, just comment on it. In terms of reviewing, if you're interested in joining us in terms of reviewing, just check out a PR, see what there is that you can take a look at, syntax, spelling that sort of thing. If you don't have the hardware, if you do have the hardware, feel free to test it and just leave a comment and let us know. Once you're more comfortable with it, we can level you up to actually joining the review team. And these are all ways to contribute to the project on the Python side of things. In terms of library updates in the last week, we have had no new libraries and a short list of updated libraries. So overall, we're still working through all the currently open PRs and trying to get through the older ones. It's great to see all the new contributions, both to the Adafruit libraries and the community bundle. There have been a number of significant changes to the libraries and the core that are breaking changes. The plan is to aggregate a list of all those changes and prioritize in what order we should address them in terms of updating code examples and learn guides. So I'll be doing that this week so we can get started on updating all the relevant code and guides. And thanks to everyone who's been helping out with this. Thank you, Katnie. And finally to round out this section, maker Melissa will tell us about Blinka. Hello. Hi. Blinka is our circuit Python compatibility layer for MicroPython, Raspberry Pi and other single board computers. And this week we had two pull requests merged by two authors and one reviewer. There are three open pull requests now amongst all the different repositories and there were three closed issues by one person and one open by one person. And that leaves a net of 60 open issues. There were 11,166 Pi Wheels downloads in the last month and we currently are supporting 75 boards. And that's it. Thank you, Melissa. Next up is Hug Reports. So this is around Robin in alphabetical or document order as the case may be. I'll start with myself, go down the list and then head back to the top and let everybody have a chance to give their reports. So I would like to give a hug to Dan H for the configurable USB descriptor feature in 7 and also for the alpha release. And of course a hug for everyone who contributed to alpha 4. A big thank you to Lady Aida for fixing a problem with OLED displays that arose when she added support for the one on the macro pad and to Damian and Jimmo for reviews on the split type objects pull request. More about that later, but it's just really gratifying to see more cross communication between the MicroPython and CircuitPython groups. So that's what I have. Next up is Jerry. Hi. Let's see. So we have hugged to Dan and everybody else involved with getting 7.0 alpha 4 released. Nice job. And it's that group hug to everybody else and there's the cat right on cue. Meow. All right. You are up, Katni. All right. So my first hug today is to you, Jeff, for helping me create my first CircuitPython module. I brought it up in just terms of realizing it was far more complicated than I thought it was and you offered to help and walk me through it and that was super helpful and thank you very much for that. It was really satisfying to be able to do that. To Dan for doing the 7.0 alpha 4 release and everyone else involved in getting to the point where we could release it. To Laysand where I pray for putting together a list of learn code that's using a deprecated argument as a starting point for addressing the change. To John Park for feedback regarding the development of the MacroPad library for testing the code and getting me set up with examples for the MIDI documentation. To Sylvia for their first library PR and to Dan for the fix to the MacroPad display. It was something he had a lot of trouble duplicating. Basically, before the fix, the display would just scramble and turn into garbage within a minute or two for me with every single thing I was testing and required a hard reset to fix. So it was good that I was able to test it so thoroughly. So we knew the fix worked when it was no longer causing me problems but it was a very, very frustrating issue before the fix was put in. So thanks very much for that. Thank you. Next is Maker Melissa. Hello, let's see here. I want to just give a group hug to everyone. Thanks for that. Next is Scott. Hope you got your notes done. I saw you were just working on them. Hello. You know, lots of good stuff. First, thanks to you, Jeff, for the string compression improvements and T.O. Mitch for the quick review. Hug reports, Jerry, and for being a consistently thoughtful contributor to our community. That's related to moderation but also just being really helpful. Thank you, Jerry, and I'm so happy to have you here. Hug reports to Michael Kennedy and Kennedy and DP George for the good podcast discussion last week with the TalkPythonToMe episode that we streamed and will come out officially this week. Hug reports to Sylvia for their first contribution to the libraries with the TCS 34725 changes. And lastly, I don't know if this is on people's radar so I thought I'd hug report this as well but Michael Welling and TNT got CircuitPython going on their open source Pi5 chip test code. So it's actually running on an FPGA but they're targeting the Google open source chip design stuff. So they're hoping to actually have a RISC5 system on a chip that uses PS RAM and stuff. And they're specifically targeting MicroPython and CircuitPython for how they would design a chip for it. So they got CircuitPython running last week or over the weekend and it looks pretty neat. So hug report to them as well. All right, that is a lot. Looping back to the top, I have notes from another number of people so I will just read those off. Charles Burnford writes, Group hug to everyone who brought us version 7.0 so far. From Dan, a group hug for everyone contributing to CircuitPython development and library development. I was impressed with the number of contributors to 7.00 alpha 4. David Goud says, Group hug to all involved in 7.0 alpha 4. I feel like it's like a big thing. 7.0 alpha 4. And last up, FOMIGuy who is unable to attend today writes a hug report to the Semmary Puprey for looking into an issue around on-disk bitmap as well as pulling together a list of libraries that require fixes related to it. And a group hug. That wraps up hug reports so we proceed to status updates. This is the time we invite you to let us know what you've been working on since we last talked and what you hope to get up to in the next week or so. It's a round robin similar to hug reports and once again I will start. So this feels like a bit of a long list but last week I worked on the calculator project. The guide is coming together nicely but I haven't looked at it since Friday so I need to refresh my memory about what exactly is left. The space savings in flash by splitting type objects remains a work in progress. Damian and Jimmo from MicroPython have been participating in the discussion over there and what's great is they have two really good ideas about how to take the savings even further which I think what we're going to do is take this pull request very similar to how it is now and then let them take these ideas, work on them in MicroPython and hopefully get another few hundred bytes of savings when their version comes back in our next merge. That will mean we'll have to change CircuitPython twice and there are these kind of irritating repetitive edits that you have to do but it will be worth it to get the savings now rather than wait for the perfected version. I made another pull request with a smaller amount of space savings from tweaking string compression and then I immediately spent some of that space on adding a function called TixMS which is a wrap around Tix function that will later be accompanied by a library Adafruit Tix. So if you want to write code that says turn the LED on or off every 100 milliseconds this will really help you out because unlike microtonic NS microtonic, monotonic NS it is available on all the boards, even the smallest and unlike time dot monotonic it does not lose precision after your board has been on for a while rather it just wraps around every two to the 29th milliseconds for reasons that make sense to a programmer but the Adafruit Tix library is going to help you not think about these things and it will make it easy to say has my deadline arrived make my deadline be 100 milliseconds later than now and that sort of thing and then last for last week I learned enough about USB HID descriptors to make two descriptors that support N-key roll over and one of them was also compatible with the PC BIOS menu on my Dell laptop the first of those I put on my personal blog and it will be in the the circuit python newsletter and the second one I've just put on a gist and I think we're going to polish that some more and potentially add it onto the USB descriptors guide we'll see about that if anybody's interested in the link ping me after the meeting and I'll drop that and thank you, Katniss says the time dot microtonic and time dot nanotonic shall be the new function names alright this week I will be wrapping the calculator guide up hopefully putting that in the moderation queue on Tuesday and also hopefully wrapping up the type object split I will be out of the office on Friday so I'll be front loading my hours for the week just a little bit and then the other stuff on this list won't probably happen this week I need to learn how to publish the Adafruit Ticks library this will be different than the libraries I've done to date because it will need to be uploaded to PyPI as well as circuit python so that Blinkacode can also use Adafruit Ticks and I have not done that with a library with a bundle library yet and then another thing that we've been talking about internally is making plans for fixing guides that have incompatibilities in the code between 6 and 7 some topics include microlab on disk bitmap and the max size of groups and in the internal meeting we decided that the microlab stuff would fall to me and the other stuff would fall to other people and then up soon I'm returning to work on capturing JPEG images from the OB2640 camera and since that is quite enough for one week or even two, I will pass things on to Jerry oh, here's the unmute thanks John, I almost feel like such a slacker following you so I did field a few questions from the forums about the RFM libraries one of them just on the RFM69 the documentation some things are outdated some of the comments are no longer correct so I need to go back and scrub those so I'll work on a PR for that and then the RFM9x I don't know why I've never noticed this before but it turns out we have incompatibility with the Radiohead library in the Arduino in terms of how we enable CRC checking by default so I'll bring it up briefly in the weeds but to talk about it in more detail alright, thank you Jerry and now for the person who often makes me feel I'm a slacker, it's Katny I didn't do nearly as much because I was doing a lot with one thing so last week I started the MacroPad library created the new rainbow module Python is a new home for ColorWheel and removed ColorWheel from underscore pixelbuff which is the biggest contribution I've done to the core pretty much I think I've only changed documentation so far so now I've actually added a module and so far today I've finished and PR'd the MacroPad library if you have a MacroPad and you are interested in testing this, let me know I'll drop a link in the chat when I'm done it's a wrapper library for a few things and also does all the initialization for the basic stuff on the MacroPad similar to the Circuit Playground library except it's for MacroPad so this week I'm going to rename the module I created rainbow to rainbow.io to avoid naming conflicts on PyPI for Blinka I'm going to ensure Rainbow.io is working with Blinka I'm going to test and merge an outstanding PR on Adafruit PyPixelBuff I say if possible because I think we were waiting on the next version of 7 to be released and it has been so it's fine to merge now but I wanted to wait until that was the case so I need to go make sure that it was the version of 7 being released that was the thing sort out renaming underscore pixelbuff and Adafruit PyPixelBuff to match this is something I need to talk to Dan about because we need to do it in a way that doesn't break everything also remove color wheel from Adafruit PyPixelBuff when we generate the new Adafruit PixelBuff library but that is going to go with the renaming thing so that'll wait until I can talk to Dan and then the big thing that I will be doing once I'm done with getting Rainbow.io set up is starting to put together a list of the major changes in 7.0 and the libraries there have been a lot of breaking changes recently and we need to address existing code that has those changes applied to it we need to decide what order because there's just so much we need to decide what order we're going to address these things in so the plan is to put together a list of all the changes and then prioritize how we want to go about dealing with it and that's what I have so far this week thank you and next we go to maker Melissa so last week I worked on a machine learning cat detector guide so we kind of want to finish up the guide and then work on the web serial ESP tool somewhere and that's it thank you Scott what are you up to hello so last week was a very short week I basically had like three days off and then I went camping this weekend too so I got lots of summer going on which is a good thing but what I did work on last week was I got a serial console on code.circuitpython.org running and I hooked up a USB serial and then I got so excited about it I did BLE serial as well the site is still very very rough but it's meant to kind of connect all the pieces together so that somebody who's better at HTML and CSS can kind of move everything around to make it make sense because that's not my skill set so this week I'll be refining that plus bug hunting some things in circuitpython in particular like the reconnect phase of the BLE stuff is a bit slow so I want to take a peek into that and I need to get caught up on the mobile work specifically the iOS app that's going to connect to this stuff as well and I do have a PR for the very first BLE only board the microbit v2 and so I want to finish that up I might have to have us install a new tool because it involves merging two hex files together so I'm going to have to run that down and figure that out but hope to get the microbit v2 checked in this week and that'll be our very first board that doesn't have usb sport so that'll be interesting you'll need to modify the circuitpython definition to accommodate that such boards can even exist that's true I should put that on the read me shouldn't I yeah I think so it's a it's a big change and we need to make sure the rules are the same for everybody yep yeah that's a good point I'll have to include that as well and that just you just signed yourself up to be the reviewer as well all right I do have a v2 so I can test on hardware I probably I may not have anything that actually works with bluetooth though because I'm all linux well we'll see what phone do you have it's a telephone and android android so if you run chrome on android it should okay we'll talk about it later but yeah yeah so let me just advertise a bit more because one of the my main goals is actually to like do whatever leg works needed so that people can try this out and test it and use it so if you're interested in being an early adopter for the bealy stuff basically the code does circuitpython.org requires chrome and that's either chrome on android linux works for for usb but not for bealy from what I can tell you might be able to get it to work but and then I've been testing on my mac from chrome and windows from chrome and edge from chrome should actually work as well or edge from windows should work too so it's a big big new world and it's going to take a lot of time to get this all refined and people actually using it but looking for people who want to brave the unknown all right moving back to the top of the alphabet I'll round it out by reading some notes from Dan who's not at the meeting as you may have noticed released 7-0-0 alpha-4 last week with a late fix for display glitches on macropad and this week continuing to debug audio issues on rp2040 and lastly foamy guy writes last week working on changes related to group max size removal and this week working on changes and reviews related to on disk bitmap pixel shader that rounds us out for status updates and brings us to in the weeds in the weeds is a chance for long form discussion of whatever circuit python related topic you have identified so we take these in the order that they're posted and I will just hand off to Jerry to introduce the first topic yeah thanks I mentioned before that the RFM9x library has the CRC disabled by default and Arduino's Radiohead library has it enabled and in most things we've tried initially or tried to keep the defaults matched up so my first reaction was oh we'll just you know we can just change the default that's it's a really trivial thing to do I do want to just check you know if anyone's concerned because I don't know if we consider this a breaking change or not because anyone who's using say has you know units already deployed then they'd have to go change they have to make a change to just get the right default setting it's not not a big deal but it is a change so are there any concerns with that philosophically for doing this and is it really considered a breaking change I would consider it breaking but it's not a big deal like make it a major version change just so that people know to like look okay but don't feel like you shouldn't do it okay I'll get a PRN soon for it then thanks alright thanks Jerry next up I have an item from Dave P is your microphone working Dave can you hear me yes well then it's working we ran into a situation where the the SDK or the RP2040 the Pico behaves differently than MicroPython for doing a restart on a state machine and the question is which way do we want it to work do we have a separate way to request that the program counter be reset the only way to do it would be to manually and this is the way MicroPython does it is to exact a jump back to the first instruction that makes sense to me in terms of like if you're starting it back up what is our API I don't even remember all the API is just calling restart okay yeah I would I would have it start back at program counter okay so behave the same way MicroPython is yeah I think so okay I will do that then in MicroPython I would like to be pretty strict about like starting from the same place over and over again which is why I'm a stickler why we don't have state carryover from code.py into the REPL okay and I will I'll work on a full request for that then awesome thank you so much Dave thanks Dave alright that brings us to the wrap up of the meeting find my notes so this has been the CircuitPython weekly meeting for July 12th 2021 a big thank you to everyone who participated if you want to support Adafruit and CircuitPython and those of us that work on CircuitPython please consider purchasing from the Adafruit shop at adafruit.com the video of this meeting will be released on YouTube at youtube.com slash Adafruit and the podcast will be available on major podcast services it will also be featured in the Python for Microcontrollers newsletter visit adafruitdaily.com to subscribe the next meeting will be held as usual on Monday at 2pm eastern 11am pacific making it the 19th of July the meeting is held on the Adafruit discord which you can join by going to adafru.it slash discord to be notified about the meeting and any changes to the time or day you can ask to be added to the CircuitPython easter's roll on discord we hope to see you all next week thanks everybody