 Hello everyone. This is the Circuit Python weekly meeting for Monday, May 22nd, 2023. This is the time of week where we get together to talk about all things Circuit Python. I'm Paul Cutler, and I'm a member of the Circuit Python community. What is 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 Adafruit and Circuit Python, consider purchasing your 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 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 where it coincides with a U.S. holiday like it will next week, where we'll have the meeting on Tuesday at 2 p.m. Eastern due to the Memorial Day holiday in the U.S. In the notes doc there is a link to a calendar you can view online or add it to your favorite calendar app. We'll also consider, we'll also continue to send notifications in Discord. There's a notes document to accompany the meeting and recording. The final notes document includes time stamps 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 the most. The meeting tends to run 45 to 60 minutes. After each meeting, we post a link for next week's meeting notes document in the Circuit Python Dev channel on the Adafruit Discord. Check the pin messages to find the latest notes doc 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. The first part is community news. This is a look at all things Circuit Python and Python on hardware in the community. It's a preview of our Python microcontrollers newsletter. The second part is the state of Circuit Python, libraries, and Blinka. This is a quantitative overview of the entire project. It's a chance to look at the project by the numbers separate from our status updates. The third part is hug reports. Hug reports are 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 report on what we've been up 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. The fifth and last 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's how the meeting will go. With that, I'll get started with community news. I thought we'd start with the project of the week. It's an assistive project, which I love. It's called reviving the assistive technology Quinkey and Microwriter keypads. Quirky is a Circuit Python code for the PyPico version of the Quinkey keyboard based heavily on the work done by Microwriter. The device emulates a USB HID US keyboard and requires no specific drivers. It does, however, need the Adafruit HID Circuit Python libraries, which can be downloaded from Adafruit's HID example web page on GitHub. It now also includes a simple typing tutor application. And if you click through the Microwriter link, the Microwriter and Quinkey were six key chord keyboards created in the 80s for use by people with various physical limitations such as brittle bones. They developed a following among all types of users being simple, reliable, easy to use, and effectively allowed instant touch typing and speed. They also connected via an RS232 serial port to a tape deck so you could load and save what you were typing as well, which is kind of cool, or a BBC micro. The next project is a DIY circular sequencer made with Raspberry Pi, PyPico, and Circuit Python and some Neopixel rings. I thought that's interesting with all the synthio stuff going on. Here's a MIDI project that might tie into it. And then lastly is a review of MicroPython 1.20 from LWN.net. They provide a thorough review of the latest MicroPython release 1.20. And they go on to say, for those looking for an easy way to program microcontrollers, MicroPython has much to offer. Together with alternatives like Adafruit's MicroPython fork, Circuit Python, and the education focus sneak, or snake, I'm not sure. It shows that Python has a place in the embedded world. The closest competitor for microcontroller development, Arduino, requires at least some knowledge of C++, but Python is generally easier to pick up. Moreover, as the WebAssembly port and its use as a smaller and faster PyScrip runtime shows, MicroPython seems to be well suited for other constrained environments as well. This and more is available in our weekly Python for Microcontrollers newsletter, which goes out via email on Tuesday mornings. Visit AdafruitDaily.com to subscribe to the newsletter. Thanks to Ann for putting the newsletter together. And if you have any Python on 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. You can tag at Ann underscore engineer on Twitter with hashtag CircuitPython, or use the same hashtag on Mastodon as well. All right, with that, we will move on to the state of CircuitPython libraries in Blinka. This is a quantitative overview of the entire project. It gives us a chance to look at the health of our project separate from our status updates. We'll talk about the project overall, then separately discuss the core libraries in Blinka. Overall, we had 22 pull requests merged from 18 authors, which is great to see some that were new to me are Louisan00, AaronGD, XGQFRMS, and R. Cartera's. I apologize if I pronounced any of those wrong. And with that, I'd like to turn it over to Scott for the core. Hello. Okay, numbers for the core. This is like the C core of CircuitPython. We have 13 pull requests merged from 13 different authors, which is more than normal, which is great. So thank you to all of our authors. In addition, we had six reviewers for those 13 pull requests. So thank you to our six reviewers. This is also higher number than normal. So thank you to those folks as well. We have 25 open pull requests. A bunch of those are really young. So it looks like eight are three days or newer, which is awesome. So we are well under my one page of pull request gut check limit. Issues-wise, we had 13 closed issues by eight people and 13 opens by 12 people. We had a good number of people involved and a net zero issue count, which is great for a total of 644 open issues. We have eight active milestones. These are used to kind of prioritize eight different funded folks's work. We have zero open issues for both 80X and 810. So I suspect Dan will be releasing 8.1 soon. 33 open issues for 8XX and then 29 for 9.0. So we're getting closer and closer to that corner where we're turning into the 9.0 land. And 545 total long-term issues. So these are issues that we may need more information on or there's not a priority for eight of fruit. Feel free to pick those up if you find them and want to work on them. But those are not something that we imminently will be working on as eight of fruit funded folks. Last up, we have six issues not assigned to milestone. This is just to gauge how well we're doing and triaging issues as they come in. And so we'll have to take a look at that. And that number is probably lower because it's Monday morning. So likely get to those as well, but always good to check. And that's it for the core. Thanks, Scott. And Kenny, will you go over the libraries? Absolutely. This section applies to quite a few repositories. It is all of the eight of fruit circuit Python libraries, which is everything that starts with eight of fruit underscore circuit Python underscore, as well as our cookie cutter and our community bundle. So over all of those repos, we had nine pull requests merged from seven different authors and seven reviewers. We have currently 71 open pull requests, which is surprisingly high. Highest it's been in a long time. This is absolutely fine because, like I said, this is over something like 400, three to 400 repositories. And in terms of issues, we had two closed issues by two people and 10 open by seven people leaving us with 622 open issues. And 52 of those are labeled good first issue. If you're interested in contributing to circuit Python on the Python side of things, check out circuitpython.org slash contributing. You'll find all of this information and more including open pull requests and open issues. If you're interested in contributing by revealing, check out the open pull requests. If you're interested in contributing by submitting code or documentation, check out the open issues. If you're new to everything in terms of contributing code or documentation, we have a guide on contributing to circuitpython using Git and GitHub, which I'm realizing actually has a whole two sections on reviewing as well. So regardless of how you want to contribute, check out this guide. And we're always available on Discord to help you out. In terms of library PyPI weekly download stats, we had total download stats for the week. We're 168,523 over 310 libraries. And the top 10 downloads are in the list. If you're interested, they are in the notes document. In terms of library updates in the last seven days, we had one new library by Jose David called circuitpython BMA220. And we had five updated libraries that are in the notes as well, but I will not read them off. And that's where we are with the libraries. Thanks, Katnie. Melissa, will you go over Blinka? Yes. So for Blinka, we had, which is our circuitpython compatibility layer for MicroPython, Raspberry Pi, and other single board computers. This week, we had zero pull requests merged. And there are currently three open pull requests amongst the repositories. There were zero closed issues and one open by one person, leaving a net of 97 open issues. There were 14,169 PyPI downloads in the last week, 8,569 PyReels downloads in the last month, and we are at 119 boards. You'll notice it may have slipped back one board and that's because one of the 120 boards was actually added in accidentally and was actually a circuitpython board at home. And that's it. Thank you so much, Melissa. Next up is Hug Reports. Hug Reports is a chance to highlight folks in the circuitpython community and beyond for doing awesome things. I'll start and then we'll go down the list alphabetically to give everyone a chance to participate. We'll get to them in the list. First up, I have a group hug for everybody. Up next is Dan H. Okay, thanks. Thanks to you, Paul, for your professional interview of me for the circuitpython show. That's coming out today. I'll give it a little plug but it was a real pleasure to do that interview and it came out great. It was sort of invisible edits that made it sound better. That should be none. Thanks to Jeff for his continuing inspired Synthio capabilities. This whole thing is really on a roll and it's really turning out fantastically. And thanks to Charlie Zero Hotel, no, Charlie H-Zero, H-Zero Hotel. R. Carter AZ and Bab Block B and other, maybe other people for third party board PRs. This is true every week. We just seem to have more this week. We really appreciate people who are working on third party boards because we don't have them available to test. But we appreciate them being added to the circuitpython ecosystem. Thanks, Dan. Up next is DJ Avid3. Thank you. I'd like to send a hug to FOMI guy for helping me format a rounding function using F strings and for the educational stream on SD card, SD card that I will probably never understand. A hug to JP for a Synthtacular episode this week. It was circuit bending perfection with the Metro M7 and a neat IDC punchdown connector. Thank you or a hug to AnikData for the advice to use storage U mount instead of trying to race a sleep timer mission impossible style removing and returning the SD card between file rights. A hug to Tyeth and Spoblot for helping with MQTT and Adafruit IO. Are you really learning anything unless you fail in every possible way first? I failed a lot. I learned a lot about MQTT this week. Thank you both very much. And Paul Cutler for a great interview with Dan H. I already listened to that one this morning. That was great. That's it. Thanks, DJ Devon3. FOMI guy, you're up next. All righty, thank you. Hug reports this week. Thank you to Neridoc who has a circuitpython web sockets library on GitHub which has proven to be quite helpful to me this week. So thank you for that. And then hug report also to all of Jeff, Dan, Mark Gambler, Bill, 88T, and DeShipu all of who pointed me in various correct directions on things I was looking at inside the core over the past couple of days and I appreciate all of it. Thanks. Thanks FOMI guy. Jepler, what have you got going on? Hello, I have some hug reports for Mark Gambler, for John Park, and for Todd Bot for the continued SYNTHIO feedback. And thank you to you, Paul for hosting today. We're really happy to see you back in the role. Thanks Jeff, I appreciate that. Jose David is next. He's out missing the meeting today. I'll read for him. He has a hug report for C Grover for the elegant and useful color fader library. And with that Katni, you're up. Thanks. First up I have a super hug to Tectric for updating the CI setup on our learning system guides repository to only run the licensing and pilot checks when Python code is submitted when only Python code is submitted. It was previously building literally every Arduino project in that entire repository for every PR. Python PRs are now down to three minutes from over an hour sometimes up to two and this is going to save so much time and it makes so much more sense and it's something I've wanted for a very long time and finally got the okay to do it and Tectric whipped that up and I'm very excited. To hug report to Noah for his thoughts on my code which led to me to change some things to make it much better to Dan for a ton of help with my code including making all the right things user customizable and helping simplify bits that I didn't know could be simplified to Jeff for almost always being available to help with arbitrary code questions when I have them. To Naradoc, Anecdata, Bill88T, and Mark Gambler for a great discussion on the many ways that you can reset or reload your board from code. I wasn't thinking about it broadly enough and I was thinking they were really only two. To fill for a quick exchange about loading my upcoming canary nightlight guide with maybe not so oblique references to the lyrics from they might be Giant's Birdhouse and Your Soul and verifying that my plan to do that and including attribution were completely fine. To Liz for offering to do up fritzing objects until I figured out getting it working on my new laptop and for creating the fritzing object I needed for my next guide on my list hugs to other folks that I almost certainly missed and a group hug. Thanks, Katny. Make your Melissa your next. Hello. So I wanted to give a hug to you. Thank you so much, Patrick, for updating the Learning Guide CI to be much faster. Everyone who contributed to the discussion about changing over from Jack Alton, an alternative site generator including Dan Dan and Justin and a group hug to everyone else. Thanks, Melissa. Next up is Mark Gambler 21. He has a hug report for Jepler for more synth IO work that has led me down a path of learning about and a hug for Todd Bot and John Park for answering and confirming random synth things I find along the way. And with that, Scott, it's your turn. Thanks, Paul. Okay, so first hug to TAC for working on IMX USB host again. I tried it and it wasn't working so I kind of tossed the ball to TAC to take a look at it again and they made a PR to my stuff that I will get back to today to have some more USB host work on IMX done. And then in the same vein as Dan Tikeru for Lolan board deaths, thank you and also to Charlie Hotel for IMX 1060 EVK B board definition in addition to the regular EVK. Thanks to those folks for making board deaths. Thanks, Scott. And last up is Todd Bot who has hugs for Jepler for all the cool synth IO work. LFOs, filters and last to gambler mark for deeper synth IO testing that I currently have brain for. And with that, we'll move on to status updates. Status updates is our time to tell folks what we're up to individually. I'll 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. This discussion becomes too long for status updates. We can move it to in the weeds. Last week I edited both episodes for June with guests Martin Tan and Aaron St. Blaine. So that was nice to have those done and out of the way. And today we've got a new episode out with Dan H talking all things Circuit Python. Thanks again for being on the show. And with that, it's it is Dan H's turn. Okay, thanks. So I released 810, Circuit Python 810 release candidate zero last week. Nobody, those showstoppers showed up for that. So we decided in the internal meeting that we'll go ahead and release that as it stands as 810 final because we really need an 810 release. There's a bunch of stuff that could really use a labeled release some guides that depend on it and things like that. There's a bunch of stuff that's still outstanding. And that will be in 811 or even an 820 release. As we always say release numbers are free. They're cheap. There's a large supply of integers. So some things that will be in the next release after this I added alarm.sleep memory for RP2040 kind of because somebody got provoked to do it by somebody saying how come it's not there and it turned out it was really easy to add. I fixed expressive touch alarm which had been broken since 720 so that's also not something that's urgent. And there's a bunch of board updates and there's the synthio stuff and there's some various other things and all that can go in the next release after 810. You don't really need to hold up the current release for that. So that's the plan. So you'll see an 810 today I think if I get to it. Okay. Thanks Dan. DJ Devin 3. What have you got going on? Not much. I went on to show and tell this week with my custom 19 inch Neopixel Ring PCB. I'm still working on the motor and code for the Neopixel Lazy Susan. The PCBs and the animations running on them work well. I continued calibrating the BME280 sensor bias adjustment script. It's now 18.5% accurate up 0.4% compared against a NIST traceable mercury thermometer and NOAA data. This is a bias offset adjustment for the BME280 proof because if you count the little blocks you can see it's actually raising up temperature. I connected my feather weather station to Adafruit IO using MQTT mini MQTT this week. It's now automatically plotting the bias adjustment data points because I was writing literally writing them down. I automated that. I'm still hoping to improve it to 99.9% accurate this summer which might allow me to say it's associated with a NIST traceable. It's like this whole thing but that's really cool. I'm really excited to work on the weather stuff. I love that stuff. I modified a bitmap saver script to unmount the SD card after taking a screenshot of the display without worrying about file corruption. I submitted PRs to update the library examples using U-mount. If file corruption happens the only way to fix it is to reformat the SD card and I have experienced that in the past because it doesn't use U-mount. Hopefully this will save someone from that mistake in the future and that's all I got. Thank you. It's your turn. Alright. Over the past week or so I worked on I attempted I should say to make a custom build that would initialize the SD card a built-in SD card on a particular device and mount it inside of the core in the board and NIT function. I have been unsuccessful so far but I've received some tips on ways to get output for more troubleshooting so I kind of have the next steps would be if I do keep digging on that but I have also started to rethink a bit whether it will be as helpful as I initially thought to have the SD card get initialized inside the core. My current thinking is more along the lines of just initializing it grabbing what I need and then de-initializing it immediately so it spends most of its time not initialized instead of the opposite but I'm not 100% decided on my particular use case which will make the most sense. Over the past weekend I had some fun with a little project I was implementing the encryption logic that was inside the Enigma machine that was used in World War II there are some existing implementations of both Python and other languages those were pretty helpful to look at but I decided to build one up from scratch because I was having trouble understanding some of the ways that it worked and this gave me a much better idea since I was forced to learn it in order to write the code mine is functional but it's not fully accurate yet if your message is over a certain length then it won't come out as the same message that would be produced by the real machine that's because my rotor advancement logic needs some help I am thinking about making this once it does function correctly all the way I'm thinking about making this into a macro pad project I'm thinking about the macro pad device to act in a similar capacity as the original machine so the user could use that macro pad to encrypt or decrypt messages by inputting it into the device although obviously the macro pad would not have the full keyboard like the original machine did so that may be coming soon outside of CircuitPython World at least sort of I've been spending some time at my other job working on using the device as a digital signage player that would be used for displaying pricing or other information in the process I have submitted a couple of tweaks to the request library as well as the community web sockets library that I ended up needing in order to interact with the server that is being used in that case it's only happened for me a few times so far but it's always a really nice time when my other kind of professional world intersects with CircuitPython so I can spend some time at work doing some of this stuff as well for the upcoming week and today as well I've gotten started I'm doing reviews on libraries in particular the ePaperDisplay and HTTP server library I've been doing some testing on both of those and to go along with the HTTP server library this afternoon I'll be working on some updates that will be needed in LearnGuides and any other example code that does use HTTP server since the API is changing a little bit in this PR so we'll need to make those changes in a few other places and that's what I have got going on thanks Thanks funny guy and I'll turn it over to Jepler Hello again so my main focus right now is really trying to wrap up SynthIO I had a bunch of tests today and they all look good in local testing although they're failing in the CI so I'll have to take a look at that I also want to just appreciate again the feedback from Todd Bot who was kicking the tires I marked the pull request as ready for technical review so that's an exciting step I still need to test on more different microcontroller chips and get an idea of what does and doesn't work so I'm going to test on SAMD51 which back in April worked I'm going to test on NRI52840 which back in April was not working so well and on the ESP32S3 which I haven't tried yet and just a heads up this current pull request is not going to be an 810 final if it goes out on the schedule Dan was thinking of and that means there will be incompatible changes to SynthIO in 811 or 820 which is quote okay because the module is marked experimental in the documentation I was looking at my old draft PRs and I closed two of them as out of date in one case Liz had done the work in a separate PR so thank you and in the other case that specific hardware isn't going to be manufactured so I closed it as a moot this week I need to make the successor to one of those pull requests which is to add the matrix portal ESP32S3 board definition and a sub task of that or related task is to make the matrix portal circuit python library work transparently with it and with the original matrix portal and if I don't get to that myself I will file an issue about it coming up in the future after that will be the SynthIO guide and then I've been doing CPM for fun times and I will possibly do a CPM related guide in the future I ran into somebody who has done a port of CPM that runs in an RP2040 and wouldn't it be cool to show that off maybe add a little exciting functionality it's not in the upstream project and put that out for the world on learn that would be super fun anyway and I will be out on Friday but I'll be around most of the rest of the week so if you're looking for help just you know mention me on the public channels and I'll see y'all around thanks jeffler catney hello so last week my new laptops first day at work was last monday thought with one work related tool for four days but in the end managed to uber-clujit and got it working for the most part otherwise it's simply been installing apps that I use as I need them instead of just copying everything over obviously from the previous machine but it's been running great I haven't had any issues and I'm really happy with it so otherwise I was focused on the canary nightlight project it's a great place there's a lot to customize if you desire and it's very readable after switching to the esp32 s3 it's running without issues for days the guide is probably my part of the guide anyway is probably 3 quarters done as a aside I added a short section on RGB colors with regards to neopixels or leds in general in the neopixel uber guide so I can link to it from project guides it's really good info it explains basically what color tuples are what they look like and what they mean and then gives a list of 8 basic colors that one might use and it's in all of the development board guides in the neopixel template but I didn't want to link to an arbitrary board guide from a project guide and so I talked to Phil B who is the author of the neopixel uber guide and we figured out a good place for it and now that's there and this week the canary guide need to finish up the code walkthrough and then complete the overview from start to finish once that's done I will be picking up something else from my quite lengthy list I'm not sure what yet though because I've been focused on the canary and that's what I've got thanks catney and maker melissa it's your turn yeah so last week I did the searcher python.org website and fixed a board that was showing up with the incorrect photo and name and I also added a section to the board check but let me make sure that Blink of Boards have the Blink of Flags set so 6 core time boards aren't accidentally copied over as was the case of one of the boards I worked on adding some more requested features to the start of the collaboration project and worked on finding a way to reduce the also error messages that's the advanced management architecture messages that speech recognition was displaying I also wrote the the center library for the project which works much better than the original version and I worked on writing up the project guide and added this instructions for the project I'm working on finishing up the guide then I'll possibly do some research for changing the searcher python.org website to a new site generator that's easier to work with or I may possibly work on the searcher python code editor to fix the boards and that's what I'm at thanks Melissa Scott so I worked all last week on an SWD flasher library it's inspired by both pyocd and adafruit dap this is kind of in the vein of the circuit pirate stuff but the basic goal is being able to recover 7021s, 51s and nrf 52840s if somehow the bootloader gets host so there's two pieces to this puzzle there's a higher level mcu flasher that is the thing that knows how to flash a particular chip and then there's debug probe which is the lower level talk SWD to the device that you're talking to and it's just using it's doing bit banging so it's just digital in-outs which means that it works on anything that runs the circuit python API which is I think the power of it it is not that fast to do like a meg of flash on nrf it was taking me like three minutes but if you're doing like an 8k samd 21 or a 16k samd 51 it can be like a few seconds which is pretty awesome and it can do like the the boot protection and that sort of stuff too so I got that working and it needs a little more polish I should say the debug probe the api it presents is the same as pyocd which is kind of like openocd but all in python and the idea there is that you should be able to use mcu flasher stuff on top of pyocd from your desktop as well they have like jailing support for example so I'm going to play around with that today or tomorrow just to make sure that that does actually work I want to make more examples and I need to reorganize the examples right now because the mcu flasher has kind of helpers for reading bin files and hex files the hex files are great because hex files allow you to like skip around in the address space for what you want to flash which can make it faster beware if anybody is trying this that it does erase the entire chip so make sure you back up and do give it a shot I've had this like stemma g0 board design for a while and I wanted to get that working and I finally realized that I had swclock and swdio swapped and so I ordered v2 of that from jlcpcb on Friday so this would be a cool way to recover those as well I haven't done the i2c boot loading yet but I'm still kind of thinking over this project in my mind so I'm working on swd stuff mostly but I also tack got back to me and said that he had fixed usb host on imx so I'm going to take a look at that today and see how far I can get with that as well great thanks Scott last up is Todd bot who is lurking he has a new pico step knobs board coming from fab soon for increased synthio madness did you know that simultaneous stereo idos outputs work quadrphonic and working on a couple of synthio examples for macro pad rp2040 and macro pad synth plug and that wraps up status reports next up is in the weeds in the weeds is an opportunity for long form discussions that either come out of status updates or that folks have identified ahead of time we don't have any topics today so I'll move to wrap up this has been the circuit python weekly meeting for monday may 22nd 2023 thank you to everyone who participated if you want to support adafruit and circuit python and those that work on circuit python consider purchasing from the adafruit shop at adafruit.com this video the video of this meeting will be released on youtube at youtube.com slash adafruit and the podcast will be available on all 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 next Tuesday may 30th at 2pm eastern due to the memorial day holiday here in the US the meeting is held on the adafruit discord server 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 circuit python easter's roll on discord we hope to see you all next week thanks everyone