 Hello everyone and welcome to the Circuit Python Weekly for July 26, 2021. This is the time of the week that we get together to talk about all things Circuit Python. I'm Katny and I'm sponsored by Adafruit to work on Circuit Python. Circuit Python is a version of Python designed to run on tiny computers called microcontrollers. Circuit Python development is primarily sponsored by Adafruit, so if you want to support them in Circuit Python, consider purchasing hardware from Adafruit.com. This meeting is hosted on the Adafruit Discord server. You can join at any time by going to adafru.it-slash-discord. We hold the meeting in the Circuit Python dev-text-channel and the Circuit Python voice channel. This meeting typically happens on Mondays at 2 p.m. Eastern, 11 a.m. Pacific, except when it coincides with the U.S. holiday. If the meeting time is changed, we'll notify you via Discord. If you wish to be notified about changes to the meeting, we can add you to the Circuit Pythonistas Discord role. We also make a note of it during the meeting beforehand. There's also a calendar available that we try to keep updated if you'd like to subscribe to that. This meeting is recorded. We record the audio from the voice channel and video of the text channel. If you would rather not have your voice recorded, you're still welcome to participate. The video of this meeting will be posted to YouTube and the audio is released as a podcast. If you find this podcast is not on your favorite podcast service, please let us know. There is a note stock to accompany the meeting and the recording. If you wish to participate but you can't make it to the meeting, you can leave hug reports and status updates for us in the document and we'll read them off during the meeting. The notes document also contains time stamps to go along with the video so you can use the doc to view only the parts of the video that interest you most. The meeting tends to run 60 to 90 minutes, so this gives you the option to skip around. A link to the notes document is posted in the Circuit Python Dove channel on the Adafruit Discord every week. Check the pinned messages to find the latest note stock. This meeting is held in five parts. The first part is community news. It is a look at Circuit Python. All things Circuit Python and Python on hardware in the community. It is a preview of our Python for microcontrollers newsletter. The second part is the state of Circuit Python, the libraries and Blinka. It is a statistical overview of the entire project, a chance to look at the project by the numbers separate from what we're all up to. The third part is hug reports. Hug reports is an opportunity to highlight the good things folks are doing, taking the time to recognize the awesome folks in our community. The fourth part is status updates. Status updates is an opportunity to sync up on what we've been up to. Take a couple minutes to 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 the fifth and final 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 is too long for status updates. And that covers how the meeting will go. So with that, let's start community news. So first up, Circuit Python 7.0.0 alpha 5 has been released. It is relatively stable but contains a number of issues still to be addressed for 7.0. The Python API APIs it presents may change. Notable additions include the Circuit Python development workflow over BLE, camera support on ESPS 232, keypad key scanning module, real-time customizations of USB devices, merging of MicroPython fixes and enhancements as of MicroPython 1.16. Underscore Pixelbuff is now Adafruit Pixelbuff. Color wheel routine moved to Rainbow I.O. Supervisor.tix underscore MS to allow easier timekeeping, simplifications to the RGB status LED codes, and a clocking fix for a few samples of RP2040 boards. And you can read about that on the Adafruit blog or check it out on GitHub. Next up, the state of open source hardware in 2021. The Open Source Hardware Association has released their annual report, The State of Open Source Hardware in 2021. This is an excellent report site, et cetera. It is a good resource to send someone who wants to know about open source hardware and see who is making it. Next up, Circuit Python Day. Circuit Python Day is August 6. Set your calendars. It is the snakiest day of this year and it is also this year's Circuit Python Day. The day highlights all things Circuit Python and Python on hardware. Are you working with Circuit Python? Tag your projects. Hashtag Circuit Python Day 2021 on social media, and Adafruit will look to highlight them. Tentative activities at the moment are 1 PM Eastern time. Jeff, Dan, and Catney discuss Circuit Python. 3 PM Eastern, Circuit Python board tour with Lady Aida. And 5 PM Eastern, Scott's Deep Dive Special Edition. Next up, EuroPython 2021 is this week. Tickets are required for this online conference. You can check out their website for more details and check out their preparing for the conference link there. Next up is some projects. First of all, this is a quote, a USB to MIDI converter. It uses an Adafruit rotary trinky with a USB jack hot glued in place of the encoder. This is a really bad idea, but at least the code's in Circuit Python. And there's a Twitter thread there from Todd Bot. This is also a quote. The added stem and quick connector to the pixel wing means you can have more plug-and-play fun. We're making a fun project using the Adafruit MPU6050 and Circuit Python to show you you can use MPU data to alter the matrix output. Then there is a project on Twitter using a BlackBerry trackball module with an Adafruit clue to move objects on a clue screen using Circuit Python. And then next up, and finally, if I can get my timestamp, get my timestamp where I want it. Nope, I can't. I'll just put it in there. Restoring an old lantern. The inside is an itsy-bitsy M4 powering 32 new pixels and running Circuit Python to change colors and run fun animations controlled by two buttons on the bottom. This has been a preview of the Circuit Python or the Python on hardware newsletter. It is a community-run newsletter emailed every Tuesday. The complete archives are available at adafruitdaily.com slash category slash Circuit Python. It highlights the latest Python and hardware-related news from around the web, including Circuit Python, Python, and MicroPython developments. To contribute your own news or projects, edit next week's draft on GitHub and Metapull requests with the changes, or you may tag a tweet with the hashtag CircuitPython on Twitter or send an email to cpnews at adafruit.com. And that is community news. Next up, the state of Circuit Python, the libraries, and Blinka. This is a statistical overview of the entire project by the numbers, giving us a chance to take a look at the health of the project aside from what it is we are all doing with it. I will talk about the project overall, and then we'll talk specifically about the core, the libraries, and Blinka. So first up, overall, we had 59 pull requests merged from 27 authors, some names I don't recognize. Wei Wang, 83, Ryan++, Ice Goat, 9, M.O. Jensen, O. Balzer, Tony Mitchell. There may be others that I missed as well, but those are some new folks we like to highlight. Yeah, that's a pretty large number of unfamiliar names this week. And we had 11 reviewers. And in terms of issues, we had 38 issues closed by 12 people and 19 opened by 15 people. So we are net down across the entire project. And with that, I will turn it over to Scott to talk about the core. Awesome, thank you, Kenny. OK, so for the core stats, we had 27 pull requests merged from 15 different authors, which is epic. So thank you, everyone. A special shout out to NathanY3G for being the name on here that I don't recognize. We had six reviewers. So thank you to all of our reviewers. We have seven open pull requests currently, which is up from our low of like three in the last week. But don't worry, the oldest is 171 days old. And besides that one, everything is less than 30 days old, so really nice job, folks. I see somebody copy that oldest one. I think that's the, it's a board PR. And folks are working on it, so that's great. Issues-wise, we had 29 closed issues by seven people, 12 opened by nine people. So thank you for everybody taking a look at that. We have a total of 440 open issues, which is a low for us as well. So this is us switching phases into getting ready for the 70 stable release. To do that, we have milestones to track kind of prioritization. We have 27 open issues in the 70 milestones, so still a lot that we need to take a look at. We've got seven for seven XX, things we'd like to fix, but don't block the stable release. And then we've got 379 long-term issues. Those are kind of the big buckets. We have five issues not assigned to milestones, which is not uncommon for a Monday morning. These are issues that need to be taken a look at and decided on kind of like what timeline we want to work on them. So that's the way it's working. We're doing a really good job at taking a look at those issues. So thank you to everyone who's looking at that. But overall, Alpha 5 is out, and we continue to squash bugs for 7.0. We're going to focus on the breaking API changes so that we can switch from alpha to beta. And please keep testing the latest code and filing issues for problems as they come up. We'll categorize them and then hopefully make some progress on them. So that's it for the core. All right. Thanks, Scott. Next up is the libraries. So this applies to all of the Adafruit Circuit Python libraries, which is everything that starts with Adafruit underscore, CircuitPython underscore, as well as a few extras, such as the community bundle and our cookie cutter library. We had 32 pull requests merged by 16 authors and 10 reviewers. The oldest one was 44 days old. And everything other than that was 11 days older less, leaving us with 47 open pull requests. We had nine issues closed by seven people and seven open by seven people, leaving us with 332 open issues. If you're interested in contributing to CircuitPython on the Python side of things, consider going to circuitpython.org slash contributing. You'll find all of this information and more, a list of open pull requests, a list of open issues, and some library infrastructure issues, which we use to keep everything in line with our standards. But you can search the issues by label. Good first issue. We have not been very good at curating, so I won't recommend that if you're new to things. As the only issues that are on there are not super helpful at the moment. But hopefully we will be able to get back into curating that better. So good first issue would be a great place to start. Otherwise, bug or enhancement is a great place if you're looking for something more complicated. And take a look at an issue. If you have the hardware, let us know you want to work on it in terms of reviewing, which is also a great way to start contributing. Check out the open pull requests. Take a look at them, see if there's anything you can comment on, syntax, spelling, that sort of thing. Or if you have the hardware, test it. Leave a comment and let us know. It's the best way to get started. And once you're more comfortable with that, we can talk about leveling you up to joining our review team. In terms of library updates, in the last seven days, I have a number of updated libraries, but no new libraries. We've begun working on updating all the libraries and examples to work with breaking changes, either made to the libraries or in CircuitPython7. Thanks to FOMIGuy for all the effort there. We're continuing to see new libraries in both the Adafruit and community bundles, as well as continued updates to both. We're still trying to get through all the open PRs. And as always, if you're waiting on us for more than two business days, please ping someone directly. And we will do our best to get back to you. And with that, I will turn it over to Melissa to talk about Blinka. So Blinka is our CircuitPython compatibility layer for Raspberry Pi, MicroPython, and other single board computers like the Raspberry Pi. This week, we had zero pull requests merged. There are currently two open pull requests. And let's see, there were zero closed issues by zero people and zero open by zero people, leaving a net of 58 open issues. There were 11,140 Pi wheels downloads in the last month. And we currently are supporting 75 boards. And that's it. Excellent. Thank you. Jeff, you may be right. The Adafruit ticks should have been listed. We'll have to take a look at that, try and remember to remind me. All right. And with that, that is the State of CircuitPython, the libraries, and Blinka. Next up is Hug Reports. Hug Reports is an opportunity to talk about the great things that people are doing in the community to call people out for all the awesome work that they are doing. It is held as a round robin where I will start, and then I will go down the list alphabetically and loop back around to the top. Where there are notes, I will read them for folks that have notes in the document but are not present in the meeting or are text only. And other than that, let's get started. So first up, a hug report to Dan for a lovely chat about many things, including some code deprecation to Jeff for always being available to help out with code issues, to Foamy Guy for picking up, taking care of all of the updates related to breaking changes in CircuitPython 7 and the libraries, to Laysamurai Pupprey for taking care of a huge chunk of PRs for the breaking changes, to Dan for adding to the breaking changes checklist that I wrote up, and finally to Laysamurai Pupprey for updating the CircuitPython Essentials Guide code to reference board.led instead of board.d13. Next up is Maker Melissa. Sorry, I keep losing my unmute button. See, I just wanted to give a group hug to everyone. Excellent. Next up is Scott. Hello. Let me stall. Hug report to CD Wilson for the STM32 Micro Mod definition PR. We'll look at that today. Hug report to Evil Dave666, JP for testing CircuitPython on the STM32 and having lots of good questions. Hug report to Todd Bonham, P.S. Nitin, Zenith, Dan H, and Neridoc for figuring out the Arduino RP2040 is a different flash chip than what they say in the thing they have different flash chips on different versions. So we've, luckily we support that. And it sounds like we've, I think it's already been merged in that we've got to fix for it. So thanks to those folks for figuring that all out. And that's it for me. Great. All right, next up is Dan. OK, rolling backwards. OK, Echo Catney, the discussion. We had a great discussion about what to do with GamePad and related things, which it's complicated what the series of events should be so that things don't break out from under us. Thanks to Scott for a long discussion we had about debugging audio problems, which we are seeing, which I'm seeing on numerous boards. I'll talk about that in the next section. Thanks to FOMI Guy for cleaning up the libraries so that we can deprecate GamePad. Thanks to Neridoc also for talking about that. And for general user support and discord and working on a number of other issues that have come up. And thanks to the Reeves Brothers and Jeff and John Park, all who came up with 3D printed backplates and key plates for the Snapapart Neo Keypad when I decided that I needed, I was worried about mind breaking when I was pressing on it. And I had a plethora of 3D things to try to print. Thank you very much. OK. Excellent. Next up, I have notes from David Glaude. First, a hug report to Jim Moosa Red for guest appearance on previous Deep Dive. To Neridoc for Disco Tool and to Scott for promoting it on the stream. To Colin for the through-hole SMD components trick and all of Colin's labs are great, but that one trick is amazing. To Ricardo Casada for the BluePad GamePad Library, now added to the CircuitPython Community Bundle. So bring your Bluetooth joystick. You can play wireless if you sacrifice Air Lift. And to FOMIGuy, Catney, and Dan, and others that work on the GamePad to Keypad migration. Next up is FOMIGuy. All right. Thanks, Catney. First hug this week actually goes out to you for the work you did on the grid-based LED animations that you showed off on the hack chat last week. That was kind of what I had in mind for LED animation, so I was excited to see that that's already in the works. To K-Match for some work that K-Match did actually a while ago on Bitmap Tools RotoZoom. I had a chance to play with that working on an Asteroids game, and it proved to be incredibly helpful. So thanks to K-Match for that. To Laysamurai Purpe for a bunch of great work on across many different PRs for removing, basically for display IO updates for both group and on-disk Bitmap. And also Laysamurai helped me out this weekend with an issue that popped up with Sphinx and the CI on GitHub, so I really appreciate that. And then the last one for me this week is to all of the great folks that write the Learn Guides. I did a bunch of reviewing of Learn Guide PRs and discovered a ton of great projects that I hadn't seen before. And it was really fun to get a chance to go through all of those and try them out. There's lots of neat stuff in there. Thank you. All right. Next stuff is Jeff. Hello. So last week, I added a couple of pages to the Learn System. I think it was some more camera stuff and some HID descriptor stuff. Do you mean Hugger Ports? Oh, Hugger Ports. Right. I'm soldering diodes here, so trying to multitask. Well, I had to thank you for PT. We had a one-on-one chat before the mechanical keyboards hack chat. And I don't get a lot of time one-on-one with him, so that was a lot of fun. And thanks to Hackaday for inviting us to the hack chat and to all the participants. It was a fun time. I want to thank V923z for the sustained work on MicroLab. And in the past weeks, working on some changes that we requested to get the documentation in order. And finally, to Dylan for her help with getting the Adafritics library squared away. Yeah, that's what I've got this week. All right, thanks. And finally, I have notes from Jerry, who has a group hug. And that is Hugger Ports. Next up is Status Updates. Status Updates is an opportunity for us to sync up on what we're all up to. Take a couple minutes, talk about what you've been up to since the last meeting, and let us know what you're going to be working on until the next meeting. We're also happy to hear about any kind of fun projects you're doing or fun things that you've done over the weekend, that sort of thing. We want to know what you're up to. So this is also held as a round robin in the same fashion. I will start, go through the list alphabetically, read any notes that are there for folks that are not attending. And that's about it. So let's get started. So last week, I got, phone me, guys, spun up on the breaking changes effort. The first step of that was putting together a spreadsheet checklist, mostly so we had a visual on what all the changes were and what the state of them was, whether they were already implemented, whether it broke current code, whether it was backwards compatible, that sort of thing. So I put together a possibly confusing spreadsheet. And then, phone me, guy agreed to pick up getting all those changes taken care of. So I walked him through the very confusing spreadsheet but explained that there were maybe two or three spots that were the most important things, which was basically, is it in progress? Are there issues filed for it and is it done? So phone me, guy can basically track that. However, the spreadsheet was just an initial thing that we needed, but we got a chance to sit down and talk about that and that was good. I updated the Circuit Playground Library to use keypad instead of gamepad and then promptly removed the use of keypad from the Circuit Playground Library and removed the function that required it, which was WordPress entirely, as it was not used anywhere and was the only reason gamepad or keypad was needed for the library. I updated the welcome to Circuit Python guide to refer to board.led instead of board.d13 in a couple places. There's still screenshots to be updated and I've likely missed some references. Updating those screenshots is going to take a bit of time, so I haven't done it yet. It needs to be done. And I finished the Neo Key Ortho Snap-A-Part guide. It's in moderation, so that should be sometime this week, presumably live. So this week so far, which is this morning, I added the SED4X library to the bundle the PR is in, but not approved. Added an example to the MacroPad library based on the shipped demo PR was in and also merged. I fixed some references to D13 in the Circuit Python Essentials Guide in response to a PR from Lake Samurai Puprey updating the code examples to use board.led. And then after that, things I need to do moving forward is look at the LED animation PR, possibly PR's plural. And then I'm going to be writing up a guide and or guide page on using the MacroPad library because it's out there, it's good, and folks are confused. So we need something centralized and I'm not sure whether it's going to be a single page in the current MacroPad guide or whether it warrants its own guide. So I have to make that decision. And then write that up and anything else that comes up. So that's me. So next up is Maker Melissa. So last week, I worked on the Web Serial ESP tool to try and get it working with ESP32 at speeds that are greater than 115,200. Unfortunately, it's still not quite working, though the code is improved overall. I worked on some miscellaneous get-habitions as well. This week, I'm going to get the changes to the Web Serial ESP tool tested and merged in. Then I'm going to work on the, adding a keypad module to Blanka. I'm then going to work on some more get-hab issues related to Circuit 5.7 and possibly start a new guide. Excellent. If you can remember, do me a favor and let me know when you finish adding the keypad module to Blanka. Okay, I'll probably start working on that today. Okay, because the Neo Key Snap guide doesn't refer to Raspberry Pi at all. Right. And it probably should. I took a look at the in-moderation guides to give me an idea how to wire it up. Yeah, for sure. And that will be super helpful to be able to add Raspberry Pi to it as well. So excellent, thanks. All right, next up is Scott. Hello, so I've been squashing bugs for 7.0. Currently I'm working on the pulse out API changes, the changes that pulse out used to just take a PWM out to it, but there are, there's at least one implementation that uses a different mechanic than PWM out does. So we're changing the pulse out API to take a pin, a frequency, and a duty cycle for the carrier wave. So I'm testing that. I found a bug on STM. So I'm trying to squash that. I've got two other bugs after that that I'll be working on. I've added support for more than one status Neo Pixel and enabled it on the circuit playground boards, both the blue fruit and the express. So the, you'll expect, you'll get some more feedback there, which I think is a good thing. So I'm bug squashing this week. And then I'm also recording a real Python episode. It's a podcast and recording that tomorrow. So that's what I'm up to. All right, thanks. Next up is Dan. Okay. Last week I released circuit Python 7.00, alpha five. There'll probably be an alpha six relatively soon. As I mentioned already, we were trying to deprecate gamepad and we worked through a lot of iterations of how to do that. I did that with Caddy and a phone guy who cleaned up the libraries and we're in a good place with that right now. I'm still, still, still working on audio issues. Phil Burd just reported that he was having issues on Feather M4 as well as on RP2040. So I tried things on that and it's still bad. There are different issues on that board and there seem to have been audio issues since like circuit Python 5.00 or so. So I have, I made up a sort of a comprehensive test on RP2040, SAMD51 and NRF and I wrote a test program that tests numerous salvo rates and stuff like that so I can try things out easily. I'll be concentrating still on trying to fix the RP2040 problems. But what this means is that there might be numerous problems and there might be related bugs. There isn't a whole lot of shared code but it could be that the same kind of bugs exist on all the different, on most of the different platforms which might be helpful. So also I'm, I need to, we want to get ready for 7.00 beta which means we need to stop changing the APIs and there's still an API change I need to make for USB HID. So I will get that in at the very least get the API changed. There's some other stuff that needs to be implemented in addition to that and I might wait on implementing that but I'll fix the basic API or change it to be what it's supposed to be. And I looked at the issues list for 7.00 and I still have a number of other issues that are assigned to me to look at and to fix and I'll try to knock off the easy ones so I can concentrate on the harder ones. Okay. All right, thanks Dan. Next up, I have notes from David Glaude who says CircuitPython related, testing DiscoTool. Mu failed to work on my Windows so I use Notepad and DiscoTool to start Putty and testing BluePad GamePad library on Metro M4 with Joy-Con. Non-CircuitPython connected my Game Boy Advance to the internet to play Tetris with the Pico-based Game Link adapter from Stack Smashing and tested Ring Chordian playing accordion on PC with a Ring-Con from Nintendo from Game Ring Fit Adventure. And next up is FomyGuy. All right, so last week, I worked on updating PyBadger to use Keypad. So whenever we're ready to remove GamePad, that library will be ready for that change. I was doing a lot of testing and reviewing of Learn Guide code for the updates in Display.io, specifically group and on-dispit map. And then also I started working on an Asteroids game for PyGamer. So it was kind of fun. For next week, I'm gonna try to figure out what's going on inside the turtle library. So the update there for on-disk bitmap resulted in some kind of strange behavior. So I'm gonna dig in and figure out what's going on and try to fix it. I'm gonna keep working on the Asteroids game. So, so far I got it. So you can rotate the ship with the joystick, which is pretty fun, but you can't fly anywhere yet. So I need to learn about some kind of geometry to figure out how to move the ship around, actually, make it go forward. I'm gonna try to finish up the rest of those Display.io changes. Anything that's not merged yet, I'll be trying to review this week. And anything that is yet to have a PR, I'll be trying to make those. And then the last thing I have for next week, I'm gonna plan on streaming on CircuitPythonDay, but I don't know exactly what time yet. I'm gonna try to look over the schedules that are out there and try to pick a time slot that doesn't have anything else going on yet. So I'll be streaming on that day. That's all for me, thank you. All right, be sure to let us know when you're gonna stream. We'll do. Thank you. Next up is Jeff. Hello, so next week's hug reports. No, no, I'm too far ahead. So I added some stuff in the learn system, a page on HID descriptors and the other thing. I knew what it was earlier, but it's gone now. And as Dan mentioned, I made some 3D printed parts for the five by six snap apart key matrix. I helped out with moving the documentation of MicroLabs so that with version seven, the read the docs documentation will have each thing in the correct location. I published the Adafritics library to the bundle and PyPI and Dylan took care of the read the docs because I forgot about it. I entered a PR that will show the module availability on the individual module pages in addition to the support matrix page. Dan, I think had some suggestion to refine the wording a little bit. I tried to upload images to Adafruit IO from the OB2640 camera, but it seems there's a bug on the IO side. I worked a little bit with Brent, Brent verified that it's a bug. The bug is reported internally and I'll return to that once it's resolved. So this week I am going to work on saving bitmap images captured by the OB2640 and the reason we wanna capture bitmap images is that we can do at least limited processing within the microcontroller. So for that I will port some filters that Philip Burgess has written. I think it's things like invert the image and blur the image and edge finding and those kinds of things. Not as sophisticated as an Instagram filter, but it's still interesting. And then as we discussed earlier, I'll make sure that there's a release of Adafritics that is marked as a stable release so that goes in the bundle properly. And beyond that, I don't know. It doesn't seem like much, but then lots of things stretch into being a whole week when you didn't expect it. So we'll see how it goes. All right. And that is status updates, which brings us to in the leads. In the leads is an opportunity for more long form discussions. I won't get into too much detail because there are no topics. So it looks like we're gonna be wrapping this one up super early today. Take a look at wrap up. All right. So this has been the Circuit Python weekly for July 26th, 2021. Thank you to everyone who participated. If you want to support Adafruit and Circuit Python and those of us that work on Circuit Python, 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 on 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 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 Circuit Python Easter's role on Discord. And we hope to see all of you next week. Thanks, everyone.