 Okay, we are recording. Hello everyone! This is CircuitPython Weekly for Monday, February 27, 2023. 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 anytime by going to adafruit.it-discord. We hold the meeting on the hashtag CircuitPython-dev-text channel and the CircuitPython voice channel. This meeting typically happens on Mondays at 2 p.m. Eastern, 11 a.m. Pacific, except when it coincides with a 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 NISA's Discord role. There's a note stock to accompany the meeting and recording. The note stock contains timestamps to go along with the video, so you can use the doc to view only a part of the video that interests you most. The meeting tends to run 45-60 minutes, so this gives you the option to skip around. After each meeting, we post a link for the next meeting's note stock to the CircuitPython-dev channel on the Adafruit Discord. You can check the pin 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 hug reports and status updates in the document for us to read during the meeting. This meeting is held in five parts. First part is community news. This will look at all things CircuitPython and Python on hardware in the community. It's a preview of our Python on microcontrollers newsletter. Second part is stay at CircuitPython libraries in Blinka. This is a statistical overview of the entire project. It's a chance to look at the project by numbers separate from what we're all up to. Third part is hug reports. Hug reports is an opportunity to highlight the good things folks are doing, taking time to recognize the awesome folks in our community. Fourth part is status updates. Status updates is an opportunity to sync up with what we've been up to. Take a couple minutes, talk about what you've been doing in the last week, since the last meeting, and what you've been up to over the next week until the next meeting. 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. With that, we're going to go to community news. And I think the biggest piece of community news is CircuitPython 8.0.3 was released. CircuitPython 8.0.3 is the latest bugs fix version of CircuitPython as a new stable release. And some changes that are notable are the correct error reporting in SSL socket for the RP2040, increased number of LWIP timers for MD&S, and on the SAM boards fix pad assignments for bus.io.uart and improve pen validation. And then our CircuitPython weekly newsletter is a CircuitPython community-run newsletter emailed every Tuesday. The complete archives are available at AdafruitDaily.com. It highlights the latest Python on hardware-related news from around the web, including CircuitPython, Python, and MicroPython developments. Contribute your own news or project, edit next week's draft on GitHub, and submit a pull request with the changes. You may also tag with CircuitPython on Twitter or email cpnews at adafruit.com. You can also hashtag on Mastodon as well. Some notable projects I saw this week were a clock that changes time when you look at it, and that's when Guy Dupont, basically there's like this little sensor and it can tell when you're looking at it that it shows random numbers instead of just, you know, the actual time. And another notable is playing GIFs in CircuitPython. Our own Mark Komu Gambler has been developing GIF image playback on CircuitPython displays coming CircuitPython 8.1.0 beta. It's best on lower resolution displays so that your controller do the high data transfer requirements. And that wraps up the newsletter, which will be out tomorrow, be sure that you're subscribed. And the next is going to be a state of CircuitPython, the libraries, and Blinka. This is the quantitative overview of the entire project. Gives us a chance to look at the health of the project separate from what we're up to. We'll talk about the project overall, then separately discuss the core, libraries, and Blinka. So first up, in overall, there were 37 pull requests merged from 25 authors, eight reviewers, and 17 closed issues by 11 people, and 19 opened by 17 people. And now we're going to go to Scott for the core. All right. Thank you, Liz. Okay. For the core, we had 24 pull requests merged from 17 different authors. So thank you to all of our authors. I think Melinda Movasha is a new name. Exorbit is occasionally FTAB, Atlantor, Luzon00 are all new names to me. We had four reviewers. So thank you to all of our reviewers. We have 27 open pull requests. We're getting close to the 25 limit that gets it on a single page. So as always, please take a look and help us out if any of these draft PRs can be pushed along the line. That would be great. Issues-wise, we had eight closed issues by six people and 12 open by 11 people. So we're up four for a total of 624 open views. And this seems to be, I think we're in them. Now that 8.0 has been stable, we are getting more testing on that. So I think our issue influx is a bit due to that. No problem, we should get past it and all that. Speaking of categorizations or 8.0, we have three open issues in 8.0.x. These are things that we think we should do pretty quickly. We have 12 open issues for 8.1, and we have 62 open issues for 8xx, which are kind of bugs that we'd like to do sooner rather than later, or yeah, that we'd like to do it all. Again, this prioritization only really applies to those of us who are funded by Adafruit to work on CircuitPython. We're happy to see other folks come along and do things, even if they don't necessarily match up with these milestones. We have three issues not assigned to milestones. So those need to be taken a look at and categorized as well, triaged, and that's it for the core. Thank you, Scott. And next we are going to go to Libraries. Catney is out, but Jeff has kindly offered to read for us. Hello. So this is about the CircuitPython Libraries. And numbers-wise, we had 10 pull requests merged across all of the libraries from seven authors. And I want to say thanks to EA Graham Jr. and LNK2Past, who are names that I don't recognize, as well as the five reviewers, thanks to all of you. There is in the notes document a list of those merged pull requests, and that leaves us with 46 open pull requests ranging in age from one day to 881 days. And that one that's 881 days I'm sure is aging like a fine wine. Issues-wise, we had nine closed by six people and five open by five people. So this week we turned it downwards, but that leaves us with 593 open issues. Among those are 75 good first issues. If you're interested in this information and more, check out circuitpython.org slash contributing. You'll find all the open PRs, open issues, and a list of library infrastructure issues. If you're looking to contribute, this is a great place to start. The issues can be sorted by label, so you can search for good first issue if you're getting started, or bug or enhancement if you're looking for something a bit more complicated. We have a guide on contributing to Git and GitHub, and we're always available to get you started with that. So let us know if you need any assistance. All right, I've got some more numbers before I wrap up the libraries section. We get download stats from PyPI, and in the past week we had, I think this is weekly, yes, we had 134,494 PyPI downloads of over 306 libraries. And in the notes document is the list of top 10 libraries that were downloaded. Bus device often tops the list, Neopixel, and then some of the others vary. So if you're interested in statistics, go check those out. And as far as library updates in the last seven days, we had several updates, but no new libraries. And that's what I've got. Thank you. Thank you, Jeff. And next, we are going to hear from Melissa on the state of Blinka. Hold on, I lost my document here. Here it is. So Blinka is our circuit pack. The layer for my Python reservoir by another single board computers. And this week we had three pull requests merged by two authors and wondering viewer. There are currently four open pull requests amongst the repositories. And there were zero closed issues by zero people and two open by two people leaving a net of 92 open issues. There are, or there were 19,779 PI PI downloads in the last week and 7,793 PI wheels downloads in the last month. And we are at 101 boards. That's it. Thank you, Melissa. And that is the state of circuit Python, libraries and Blinka. Next up is hug reports. Hug reports 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're text only or missing the meeting, but have hug reports in the notes document, I will read them off as I get you on the list. So first off, I want to say a group hug and then a just now I would like to give a hug report to Jeff for reading the libraries. And next I'm going to go to see Grover who is text only. He has a hug report to Dan H team and community for the latest release. And now we will go to Dan. Thank you. Thanks to Scott for starting to work on it at mx issues because we have a new board coming out. And thanks to Jeff and Scott for an issue review meeting over it at mx issues that we had last week. So we kind of assign things to everybody and push some things forward and decided what was more important. Thanks to X orbit for finding a regression of what is printed when we do a soft restart. We used to print soft reboot and some tools depended on that. I didn't know that. And there was a bug also where that ended up not being printed. So X over the night together found a very simple solution to that. Okay, that's it. Thank you, Dan. Next we're going to go to David Glau who is text only. He has a hug report for Scott for Dan care of his PR for display. SSD 1306 and J Pesada 2020 for testing it on hardware. I don't have Mark Glambler for the anime gift library and PT for chatting about my two product ideas with more. One was hinted in desk of Lady Aida. That's very exciting. And next we're going to DJ Devin. I have a hug for Nair Doc and Dan H trying to help me with the reason UM Feather S3 issue. I'll talk about that later. Thanks you to scur for having me find an alternative part in digikey that I couldn't find. And to Stendl and the help with 3D printing channel for very interesting discussions about 3D printers. I've been learning a lot about 3D printers in there. That's it. Thank you. Next we are going to go to foamy guy. Thanks Liz. This week hard reports for me. First one for Tetric for working on the JavaScript simulation with the walk walk we project. And only getting that up and running with some of the circuit Python stuff but also thinking about ways that it can be used to enhance some of our automated checks. Lots of interesting stuff on the horizon in that area. I think her report. Thanks to Scott for working on the seven color E Inc support inside the core as well as making a couple libraries. Thank you to GitHub user Vladac who has made a bunch of improvements in the mini QTT library lately and then a group hug for everybody. Thanks. Thanks foamy guy. Next we are going to go to Jeff. Hello, I have a group hug and then a couple of individual ones. One for Melissa for the very cool web based ESP 32 installer stuff. It's just every time you take a step forward in getting the software onto the device it's wonderful and this is one of those things. A hug to Jim and Scott for some outlandish flash savings idea discussions and making me explore some haunted corners of the C preprocessor. And finally a hug to Dan for releasing that latest version 803. That's my God. Thank you Jeff. Next we're going to go to Jose David who is text only, and they had a group hug. Next we're going to go to make her Melissa. I want to give a head tactic for all your updating or updating all sorts of libraries and group of everyone else. Thank you. Next we're going to have marks share has hug report for DJ air. I'm so sorry if I'm saying any of these names incorrectly. Michael LeCocque Deshipu and Dan H for troubleshooting documentation problems with on disk GIF. Michael LeCocque for writing a small Python tool to prepare GIF images so it will work with circuit Python. Larry Bank again for the anime GIF library and who reached out asking if we wanted to include anything upstream to help with integration to circuit Python. And then next is retired wizard who is also text only. Dan H and near doc for all the times they gently get me back on course a group hug to the entire circuit Python community for being awesome. And bill 88 T for the setable high stack PR. I never really believed I would get away from custom CP builds for my app but bill 88 T made it happen. And then we will go to Scott. Okay, sorry. Hug reports for me hug to Jeff and Dan for hopping onto the IMX RT train. It's going to be helpful having you to testing is and fixing as well. A huge hug report to Jeff for the lead on code size reduction. This is kind of for the CMD 21 that's it's pretty tricky to fit anything new. And I really value that Jeff gave me something from his back pocket to free up some space on the same day 21. So thanks, Jeff for that. And then also hug report to tactic for running circuit Python with the RP 2040 JS. I think this is really exciting being able to run circuit Python in the CI as if it were on RP 2040. I think we're going to get some really cool library tooling out of that. So thank you for working on that. Thank you, Scott. And that is been hug reports. Next up is status updates. Status updates is our time to sync up on what we're doing. We'll start and we'll go through the list alphabetically to give everyone a chance to participate. When I call on you to 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 much for status updates, we can move it to in the weeds. And with that, I will begin. And I've been working on a lot of product guides recently. And in between that, I've been doing a lot of CAD for an updating robots liar harp project. I finished printing the pieces over the weekend, so hopefully I can try and get a demo going soon. All I have to do now is, you know, put it together, which is always the toughest part. And next we'll go to C Grover, who is text only. Flurry of activity, assembling, testing and coding two projects consisting of four new PCBs. One of the project involves completely refactoring some older circle Python code with a fresh approach. The second is a new board family and code design. In the process of refactoring the first project, I found that when setting the duty cycle of a PWM pin with a fixed frequency, a code execution delay equal to the period of the PWM frequency is introduced. The blocking delay was experienced when trying to rapidly change duty cycle, particularly for DC motor and servo projects that prefer PDOM frequencies in the 25 Hz to 500 Hz range. The delay also complicated the use of async IO for motor control. The SAMD 51's PWM timer hardware has a double buffer mode that might eliminate the delay, but the symptoms indicate that it may not be in use. An issue was submitted. A tangent, wondering if the PWM duty cycle set delay could noticeably impact the throughput of other uses such as RGB LED arrays for non-neopixel devices. And this week, a solder paste extravaganza, which sounds very exciting. And next, we're going to go to Dan. Okay, so as people mentioned, I released sort of Python 803 on Thursday. We already see an 804 coming up probably that exorbit that fixed from exorbit, and there's probably at least one or two other things as we have three open issues on 803. We also want to release the first beta for 8.1.0. There's just some testing that needs to happen before that happens, but it should be very soon. As I mentioned last week, I'm working on UF2 Booloader fixed with the SAMV 21 that has brownout detection in it, which a number of people have asked for. One of the things that I'm testing for 8.1.0 is the implementation of the Metro M7-1011 to i.mx, NXP chip, and I've rediscovered or I discovered that even though this board seems to work properly on a lot of platforms on my kind of bog standard Intel Linux platforms, CircuitPy doesn't show up because it fails in the process of setting up. It's a kind of read failure. So I'm working on some folks with that and Scott is going to test it. He ducks up to get out of the closet so he can test it as well. This is not a problem for most people. It does work on some Intel Linux platforms and it works fine on Mac on Windows on the same computers. So this is really a Linux specific thing. All right. I wrote a guide about CircuitPy found safe mode and that guy is being reviewed so it probably will show up around Wednesday or so. And I did get a PyPico Debug Probe which I'm interested in seeing whether it works kind of as effectively as a J-Link or at all for people who now are being priced out of the J-Link market because the minimum J-Link cost is now $60 even for the educational model. Okay, that's it. And next is David Glau who is text only so I will read. No CP activity this week except consuming Adafruit YouTube video. And time spent in upgrading, installing my hardware and playing with stable diffusion, AI text to image. And next we're going to hear from DJ Devin. Thank you. This week I finished the physical 3D print of my mail boom box which took about 150 hours in total printing in clear PET-G which was a minor victory in itself. I attempted to start the wiring up the I2S audio module today which is going to piggyback onto the Laura Featherwing so it's a double stack. And I couldn't even boot that up because Windows refuses to detect the UM Feather S3 as a USB storage device which was something that just happened like hours ago, I just started on that. And it's stuck as a JTAG device which I've never seen before. And in the very last minute I think I discovered a potential issue with the USB-C connector itself that unexpected maker is using. It has some really weird issue where if you move it by a hair, one of the LEDs on the side will barely light almost like it's a capacitance kind of issue where, I don't know, it was weird. So there's something going on there and it could be my cables. I could have just all bad USB-C cables but since I've never been able to get the thing to work right I'm kind of starting to lean toward a bad USB-C connector or maybe some kind of crosstalk next to the USB. That would make a lot of sense. I've been in touch with CHEP3D who is a popular YouTuber for 3D printing about a possible 2.0 revision of his eLeveler PCB incorporating some of my ideas from the Betabraider PCB design which that was originally based on his. So I said, hey, you take it and you run with it. That's fine. I was really interested in the additional gantry leveling switch idea that I added on there as well as making it all one-sided flat PCB so you can use it on a heated bit. Just overall improvements and I was like, take it, run with it. Cheers, have fun. And that's all I've been up to this week. Thank you, DJ Devin. Looks like there's some tips in chat from Dan about what could possibly be wrong. And I'll also say just anecdotally, on Windows sometimes with these USB drives, I almost have to reboot sometimes just to get to work even if I've tried everything that would seem to make sense. So I'm sure you've probably already tried rebooting, but just wanted to mention that too. Next we'll hear from Foamy Guy. All right. I was not as around as much last week, so I didn't have a chance to attend last week's meeting. So I got a couple extra bullet points in here, but stuff I've been up to trying out the animated gift support on a couple of different devices. I was kind of tacked on to the side of that. I was doing some experimenting with the color converter class to try to get a better understanding for myself of how it works and specifically like how it's different than pallet and just the similarities and differences between them, what different functionality they have, all that sort of stuff. In the process of doing that tinkering, I uncovered that one of the changes that I made recently in the argument validation, actually I think limited the number of colors a little bit too small, smaller than I had intended to. So I actually went back and raised that limit in the PR, which I was happy to find this out by tinkering around with color converter and I walked away with a better understanding of it as well. So I'm feeling much better off on how that stuff works together. I tested out some instructions that were in a PR for using the Neopixel library on a Raspberry Pi without having to use sudo for executing the script. So that's pretty cool stuff and that was working pretty well for me and it was nice to see that somebody submitted that, somebody from the community submitted that as an update to the library. The other thing from the last couple of weeks, I was working on wiring up and testing the Pimeroni Impression e-Ink screen, which is one of these seven color e-Inks. I was wandering down the wrong path for a little while, but I eventually realized one of the libraries that Scott made actually works out of the box for this device. So now I've got that up and running. Moving into this week and the next couple of days, this morning I was testing out some PRs for Airlift and Mini MQTT. I got a couple other lined up to look into this afternoon as well. I want to make some more examples for those e-Ink screens. There's basically a simple one that loads a bitmap in those repos, but I think it would be nice to have some colored blocks and some other more basic things that don't require external images or anything like that as well in order to test it out. And then the other thing I have in mind for this week is to start looking into updating examples and learn guide code for the new DisplayIO APIs. Those are changed with 8.0. It's still backwards compatible for now, but I think now that 8.0 is released and live is a stable release, I think it's time to go and start figuring out how much of all of that code will be able to be updated for the new API. So that's what I've got in mind for this week. Thanks. Thank you, PomiGuy. And next we'll hear from Jet. All right. It was another light week as far as CircuitPython work goes, but I did fix a bug on Pico SSL sockets where a funny large number around four billion was returned instead of raising an exception. I investigated the PWM IO frequency limitations on the Raspberry Pi RP2040 microcontroller and improved documentation in response to a user reported issue. There is a possibility that it could be made more frequency accurate by using a slightly different algorithm, but it's a lot of effort for a pretty minor return as it is a typical error is like you ask for 60 Hertz and you get 59.95 Hertz instead. And the original poster, although they weren't thrilled with the idea, I suggested that they could directly use the PIO peripheral to generate a very frequency accurate and low frequency pulse. And then Dan, I don't know if you mentioned this, but Dan was going to pick that up and make it an exception if you ask for a frequency six Hertz or under on the RP2040 because the lowest value that it can give you is about seven and a half Hertz. Anyway, I've been working on and will continue to work on the floppy feather wing product guide. So look for that soon on the learn system that board does work with circuit Python or Arduino and it's fun if you're into that retro stuff. And also just this afternoon, I plan to check out the functionality of two prototype boards that the more sent me both are can bus products. And I think they've both been teased a really long time ago on ask an engineer or the Sunday night show or something like that because they've been in the works for a while. And you know, been caught in that product shortage wormhole, but they're about to emerge out the other side. And that's really exciting. Now we're going to look at Jose David's notes. Who's text only last week updating some examples for the paper displays worked in the verbose output for bitmap label worked to get ASCII art from a bitmap based on the work from Jeppler for the OV camera need more work. Circuit Python Jason working to build a font for knitting pattern symbols based on the work of Martin and Jeppler with the fork awesome font as a knitter that sounds great to me to this week, different personal projects. And now we'll be going to maker Melissa. Hello, let's see. I finished up the circuit Python installer and it's now live. There's still some cores issues that we're trying to work out, but currently the bootletters and Ben installs are working fine. But the U of two installs are the ones that are failing. So it's just a matter of just downloading and copying to the boards and not a big deal. I wrote a merge Ben library and JavaScript like ESP tools merge Ben function. And it's producing what appears to be a quick file but some more extensive testing is needed. And I updated the whippersnapper firmware uploader to be able to use that library. And I submitted a small circuit Python code editor bug fix for the USB workflow this morning. And so I'm just going to continue on that. Thank you, Melissa. And finally, we will hear from Scott. Hello. First on my list is testing the IMX RT USB with Intel USB controller. I have an AMD box that I use here. So I need to date and try it on Intel and had some issues. So I am going to dust off this Intel nut and give it a try with that. That's first on my list because that's kind of a showstopper. After that, the Bengal JS 2 and seven color ePaper PR was merged in. Thanks, Dan. I have two libraries to finish. And as I finish those, I also need to go through the, we have the creating and sharing circuit Python library guided ages ago. And it says there's some guide feedback there that I need to actually go through and update for. So when I'm in library mode, that's what I'm going to do. Besides that, I was working on getting the micro Python perf bench going with circuit Python. This is what the micro Python devs use to judge impact of their code changes on how performant the micro Python VM is. So I wanted to get that going on circuit Python in particular to understand the impact of changes with memory hierarchy decisions on the IMX RT. There's basically like all your code lives on flash, but then the CPU has some cash in front of it. And then you have RAM and different types of RAM on those chips there. They're a lot more complicated than a lot of the other micros we use. And so by having perf bench going, I can like try the IMX in different configurations and get a feel for what the right trade offs are. I'm going to write this up in this guide, this implementer's guide that I've been working on. So as a smoke test figure out like is the performance about what I want out of the port that I'm working on. A consequence of doing this was that we usually have a size analysis script for a build that says here's how full flash is here. Here's how full RAM is and the IMX because it has different types of RAM and flash is a bit more complicated. So I also am looking to redo the size analysis script so that we can see how big each different memory region is. So we'll be working on that as well. And that's my update. Great. Thank you Scott. And that concludes the status updates. Next we'll be going to in the weeds and I currently don't see any topics in the weeds. So while I read the description, that will be folks time to add in if you have them. In the weeds is an opportunity for more long form discussions that either come 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 other things. So we're not waiting around to see if anyone has topics. That I will wait once, twice, and we will move on to the wrap up. This has been the Serga Python weekly for Monday, February 27th, 2023. Thank you everyone who participated. If you want to support Adafruit and Serga Python and those of us that work on Serga Python, consider purchasing from the Adafruit shop at adafruit.com. 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 and that comes out tomorrow. 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 Serga Python nieces role on Discord. We hope to see you all next week. Thanks everyone.