 Hello everyone, this is the CircuitPython Weekly for Monday, April 15th, 2024. This is time of the week where we get together to talk about all things CircuitPython. I'm Liz, and I'm sponsored by Adafruit to work on CircuitPython. CircuitPython is a version of Python designed to run on tiny computers called microcontrollers. CircuitPython development is primarily sponsored by Adafruit, so if you want to support Adafruit and CircuitPython, consider purchasing hardware from Adafruit.com. This meeting is hosted on the Adafruit Discord server. You can join any time by going to adafruit.it-slash-discord. We hold the meeting in the CircuitPython dev-text channel and the CircuitPython voice channel. This meeting typically happens on Mondays at 2 p.m. U.S. Eastern 11 a.m. Pacific, except when it coincides with the U.S. holiday. In the note stock, there's a link to a calendar you can view online or add to your favorite calendar app. We also send notifications about upcoming meetings via Discord. If you would like to receive these notifications, ask us to add you to the CircuitPython NISAs Discord role. There is a notes document that accompanies the meeting and recording. You can contribute to this document beforehand. File notes document includes timestamps to go along with the video, so you can use the doc to skip around and view the parts of the video that interest you most. The meeting tends to run 30 to 60 minutes. After each meeting, we post a link for the next meeting's notes document to the CircuitPython dev-channel on the Adafruit Discord. Check the pins' messages to find the latest note stock, so you can add your notes for the following meeting. If you wish to participate but cannot attend, you can leave huggerboards and status updates in the document for us to read during the meeting. The meeting is held in five parts. The first part is community news. This will look at all things CircuitPython and Python on hardware in the community. First a choice instead of items from our Python on microcontrollers newsletter. Second part is the state of CircuitPython libraries in Balinka. This is a quantitative overview of the entire project, is a chance to look at the project by the numbers separate from our status updates. And the third part is huggerports. Huggerports is an opportunity to highlight the good things folks are doing, taking the time to recognize the awesome folks in our community. Fourth part is status updates. Stas updates is an opportunity to report on what we've been up to, take a couple minutes and talk about what we've been doing in the last week since last meeting and what you'll be up to over the next week. And the fifth part is in the weeds. In the weeds is an opportunity for more long form discussions. These discussions can come out of status updates or be something you've identified ahead of time as too long for status updates. And that covers how the meeting will go. And with that, we will get started with community news. So new versions of Python have been released. New versions of Python have been released by developers, including versions for Python 3.11, 3.12, and an alpha release of Python 3.13. And then I saw Project of the Week, a robot arm with a camera. Kevin McAllier made a cute robot arm with a camera on the end. He uses inverse kinematics to keep the camera pointing forward. Adafruit Circuit Python for Linux is used on a Raspberry Pi 5, and that would be Blinka. And then there's a fun note in the Adafruit Playground, which is a place where you can document your own projects. IKEA for NuFig Air Purifier V2 with a custom fan speed controller and Blinky Lights. And this and more is available in our weekly Python for Microcontrollers newsletter, which goes up via email on Monday mornings. Visit AdafruitDaily.com to subscribe to the newsletter. Thanks to Ann for putting the newsletter together. If you have any Python hardware projects to share or find content you'd like to see included, please consider contributing to the newsletter. You can open a PR on GitHub, mention Ann Engineer on Twitter with hashtag CircuitPython, or use hashtag CircuitPython on Macedon, and email cpnews at Adafruit.com with a link. And that is community news. Next up is going to be State of Circuit Python, Libraries, and Blinka. This is a quantitative overview of the entire project, gives us a chance to talk about the health of the project separate from our status updates. We'll talk about the project overall and then separately discuss the core, Libraries, and Blinka. So first up, overall, there were 19 pull requests merged by eight authors, and those authors were Bill88T, Retired Wizard, Brent Rue, Joshua Beck, 0908, Dan Halpert, Tanute, Rushmate, DJ Devon 3. There were five reviewers, Dan Halpert, Brent Rue, Jepler, Fome Guy, and Tanute, and there were 16 closed issues by eight people, 21 opened by 19 people. And now we're going to hear from Jeff about the core. And as I return to that tab, it says you've been signed out of Google, which happens to me a lot. Anyway, yeah, so the core is the part of Circuit Python that is in C, and it comes from MicroPython, and it's what kind of makes everything go. And in the last week, we had 11 pull requests merged by eight, excuse me, by five authors and three reviewers. And I just want to call out the name of Joshua Beck 0908. That's a less frequent or newer contributor. So thank you for that. And thanks also to the three reviewers. That was Scott, me, and Dan. Our number of open pull requests stands at 21. So those range in age from zero up to 650 days. And over half of those are in draft status. And if you need anything on one of those PRs that you're working on, please give us a ping. We would love to help you move those through to completion. And if it's just not going to work out, it's okay to close it and reopen it again later when the time is right. Issues-wise, we saw our numbers go up a little bit with nine closed issues by three people and 14 opened by 12 people. That leaves us with 681 open issues. We track eight of fruit's priorities using the milestones. And so we have a milestone called 10.0.x, or 10.0.0, which is for incompatible changes that we want to do later on. We've got just two of those issues. For version 9.0.x, which are the issues that we want to solve in the current stable version, the most strongly we've got one open issue. And then for 9.x.x, which are issues in kind of medium term importance, we've got 26 of those. And then there are also some issues with libraries, long term support, third party, as well as eight issues not assigned to Milestone. Because somebody needs to go through and make some judgment calls on those and assign them to one of those other milestones. Beyond the numbers a little bit, I can tell you that Dan is planning to make another bug fix release of 9.0 in the coming days. That may also make an alpha release of 9.1. So just keep an eye out for those. And that's what I've got for the core. Thank you, Jeff. And now we'll hear from Fome Guy for the libraries. All right. Thanks, Liz. This section covers all the circupython libraries, which you can find all listed on GitHub under names like Adafruit underscore, circupython underscore. The name of whatever library will come after that. Across all of those libraries this week, we had eight pull requests merged by four authors. Of those authors, the names that stuck out to me as newer or less frequent was Brushmate. So thanks to them for perhaps one of their first couple or maybe just less frequent contributions. Thanks as well to retired wizard Brent and DJ Devon who made contributions this week as well. And then for those eight PRs, we had three reviewers. So thanks to Scott, Brent and myself for reviewing PRs this week. The PRs that were merged of those, the oldest ones were 23 days and the newest ones were brand new just one day. That leaves us after the week with 69 open pull requests of which the oldest draft one, I believe is 606 days and the newest is actually two days. We had no PRs yesterday, it sounds like. That, excuse me, in terms of issues over the past seven days, we had five closed issues by five people with five new issues opened up by five people. So net even there on issues for the week. That leaves us with 739 open issues across all these libraries. And there are five of those currently that are labeled as good first issue, which you can find listed over at circuitpython.org slash contributing, which is where you should head if you are interested in contributing to circuit Python on the Python side of things on that page. Again, at circuitpython.org slash contributing, you will find a list of open PRs as well as open issues. There is a dropdown near the top of the page for issues, which you can use to filter those issues by the different labels, including the good first issue, which are issues that have been identified as being good for folks who don't necessarily have as much experience or maybe don't have prior knowledge of circuit Python or that particular library or something like that. So those are the good ones to start with. If you want to start getting leveled up from there, the thing to do is just leave comments on those PRs. And on the review side, I should say, leave comments on the PRs, letting us know if you tested it out or took a look. If you tried it out, just write out what the results were. Once you get comfortable with that, we can get you tagged as an official reviewer so that you can leave reviews on GitHub. And if you would like, you can also, of course, take a look at the issues and take a crack at implementing a fix or a new feature or something like that and submit your own PR for consideration as well. We do have guides for contributing with Git and GitHub. So if you don't have experience, don't worry about that. Check out the guide. As always, join us here on the Discord as well. We've got folks around all the time who are always interested and willing to help you get involved in contributing no matter what your skill level is. In library PyPI download stats this week, we had 217,477 PyPI downloads across the 325 total libraries. The top 10 list is here in the note stock if you'd like to take a look at that. And in terms of the library updates in the last seven days, the ones listed here are, looks like a new one for the Community Bundle. MCP48XX probably works on multiple models there for the Xs at the end. And then there is AdafruitRequests got a new release and then it looks like UDesimal as well has a new release this week. So that's what we've got for libraries. Thank you. Thank you very much. And now we'll hear from Melissa to hear about Blinka. Hello, hello. Blinka is our circuit Python compatibility layer for MicroPython, Raspberry Pi and other single board computers. This week we had zero pull requests merged. There are currently four open pull requests amongst other repositories with two of those being drafts. There are, we're two closed issues by two people and two of them by two people leaving a net of 87 open issues. There were 15,261 Pi PI downloads in the last week, 10,850 Pi Reels downloads in the last month, and we are 133 ports. And that's it. Great, thank you. And that is the state of Circuit Python, the libraries in Blinka. Next up is HuggerPorts. HuggerPorts is a chance to highlight folks in the circuit Python community and beyond for doing awesome things. I will start, and then we'll go down the list alphabetically to give everyone a chance to participate. If you are text only or are missing the meeting, I'll read your notes when I get to them in the list. So I'm going to start by HuggerPort to Tan Newt for adding USB host featherwing support to Circuit Python. I know it at some point was a little bit of a struggle and I'm looking forward to trying it. Dan for enabling Bitmap Filter on the Matrix Portal S3. I have some generative audio reactive art things I want to try, so I'm excited about that. And a group hug, and then I'll read for Dan and we'll hear from DJ Devin after that. So Dan, HuggerPort to RA Quo for finding a flash write problem when heap is low and providing a test program that always exercised the bug. And now we'll hear from DJ Devin. Thank you. I have a hug for Dashipu and Dan H for their help in a project for getting ImageLoad working with multiple file types. Now that there are examples, I can turn them into snippets to copy and paste my way through future projects. Hug to Toddbot for updating his amazing DVD logo flash wind toasters screensaver to include external TFT displays. A hug to Anikdata, Toddbot, and Alpi Kenden for general Circuit Python syntax advice and help with Circuit Python channel. They're always great. A hug to Anikdata and Justin for advice on an Adafruit request PR, some very valuable advice. I appreciate you guys. And a hug to FOMI Guy for reviewing more PRs this week and another great Saturday morning stream adding more features to Circuit and for restructuring the bundle examples that are more useful now. FOMI Guy's been pretty busy, so big hug to FOMI Guy. All right, thank you. And now speaking of, we'll hear from FOMI Guy and then Jeff after that. All right, thank you. Hug reports for me this week. Thanks to Dan for going through, I think last week or the week before, went through a bunch of the libraries into the settings pages, which not very many folks have access to do and fixing the web hook configuration for docs, which was kind of a painstaking task, but very much appreciated. And thanks to DJ Devon 3 as well for many new requests in, excuse me, many new examples in the requests library as well as some improvements to some of the other ones in there. Thanks. Great. Now we'll hear from Jeff and then make her Melissa after that. All right, I wanted to start with a group hug and I also have one for Keith the EE who was thinking of me while visiting Lincoln and we got together to have some nice coffee and conversation. Keith is overdoing a lot of stuff on the Python Discord these days if you're interested in what he's up to. And thank you for the newsletter. It's a big thing that always creates excitement for me to see what folks are doing. And finally, to Lady Ada for keeping me well stocked both in projects and issues to work on. Thanks. Great, thank you. And now we'll hear from Melissa. I just had a group hug from everyone. And that's it. Thank you. And now I'll read for Michael Pakusa. FOMI guy for PR reviews emerges for Adafruit HTTP server and Adafruit template engine. And then finally, I will read for Tanu. DCD for time codes for deep dive. FOMI guy for filling in on deep dive this week and constantly improving SIRCUP. Sam Blunny for joining our community and one to me for hosting and reading your updates. No problem, Scott. And that was Hug reports. Next up is status updates. So, status updates is our time to tell folks what we've been up to individually. I will start and we'll go through the list alphabetically. When I call on you, take a couple of minutes to talk about what you've been doing since the last meeting and what you'll be doing until the next meeting. This is also an opportunity to provide tips and tricks relevant to what people are working on. If the discussion becomes too long for status updates, we can move it to in the weeds. And I'll kick things off. Recently, I've been working on a few Arduino projects. And while they were fun, I always enjoy then coming back SIRCUP Python after. The first is a Pico DBI Adafruit IO feed viewer, which is going to be published on this week on Learn. And the second is a USB host to Bluetooth project, which will be coming out in a week or two. And the code for both of these is already on GitHub if folks are curious in the Learn repository. And then at the end of last week, I wrote a quick SIRCUP Python driver for the ADG728 and ADG729 analog matrix switches. I'm currently documenting these in guides. And there are a few new products that dropped in the shop last week that I'll be working on documenting for the rest of this week. I'm going to be taking a short break Friday to Wednesday to recharge and enjoy the spring weather. And they'll get back to things after that. And now I will read for Dan. So he fixed a problem with rights to external flash when running out of heap. Use a finalizer for audio out to fix using up timers. Made a task list of other native classes that need finalizers. Fixed nrf analog in problems. One is a regression. And playing to do a 9.0.4 release Tuesday or so. And maybe a 9.1.0 beta one release. And he also updated about 44 guides that were still using secrets.py to use settings.toml. And playing to do a site search later to try to finish this off. That's a lot of work. So thank you, Dan, for doing that. And now we'll hear from DJ Devin. Thank you. Yes, I've actually checked out your S3 BLE guide and noticed that I was in Arduino and died a little inside. Hopefully circuit Python at some point. But yeah, we had to check our Arduino. Yes, I was hoping you would say that. This week I worked on a project that shows the latest circuit Python closed PRs on a TFT display. And I brought that onto show and tell this week. I will eventually split it out into a serial only example so that other people can have that in the out of request. Because I usually don't include display examples just for like serial API requests, the only kind of thing. So anything that has an API request that has to do with display is up to the user to do. But I do have an example on my repo that does include a TFT example. Started on a couple of basic request response examples that have been covered that haven't been covered yet, like status codes, different header types. This was an avenue that I was forced to explore during the course of the GitHub PR API display project and found out there weren't any examples for it. So I plan on making more examples that cover the basics of requests that are not currently covered. And there are a lot of gaps that need to be filled. I wrote a playground note on using a TFT touchscreen and SD card with a Raspberry Pi Pico. That was an interesting project because the Pico only has like 264 KB. So once you add all of that in you're already using 200 KB. You've only got like 50 KB left. And I tried to do an API, a simple API request and ran out of memory real quick. So it's not like an S3 where you can just throw anything you want at it. You have to be very selective about your APIs end points that you want to pull. And I finally submitted a typing PR for the IS-31FL3731. And after 28 failed attempts at making Pilot happy I finally did it on the 29th attempt. And that's all I've done. Excellent. Thank you. And good job sticking with that PR. And next we'll hear from FOMI guy. All right. I have been doing some testing over in the requests as well as HTTP server and template engine libraries. I have on my desk to work on this afternoon BME 680 temperature. That's a temperature sensor, right? I'm not actually sure what kind of sensor it is but I know it's an ITC sensor and I saw some an issue go by over the weekend where some folks are reporting issues with that and saying maybe that the current latest release has some problems with it. So I'll try to reproduce that and get it narrowed down to specific versions and figure out what's going on there. And then aside from that the kind of main things I've been working on past week or so are over in CERCOP land. I added or I should say I submitted a PR that adds a dash-upgrade command or argument that works kind of the same as it does in PIP. So this will basically overwrite an installed version of a library. If you use it with the install command. Ordinarily that install command will just warn you that that thing's already installed and it won't actually overwrite it. So this gives you the option to add that extra flag and actually get to overwrite. And then the other one which is a new command for CERCOP I have not submitted the PR for it yet. I've just been working on it locally at this point which is the CERCOP example command. This allows you to load examples from the libraries onto your device. The command and the tab completion are functional. I got those both working over the weekend but it definitely on the code side still needs some cleanup and as far as usability it should handle a few cases like what to do if there's already a file with that name. And another thing I think would be really convenient is if you could give it an argument to tell it to use code.py instead of whatever the original name is that way you could load it on your device and then it would run pretty much instantly. And all of this is kind of built on the stuff I did last week which was in CERCOP Python build tools. I made a change in there to make it so that when the bundles get generated they have separate folders for all the examples based on each library that used to just all go into one big one. So that was kind of the thing that underpins all of this to make it possible in CERCOP. And that's what I have got. Thanks. Great, thank you. And now we'll hear from Jepler. Hi. So last week mostly was spent working on ProtoMatter to update it so that it supports the upcoming ESP32 board support package version 3. That doesn't change anything that would affect CERCOP Python because this was code that was specific just to the Arduino environment. So this week I will be getting back into the CERCOP Python world. Up first is I've had either just a branch or maybe an open pull request for a while to add SSL support for Wisnet. I need to get back to that. I need to update it with whatever has changed in CERCOP Python in the meantime. Give it one last test. And then go ahead and set that PR ready for review. Another thing that I hope to get to this week is documenting a project that I did which was in Arduino for a USB keyboard to old computer adapter which is the opposite of what I do. I showed that off, I believe, last week on show and tell. So if you're interested in what that is. And then kind of the longer term project that I'm picking up starting this week is to look at what we need to do to add MP3 support on the ESP32S3 we use this library called Helix for the ARM processors and it seems to not be tuned well for the extensa processors. And so I will be looking at an alternative MP3 implementation that other folks have used on the expressive microcontrollers in the hope that it is going to work better. Of course, no date when it's going to be ready. Don't cash any checks yet about that. But that's what I will be working on. Thank you. Great. Thank you. And now we'll hear from maker Melissa. Hello. So I tested the voice bonnet on the latest bookworm on type 4 and 5 Lite and desktop. Worked fine on the 4 but not the 5. I'm going through guide feedback and making guide updates as necessary or taking note of things that aren't working. And then I've almost finished updating the chat GPT bearer guide to work with bookworm and I will also be testing out the mini Pi TFT on the Pi Zero W later today. And that's where I'm at. Great. Thank you. We all appreciate all the work you've been doing with the Raspberry Pi stuff lately. And now I'll read for Tan Newt. Merged in USB host featherwing support. Working on a build script for Pico Lib C and building circuit Python using Clang via make files. Goals to add a CI test to keep it working. Mostly offline this week at Sefer Dev Summit slash embedded open source summit and out Friday for a family weekend. And then missing the meeting next week for an appointment. And that was status updates. Next up is in the weeds. Right now I don't see any topics in the weeds. So while I'm reading the preamble for that, if anyone has a topics, please feel free to add them. In the weeds is an opportunity for long form discussions to come either out of status updates or the folks have identified ahead of time. If you have any in the weeds topics, please make sure they get added while we're discussing everything. So we're not weighing around to see if anyone has topics. However, it seems that no one has topics this week. So I think with that, we can wrap up the meeting. I can pause at one real quick. This week I tried to get PNG full true color PNG support working and failed miserably. Currently, the PNG support is only 8-bit indexed, which is basically like a BMP 8-bit indexed. So if anyone wants to take on true color PNG support, that would be appreciated because in my GitHub project, I had to swap in a default avatar whenever it pulled a PNG from GitHub. CircuitPython cannot display a native PNG from anywhere online, basically. So maybe that's a request, but I completely failed trying. If anyone has any hints on how to get PNG working, I am all ears. I'm assuming that would probably be something in the core. I know when JPEG and things have been added, that's been kind of a heavier lift in the core kind of side of things, but I may be wrong. Well, if no one else has any comments on that, thank you DJ Devon for bringing that up, and I think we can move to wrap up the meeting. So this has been the CircuitPython Weekly for Monday, April 15th, 2024. Thank you to everyone who participated. If you would like to support Adafruit and CircuitPython and those of us that work on CircuitPython, consider purchasing one something 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'll also be featured in the Python for Microcontrollers newsletter. Visit adafruitdaily.com to subscribe. The next meeting will be held next Monday, as usual, at 2 p.m. Eastern, 11 a.m. Pacific. This meeting is held on the Adafruit Discord, which you can join by going to adafruit.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 needs to roll on Discord. And we hope to see you all next week. Thanks, everyone.