 Hello everyone and welcome to the CircaPython Weekly Meeting for January 22nd, 2024. It's that time of the week when we get together to talk about all things CircaPython. I'm Jeff and I'm sponsored by Adafruit to work on CircaPython. CircaPython is a version of Python designed to run on tiny little computers called microcontrollers. We run on hundreds and hundreds of different microcontroller boards. CircaPython development is sponsored primarily by Adafruit so a great way to support Adafruit and CircaPython and folks like me is by purchasing your hardware from Adafruit.com. You can also check out the resellers link at the bottom of the page, especially if you are outside of the US. This meeting is hosted on the Adafruit Discord server. You can go to adafruit.it-discord to join. You can talk about electronics related stuff any time of day, but this meeting takes place in the CircaPython DevText Channel and the CircaPython Voice Channel, typically on Mondays at 2 p.m. Eastern 11 a.m. Pacific. In the notes there is a link to a calendar document so you can check just to make sure that we aren't moving the meeting, usually to a Tuesday in the case of some holidays. The notes document also will have the information that we're reading aloud and talking about during the document. So you can check that out. There will be timestamps if you're viewing or listening after the fact so you can skip to the parts that you are interested in. This meeting is held in five parts. Next up is Community News where we take a few items from the very excellent Python and Hardware newsletter curated by our very own Ann Borrella, Ann Engineer, just to get a sense of what folks on the internet at large are doing with CircaPython and other Python and Hardware topics. The next up is the state of the CircaPython libraries and Blanca where we look mostly at some numbers around the project, mostly statistics from GitHub. Then you all get to participate with me. We roll in two hug reports, which is an opportunity to highlight the great stuff that folks in the community are doing. And that recognition is super important and it really is a great part of the week when we get to recognize each other like that. Then is the meat and potatoes called status updates. We take the opportunity to report what we've been up to since the last meeting and what we'll do in the next week or until the next meeting. And finally, we have a section called In the Weeds and that is for long form discussion. If you have anything that you know needs kind of a back and forth, want to talk to some of your peers, get direction or get advice, that is the place to do it. And so for those hug reports and status updates, add your info to the note stock as well as In the Weeds just so that we can get to each item as it comes up. And with that, I will transition over to telling you about community news. So I just picked a couple of items today. First up, Thea Flowers is the new Oshawa board president. The open source hardware association Oshawa welcomes Thea Starbro Flowers as the new Oshawa board president. As many members of the Oshawa community already know, Thea is a creative technologist and passionate open source advocate. She's creator of the Winter Bloom open source synthesizers, many of which are Oshawa certified. Thea is also a creator of Kai Canvas, a maintainer of CircuitPython, and a former Python software foundation fellow. Oh, and she recently redesigned the certification mark brand guide. And there are some links in the note stock about that. And thank you, Tim, for showing us some of those links live in the discord. The other item I picked and disclaimer, this is my item here that Ann chose to spotlight, Thea Fruit Playground is a new place for the community to post their projects and other making tips, tips, tips, tricks, and techniques. Add free. It's an easy way to publish your work in a safe space for free. And Ann featured my programming a Unicom mini M keyboard with CircuitPython. And I'll just tell you a tiny bit more about that. Some of the models of newly manufactured Buckling Spring keyboards from Unicom have Raspberry Pi Pico inside as the controller. And you have to briefly pop it open to access the boot select button. And then you can load whatever firmware on it you want. And it's super cool. It's like the best off the shelf keyboard you can buy to put CircuitPython on, in my opinion. So had fun putting that page together. So a little more about what the newsletter is. There is a lot more in this newsletter. I just picked a couple of items that were interesting to me. The Python on Microcontrollers Weekly newsletter is a community run newsletter emailed every Monday. The complete archives are at AdafruitDaily.com slash category slash CircuitPython. And by the way, the front page of AdafruitDaily.com is where you go to subscribe. It highlights the latest Python on hardware related news from around the web, including CircuitPython, Python, and MicroPython developments. And as Anne B. points out, she wants your news. We really want to feature the community, everybody who's working with these technologies. So you can email CPNews at Adafruit.com. You can tag your post with hashtag CircuitPython on Mastodon, BlueSky, or X formerly known as Twitter. Or you can even go direct to GitHub and edit the draft of next week's newsletter because we developed this thing like so much of our software out in the open. But yeah. So do a project with CircuitPython, with MicroPython, with Python on a Raspberry Pi. Let us know and we will promote it because we love sharing and promoting your stuff. And that is the community news. Next is the state of CircuitPython, the libraries, and Blinka. And Dan, Tim, Melissa, if you can't read your normal section, just let me know. But otherwise, I will assume that you can grab those. So we grab statistics mostly from GitHub that cover the last week of activity, seven times 24 hours more or less, and then kind of give you an abstract of that. So overall, we had 21 pull requests merged from 18 authors, which is a super healthy number. I'm going to try and read these names here that are less frequently seen. Rom Kee, Josh Korn, Adam Cummick, US3R64, TLYU, Corel Crows, James Bowman, Kreeter, SidespoilerM, Salam Citron, Asmigil. There's just a tremendous number of names here that are our newer and frequent contributors, and I really appreciate that. As well, we had five reviewers, thanks to the usual team, as well as Crier and Retired Wizard. And with that, Dan, if you're able to, I will let you take the core section. OK, thanks. OK, so in the core over the past week, we had 12 pull requests merged by 13 authors. There were five reviewers, and we now have 23 open pull requests that's down from, I think, 28 last week, which is good. There were eight issues closed by five people and six open by six people, so a small improvement, but basically keeping the same rate. We have almost 700 open issues. There are eight active milestones. That's how we keep track of which issues should be fixed by when. There are a couple of issues for the 10.0 version. Those are just reminders to us of things to change when we start working on 10.0, which will be a while. There aren't any open issues right now for 8.2 something. There are 53 open issues that are currently assigned to 9.0.0. There are nine issues assigned to 9XX. That is something later than 9.0. 24 issues open that have to do with libraries, 584 long-term issues, which might be bugs or might be enhancement requests. 17 open issues for support reasons. 11 issues for third-party reasons. That is, we need to depend on the third party to do something before that issue can progress. Right now, we don't have any issues that are not assigned a milestone because I did a bunch of triage on Saturday. Okay, that's it. And thank you for that triage, Dan. That is really helpful. And next up, Tim, we'll tell us about the libraries. All right, thanks, Jeff. This section covers the circuit Python libraries, which are Python level code that allows you to interact with various different pieces of hardware or provide helper functionality so that you don't have to manage as many of the nitty-gritty details at your project code level. All these libraries can be found on GitHub under names like Adafruit underscore, circuitpython underscore, and then the name of whatever library it is. Across all of those libraries this week, we had nine pull requests merged by five authors. And actually, most of these are names that I don't necessarily recognize as super frequent contributors. So thanks to Carol Crois, James Bowman, Adam Kamick, Asmigill, and User64, who might be either newer or less frequent contributors. Thanks to all those folks this week. We did have two reviewers. So thanks to Dan and Scott for doing some library reviews this week. Of the nine pull requests that were merged, the oldest one was 27 days. The handful of the newest ones were all just one day. That leaves us after the week with 51 pull requests open, the oldest of which is 522 days, and the newest is nine days. Over the past seven days, we had five issues closed by two people, with seven new issues opened by seven people. That leaves us with 721 issues that are opened. And of those, there are 19 of them that are labeled good first issues, which you can find listed over at circuitpython.org slash contributing, which is the website where you can go. If you want to get involved with the Circuit Python project contributing code. So at circuitpython.org slash contributing, you'll find a list of the open PRs across all these libraries. If you're looking to get started with testing and things like that, you can try out those PRs, run it on hardware. If you've got the hardware, otherwise just look over the code for syntax, spelling, etc. Leave comments to let us know that you looked it over. And if you do that for a bit and get comfortable with it, we can level you up to the review team so that you can leave sort of official reviews over on GitHub. If you're interested in contributing code or documentation, you can also check out the open issues right on that contributing page. There are tabs across the top to change between PRs and issues. And once you do click over to the issues tag, there's also a drop down filter that you can use to filter all those issues by tags, including that good first issue tag, which is the one that has been identified for issues that are best for folks who maybe don't have as much experience or don't require as complex things typically in those issues. So look for those if you want to get started. And then let's see, if you need help with Git or GitHub, we have guides available for that. And there's also always folks available here on the Discord to help you out. So we're looking for help from anybody. If you want to get involved, don't be intimidated by the process. We've got help and helpful people around to help you contribute in whatever way works best for you. The library PyPI stats this week, we had 140,254 downloads of the 324 libraries. The top 10 is listed out here, as is the list of libraries that were updated in the last seven days here in the Notestock. If anybody would like to take a look at those, then that's what we've got for libraries this week. Thanks. As always, thank you. And next up to round out the section, Melissa will tell us about what's going on with Blinka. Hello. So Blinka is our sick of Python compatibility layer for MicroPython, Raspberry, and other single board computers like the Raspberry Pi. And this week we had zero pull requests merged. There are currently eight open pull requests amongst other repositories. There were zero close issues by zero people and three open by three people, leaving a net of 81 open issues. I think a lot of those are actually new board requests. There were 13,256 PyPI downloads in the last week, 5,427 PyWheels downloads in the last month, and we are at 128 supported boards. And that's it. Thank you. Now it is time for the community to start participating. We are going to start the hug reports. Hug reports is a chance to highlight folks in the circuit Python community and beyond for doing awesome things. I'll start and then we'll go down the list in the notes document order to give everybody a chance to participate. And of course, if you're text only or missing the meeting, I'll read out the notes when I get to them in the list. As I will with a couple of folks as we go through. All right. So I just have a group hug, but then I have some specific hugs. Tak, our tiny USB developer and another user called Kkit-Yam for writing UBC support in tiny USB. And I'll tell you a little bit more about UBC down in status updates. A hug for an engineer for featuring a native fruit playground note that I wrote in the newsletter. And finally, Tanu, thank you for your helpful review comments on bitmap filter. I think the documentation is in a much better place than I had gotten it to as a result of your reviews. So really appreciate that. Next, I have some notes from Seagrover, who's text only. Seagrover has a hug for a foamy guy for another action packed deep dive that spawned a few new ideas and knowledge. And for Ross Grady on GitHub for finding and correcting a typo in the 809833 library frequency sweep example. And next we'll hear from Dan and DJ Devin 3. Okay, thanks to you, Jeff, for working on UBC USB video. That's what your webcam uses to send video. And we're going to do the same thing and certify that. So, Jeff, we'll talk about that later. And thanks to Lady Aida, who has come pretty much, come really close to completing, redesigning so many boards like about five or six hundred to accommodate parts changes since the great parts shortage and then since then. So that's a massive redesigned task. And now she can get on to more new boards of some kind, which she's been doing already, but she'll have more time for new boards. And that's it. All right, take it away, DJ Devin 3. Thank you. I have a hug for Fummy Guy for creating the foundation of the soft keyboard library. Thank you for letting me work on it with you. It's been a great learning experience and a lot of fun. A hug to Todd Bot for helping field questions in Circuit Python subreddit. While it's not a primary means for Circuit Python support, people do go there for help sometimes. And Todd Bot provides great advice there too. While it's not as easy as Discord, it is possible to post code snippets on Reddit for answering code questions. And a group hug. All right. Next up, I have notes from 88CC who says big congratulatory hug to Dan H for finding the open-source software code for the faulty Sonoma MS-DOS FS. And next we've got Tim and then Katny. All right. For my hug reports this week, thanks to David Galauda, Justin and DJ Devin 3 all for conversation and ideas and discussion on Discord around the Pac-Man game that I was working on on a couple of streams over the weekend. Thanks as well to DJ Devin 3 for adding a new example to the soft keyboard library as well as doing some cleanup of the old bits of code that I left in there. Thanks to you, Jeff, for submitting the Bitmap filter. I think that looks pretty cool. I'm excited to give it a try over in the core. And a group hug for everybody. Thanks. Thank you. And next up is Katny who we're always happy to see. Hello. So I have a hug for a foamy guy for coming up with a terribly clever solution for a potential project I may be helping a friend's sister with and for writing up a demo of that solution. To Jeff for answering a question about the same project. To Melissa for some lovely chats. To Jeff again for some different lovely chats. And to Paul Cutler's for some even different or lovely chats. And to everyone for continuing to make CircuitPython great and a group hug. All right. Paul just take a note that your chats were the most different out of all of us. So you have something special going on there I think. All right. And next up is maker Melissa. Hi. See I have a hug report for Katny for some great much needed chats and a group hug to everyone else. All right. And rounding out the section it is Scott Tanute. Hello. First a hug to foamy guy and all the deep divers for flexibility when I had to bail in the last minute on the last week's deep dive I look forward to doing it. But having a sick kiddo or a kiddo in daycare means that it's not always easy to plan ahead. So thanks to everyone for their flexibility around that. And then Fede too dropped a note in the keyboards channel in discord. I thought this was really cool. They're promoting a Costa Rican layout for keyboards so that it can better support both native Costa Rican languages English and Spanish. I believe that's what he said. So that's super cool. Good work. I don't have to check that out. I'm interested in that sort of thing just from an academic standpoint. That's on the discord somewhere. It's in the keyboards channel. I think that's where you check that out after the meeting. Cool. All right. That concludes hug reports. So it's time for status updates. It's time to tell folks what we're up to kind of on an individual basis. I'll start and we'll go through the list alphabetically. When I get to you take a couple minutes to talk about what you've been up to since the last meeting and what you'll be doing until our next meeting. This is also an opportunity to provide a quick tip or trick relevant to what people are talking about. But if the discussion is long we will move it to in the weeds. And with that I will get us started. So I was working recently on adding some bitmap manipulation features kind of image filters to CircuitPython. That's called bitmap filter and the pull request was merged. That's going to be on a couple of the like the ESP32 boards particularly with camera support and especially the pie camera memento board. And then I got a good start on UVC support for CircuitPython. As Dan was saying this is the protocol that lets video cameras operate on USB. And what we are looking at doing in CircuitPython is allowing you to treat it as a display IO display. Where that's at right now is you can import UVC and access a bitmap object inside of there and the pixels that you assign to that bitmap are shown on a camera app that runs on your computer and it updates in real time. And that's kind of cool. It proves that the technology works. Great foundations as I was saying laid by TAC in tiny USB to make this work. But that's not super useful so we need to hook it up to display IO and that's the next step. And probably when we get to that point I will pull request it although if anybody is interested I can point you at my branch or if you just snoop into my fork of CircuitPython and look at the recently updated branches you'll find it. So that is basically what's up next is continuing to work on this new kind of display that will display onto a host computer. And it needs to work with display IO. It needs to allocate the frame buffer memory dynamically so that if this is enabled but not used it doesn't use up a valuable RAM. And also I've been testing it on the RP2040 to start with and I need to return to testing it on the expressive boards particularly on the MementoPy camera. And another feature that would be nice is to allow boot.py to set the UVC display resolution. Right now it's set up to do 128 by 96 pixels and you get a frame rate of 10 frames per second which is you know it's fine for some things but for instance one scenario we're thinking of is you want to produce a mock up or a documentation image of what will be shown on a certain Python device you would want to configure with the same pixel resolution as your real display just to get a real idea of what that's looking like. So those are kind of the things that need to be added before it's really super useful. And then the other thing I'll be working on this week is the bitmap filter pull request is merged but there are no examples of using it and so I will add some examples probably to the circuit python py camera repository. I'm planning a new example which will open jpegs from your SD card and then apply random filters to them as a kind of another photo album concept. And then there is going to be a page on the learn system that also talks about if you need a high performance filter that you will you want to write in C code in circuit python how do you do that? And so that is what is up continuing and concluding bitmap filter and that is what I'm up to. So then I have notes from C grover who writes I am reworking the way this library to take advantage of the open polygon option in both display shapes and bitmap tools it should improve performance and greatly simplify the current code. And now we've got notes from Dan what's up Dan? Okay so I've been working on issues for the 9-O-L release Jeff Scott and I will have a triage meeting to go over the bug list again soon. I started working on something well on the nrf port we use a layer called nrfx which is kind of a thin layer that provides some drivers and control over the actual devices on the chip and I wanted to update that to add and i2c timeout it's possible for the i2c bus to get hung and right now software in nrfx doesn't handle that so I started updating that in preparation for that and it turned out there were many many many changes because we hadn't updated for years and it became more complicated and there would be a lot of testing on it as I decided maybe I'll put this off until after 9-O-L so I checked in what I had for I in my own fork of circuit python and I'll come back to that then I started looking at a couple of bugs that have to do with language features which are causing errors on language constructs that seem to be okay one of those bugs was turns out what has already found in micro python and I gave them a slightly an example that causes sort of a worst problem a crash but mainly we would depend on micro python to fix that because it requires changes in the at the MPY level there's another bug which I looked at and it turns out it's been in existence since 500 circuit python 500 so maybe we won't that's not so urgent even though it would be nice to fix it but I'll see if it's easy to fix and then finally you've all heard about the Sonoma the macOS Sonoma problem in which rights to small fat disk drives like the circuit py drive are delayed and in particular it's not even that all the rights are delayed it's that it does some of the rights waits a long time like ends of seconds and then finishes the right so this the file system is in an inconsistent state for a very long time and this upset circuit python greatly when it tries to do auto reload or even if it were trying to read files and a program was running while you were writing a file that would also be bad so we've reported a number of us have reported this to or a number of other people reported this up to Apple several several times on each release of Sonoma betas and it still hasn't been fixed they're about to come out with Sonoma 14.3 and it's still not fixed I wrote up an Apple feedback item which I had not done myself and suggested to them I could give them harder where if they wanted to test it but then somebody said oh it's this software component someone who's been working on this in our bug list and a user and I Google that that and manage it seems like I may have found the actual source code that is this new code that is causing the problem I mean I haven't looked at the code at all but I was surprised that this was open source code but it seems to be so we have to we have to start looking at that and maybe we can give them even more hits there's also somebody's name in the code which might help but maybe we won't try to bug that person immediately and that's it all right next up DJ Devin 3 hello hello thank you oh go ahead I was going to say I think we probably don't necessarily want to name this person while we don't know you know the exact status of things this possible Apple engineer I think we probably don't want to say that but anyway go ahead Devin okay this week I added the ability to use different JSON file layouts with circuit python soft keyboard from you guys did the initial one but it was only using one file layout so I've made it possible to now use multiple file layouts which is good for people that have other languages so you can have the soft touch keyboard in whatever language you want or whatever layout that you want currently working on the special character switch mode for the mobile layout so it looks and acts more like an iOS mobile layout this is the first library of help code and have learned a lot about what self does and how it relates to implementing class parameters and functions this week I also submitted a PR to add a fruit circuit python display button to add a sprite button simple test for the tft feather wing touch display improve the simple test button debounce a little bit thanks to an example by github user lcmcninch the display button library is a great way to add touch buttons to any touch capable display that's it sounds good I've got some notes from ADCC I've been a bit under the weather for the last couple of weeks but continuing to work on BLEIO for RP2 sorry this is taking so long every bug I get past seems to have a dozen more hiding behind it no idea how much longer this will take but I am in it for the long haul and I think everybody who has developed software has sympathy for for feeling that way but um we know you'll get through it yeah and then I have notes from FedE2 who writes adding a Costa Rica keyboard to the Unicode CLDR standard that will allow manufacturers to build a keyboard for this country that will allow anyone to write not only in Spanish and English but also in native languages use it in public education system etc and maybe making a CNC for building custom music instrument strings ping me if you have a string instrument with special needs and this is fascinating and I don't have any need for it but I would love to know more all right and next up is Tim all right this past week I validated an issue on e-ink displays that results in them not refreshing after you have put something onto them and I created and posted up a little small contained reproducer that exhibits that issue at least on the mag tag and I'll probably dig further once I get finished up with my current project the other thing that I did aside from that main project this week was in the soft keyboard a little bit of fixing in there I had left some old code in there that actually was causing it to raise exceptions and then the version that was on my device was already fixed but I didn't realize the difference was there so I got that fixed in the repo so that it actually can run without raising exceptions and thanks to DJ Devon who pointed that issue out to me and then the main thing that I've been working on this week is the a game that I'm calling 1D Chomper which runs on the qualia display driver and uses one of the really long and narrow displays the code is getting pretty darn close to complete I think the main thing that I really want to do that's not in the code yet is just have the difficulty increase the longer you play so that it starts to kind of speed up and get a little bit harder but the the rest of the actual functionality of the code is done and I even did a bunch of work this morning cleaning it up and commenting it up so it's in a really good state I've also designed some decals that I'm going to use to stick on a cardboard box that's going to house the game and I'm going to print those out on the decal paper and try to get them stuck on and cut the holes that are needed this afternoon after the meeting and then I'll be getting going on the guide to write that out this week and then I'm hoping to stop by show and tell on Wednesday to show the current state so that's what I've got for this week thanks all right thank you and next up is catney hi hello so I have been dealing with being low to medium grade sick for over three weeks now which has been stopping most of my energy I agreed to be conference chair for Pi Ohio 2024 the venue search for which has been taking up most of what energy I have left I'm super excited to be doing this though and so far it's been a fascinating learning experience and event planning and conference organizing in which I have no previous experience I ordered a 7.3 inch inky frame from pameroni it's a board that has a pico w on it and a giant seven color e-ink and some buttons and it should be here Thursday I see there's a PR open for adding it to circuit python but it doesn't include the psram which there's an extra psram chip on it which is something I'm interested in the PR is listed as minimally viable by the author I have no idea how to implement psram I also don't know whether that PR is a good place to start if I wanted to finish that project maybe worth putting in the weeds instead of here still getting arbitrary reboots on a circuit python project that is a feather running three zero point five meter led strips I haven't added code to tell it to stop rebooting which might help yet but I also realize the microcontroller has been resting on a metal surface and now I'm wondering if that's what's been causing the problem so I propped it up on plastic and I'll see if that helps I can move my comments into the weeds though yeah sure that's probably for the best I know that the that microcontroller doesn't have like built-in support for psram so it's not like it is on expressive where you just enable it in a configuration but anyway yeah we can head on and here from maker melissa oh hello um so I've been testing out hardware on the raspberry pi five and bookworm been updating scripts that need updating and working on creating new overlays for the pi tfts that use the tiny drm drivers I've been updating the pi tft installer script as well and after some of them some more overlays are added I'll be updating the guides and that's it thank you and now we come to scott hi again hello um so I was out friday because Ari got his first stomach flu which I got last night which is so fun I'm I'm feeling a lot better but I'm still not 100% so I am taking it easy today and maybe tomorrow depending on how I feel I have a pr for the sd cards over wi-fi and bili it's super close I look there's four boards that are still too big and the the one that's is 60 bytes over so I'm going to still try to figure out how I can get 60 bytes back on the samv 21 that's super fun as well we'll keep digging into that and then the next thing on my list is jerry did a really helpful issue for looking into memory errors on the esp32 s2 with two megs ps ram where the examples used to work in 8x and they don't worth 9.0 so I'm going to take a look at that as well all right thank you and that wraps up status updates next we've got in the weeds an opportunity for these longer discussions um that we need to have sometimes if you do have a topic that you want to discuss please do add it now and I'm just going to take these couple of topics in the order that we have them so uh Justin hello welcome I know you've been waiting a couple of weeks to bring this up and now that some more folks are back from vacation and being low grade sick and all those things I'm glad to see that you are here so go ahead and I've also been fighting the low grade six so I totally understand how it is and also trying to come up with new ideas over a holiday and such so a handful of you guys have been there helpful to kind of make some comments as I've worked through some of this I don't know the best way to kind of move forward at this point but it kind of started with this conversation that I had with DG7 3 of some request issues there actually is something that I saw again over the weekend with another user and people basically reinitializing the socket pool and such and was like there should be a better way to do this and so kind of came up with this original idea of a socket manager that then kind of that lived inside the request library and then kind of moved out of there as kind of some initial comments into a new library called connection manager that would is more of a single tin and that way even if you read it something it doesn't read it itself which means you have open connections and things like that the references to those aren't lost and whatnot so at this point just trying to figure out if this is a direction that people want to go there is a PR out there for the main one filming guy played with it a few weeks ago which was awesome to watch and kind of struggle through it a little bit and then kind of the changes for currently what's in requests and MQTT and there's lots of things I'd want to update still currently docs and tests and things like that that I haven't just because I want to spend a bunch of wheels that if people don't want to kind of move this move forward with it so kind of opening up to the group at this point and maybe that's just a bunch of people committing to saying yep I'm happy to go look at this over expiry time and we can go back to it I'm definitely not in a rush to get this done but I've been using a bunch of my devices and I love it at this point I'll stop there and see what people want to say and kind of go from there thank you I would say I'm definitely interested in pursuing this kind of way of doing the API with this kind of manager layer that tries to minimize the differences between the different ways of connecting to the network I didn't I actually meant to do it and it looks like I've forgotten I was just looking back over the original PR so I didn't post anything on there but like Justin mentioned I did try this out a couple of weeks back I don't know if there were changes since then but I was definitely liking what I was seeing on the requests and the mini MQTT side of things it was looking good we tried out both on a built-in Wi-Fi device probably like an ESP32 S2 TFT or something and then we also tried on the Pi Portal for the ESP32 spy try to think side of things and I don't have necessarily specific feedback as far as things to change or directions to go but I would say I'm definitely liking where it's headed and I'm interested in seeing it continue just from a support perspective I see a lot of people who use try to use the learn guide documentation learn guides they use ESP32 spy but then use it with something that's not an airlift like an in ESP32 you know matrix for the S3 or something like that and they can't figure out why the code that they took from the ESP32 spies and working on the module or vice versa I mean it happens both ways so something that just takes all of it and wraps it all into one just connection method that's the same across all learn guides I think would be just better just for support perspective let alone easily usable in the future and going forward you can put all future connection methods into that same connection manager I think it's a good thing overall yeah and to add kind of one piece it's on the PR if you look at it and I need to update it because I've changed some little bits but even the thought process of building into the connection manager a method that you pass a radio so Wi-Fi radio or the ESP instance or I was forget what it's called because I don't use it enough but the the physical connection one and then it returns automatically both the pool and the SSL context which greatly then minimizes the amount of imports users need to do and they can basically just and then whatever the radio is they have and then this library we just keep updating if there are other ones it's definitely not a requirement but it would definitely simplify learn guides quite a bit and then especially as people add more functionality that can be updated and so learn guides don't need to need to be updated as frequently as well so Dan or Scott do either of you have comments to add to this I haven't done a super deep dive into it I did look at like the pending MQT mini MQTT change I think generally like it's nice that you're like removing code like yeah my first impression was like it it seemed like the right way to do it I think more broadly this has me thinking about whether we whether we took the wrong approach with network support in the first place whereas like MicroPython you kind of install the adapters and then it manages that internally but instead of like having socket pool which is a unique thing to circuit Python but yeah I think generally it's a green light for me like it's still it's still an improvement in the short term for sure if not the long term the other thing to think about would be the WizNet libraries because I know the Python WizNet library is actually like pretty often used now it is pretty often used I think so I see I see a lot of people like working on it I don't use it myself but it seems like there are definitely folks that do yeah and there are people who are pretty who are doing it using it professionally or something or said me professionally so they they're kind of inclined to fix things do you do you see this as like a 10.0 thing like this this sort of like when you say what do you mean by installing the adapter like it's just just say I wouldn't even say it's a 10.0 thing it's just a a long term thing okay I like a deviation from MicroPython that I'm not sure was the best uh-huh do you think you know something in the back of my mind but yeah but does that mean that I want to put the effort into it probably not and is the connection manager moving it's moving in that direction like well yeah it's filling that hole right it's kind of what I'm thinking of I was like well I don't know yeah I still don't know because I think part of the reason part of the thing I was trying to avoid is like if you have you know like a Python levered level driver for network and then you're you're kind of secretly calling it under the hood kind of like the SD card stuff already does yes yes yeah yeah MicroPython is still they're very interested in writing a lot of low-level code in Python and even calling back from C to Python which we right ended this right with yeah right which I think is generally a really good thing for the project like I think MicroPython and CircuitPython are better for for like Damian and and Jim's desire to do that because they're pushing on boundary and I think it's funny that I kind of find myself in the opposite boat where I'm like no I'm okay writing more C I think the the the strong line I would draw is if it's Python code that's being called by an interrupt then that that really throws me off but if it's Python code that calls C code that then calls Python code again maybe that's okay but it's so weird to me anyway Justin I I think you're going the right direction and I saw your MPY numbers and I wonder if your MPY numbers would be better simply if you remove the typing information because I don't know if MPY is MPY cross is smart enough to like remove the code that falls under that test for whether it's CircuitPython or not yeah and I did do a second push on that and just imported the typing from the connection manager into requests since it depends on anyway and not dropped you down a little bit more and it's a lot closer I had just moved over the typing because it was in requests originally I think the question would be if that's something like well the type of notations get discarded but the actual import logic doesn't yeah so specifically the code in requests has a lot of custom logic around like merging a bunch of types together and things like that so that would still kind of hang around and you know I know that you know definitely like it's one of those spaces versus tabs things some people love typing some people hate it and like I'm you know like I haven't done enough to CircuitPython to know like where people start running out of space and things like that if that matters kind of my original thing was just like hey look I'm adding this and we're not the amount of space we're taking up is nominal obviously if we add some of the more automatic determine what's the you know the pool and things like that would get a little bit bigger so it's kind of like whether or not you guys want that carried over or not obviously very easy to get out if people don't want it in there so okay yeah I think I think the challenge is something like a PikaW or like even like an M0 with ESP32 spy like there's definitely like those weird cases where you don't have a lot of RAM that you're working with like the expressive chips are not really the the ones that you want to test on when you're worried about memory yeah M0 is the is the really that's the test for anything that's constrained space constrained yeah and maybe even like the M4 matrix portal like where it's got you know the ESP next to it on the same board that's more memory than a lot any M0 even any guides that use M0 plus error right so right after I worry about that so I mean I think the way we can review this I think the test is kind of like we have to have people who are trying all these changes together and it had it has to be a big bang kind of change right like all the libraries have to change at the same time or could for instance we defer the mini MQTT changes so it's just request Justin like is it like could we publish this library I mean the library can stand alone and we can we can move it into under the Adafruit organization because it would be part of that and then you could you can reassign it to us or something you can reassign the the ownership to us and then the question is okay then after it's really tested thoroughly then we can do change all the library simultaneously overnight and then we also have to go back and change the guides to point out that you need these new things yeah and I'm totally happy to do like I started this I'm happy to finish it to whatever level I you know you guys could point me to like I obviously haven't done you the stuff of the guides but I'm happy to change all the guides if you guys want to do one at a time and just do requests like we can totally do that as well you know you can even just add this first and so get it to a point where our majority of the people have it in the library when they download it before what you do it's like I'm like as far as how you guys release and handle complicated changes like this like that's kind of more up to you like I've downloaded tons of read guides and they're like oh I need to add this library I need to add this library but of course I've also been a Python developer for over 20 years and it's not hard for me to be like oh missing this import I know where to find it yeah where a lot of other people will be like I don't know what to do do you do you see also changes that you want to make and you is per 32 SBI library or that's that's separate so the so the only change that I that I kind of would recommend making in so there's kind of two pieces one I I would love that all things whether it's Wi-Fi or ESP 30s by or the Wisnet or whatever that they all have a similar like connect method yeah and that way we could then the next step would be it would be easier to automate and that way everything was just always like oh connect or is connected so appreciate the other methods when we saw fits and then my next goal would be trying to get work on those to get them all the way up to car for example you can't use the NDP library anymore with the SB 32 because some of the methods that it needs aren't there anymore you know and granted that one has get time but like that then makes it harder for people I don't know what your guys's goal is to basically be like oh we don't care what chip you use you know this stuff should work everywhere so if you pick up you know as before it's going to work great or if you pick up an M4 and throw in an airlift it's also going to work like I think my goal would be to get them as similar and so wouldn't matter what hardware people had chosen or have lying around that's our goal too yeah yeah so so my changes to SB 32 would be to try to get some get it closer and just regular connections to Wi-Fi and then also have similar connection methods and things like that and also for the Wisnet which I have I just need to solder my headers on and I can start doing some testing on it okay well I think that I think we can review this and then start testing in an earnest with several things and see how that works out and also whether it affects I don't know if it would affect HTTP server or not so that's another thing to look at also so when we get a little for free time I hope soon like in a couple of weeks or something maybe I could spend some time looking at this and there are plenty of people who use it all this stuff a lot more than I do but also who could test it so even if there's a gap don't think there's lack of interest it's just a matter of kind of scheduling working on it figuring out when the best time to work on it is okay wonderful thank you I'm gonna kind of move us ahead to Katny's topic because she has another obligation soon so Katny why don't you take it away with your item all right so as I said earlier I ordered 7.3 inch inky frame there's a PR open for the board definition for it for circuit Python it doesn't include the not on board PS RAM that's on the on the light inky frame itself I don't have any idea how to implement that which really I don't have any idea how to implement any PS RAM but I also don't know whether this PR is a good place to to start with this just because I don't know whether it's been reviewed at all or if you know the whether it makes sense to start with that information and you know try to move forward with that or or what and I guess I want to know if I if anybody has a general idea how to implement this whether it's something that is even remotely possible for me to do so go ahead so like I was saying the the RP 2040 microcontroller doesn't like directly support PS RAM so it's going to be like it's just kind of a spy device or a quad spy device and it would need some kind of driver but you know it's not going to be able to for instance store circuit python list because it's not really memory to the microcontroller it's something else it's like storage or an sd card but you lose the contents when you turn it off so I'm not really sure exactly how you would end up using it I would look at what have they done like have they provided a micro python module that somehow interacts with this and understand you know their their idea of how does this work and see if that makes any sense with circuit python or not but yeah I'll let you read off DJ Devin's question oh sure I don't have an answer though is the amount of PS RAM specified in the board config or is that just flash storage it's nothing's really in circuit python yet so I don't have an answer to that I would encourage you to start with the PR and see if you can do everything you need there the reason although that comment says this doesn't work yet on my inky frame so it I don't know it may not be working well it's still a place that start I guess I mean right so start with the existing pull request Scott yeah start with the existing pull request and I did actually let me find it I did a a driver for it as well like there's a there's a driver for it that you can run just with the PikaW firmware okay it just wouldn't have like to the board.display but you can import something and create the display yeah so I tested it like I have the wave share version so just like the breakout of it and and I did get it working yeah there's an a step seven inch repository for it okay so you should be able to just use it with the PikaW firmware and the library ah okay okay that has all the initialization code too but the p yet like just getting at the supporting a ps ram is a lot a lot more work okay but you only really need if you're you're gonna do like drawing commands to a buffer that's the whole size the project that brought this on was trying to display a um full month of google calendar data yeah so you'll probably you might be okay if you do like a a terminal i o or a tile grid terminal is probably easiest way to do it but that way you're not storing every single bit you're just storing yeah I mean this is what display i o is designed for is not having to store the whole frame buffer but instead all the objects that you need yeah so maybe like bitmap label would be better as well the clever technique that Tim came up with was to run something on your computer that converts it to a bitmap and then push the bitmap over wi-fi and display the bitmap instead which like I said terribly clever right yep and would avoid a lot of the problems that would require ps ram right and that's what Tim was saying is like does on this bitmap need to store in ram and the answer is no it just reads the bits out of off the flash that it needs send over as it pumps it over okay and and the pgo w would have enough to deal with us like enough space I don't think it has a flash chip on it doesn't it's flash chip is pretty small okay I think it's only two it's two total yeah I think you get about 500k for your circuit pie drive maybe 700k on the pico w but that should accommodate a bitmap yeah and the it also it's only seven colors so it's not going to be a full color bitmap right you're going to use four bit four four bits of pixel um they also has an sd card so you could do that as well it doesn't have external flash but it does have sd card so you should you could download off the wi-fi and write to write to the sd card okay directly gotcha and you could yeah you could you couldn't yeah that's probably the best way to do it because sd cards should work with with undisput map whereas like if you had a if you had a regular library that did the psram for you you'd have to do that all yourself hmm um although you could probably use it as a temporary file system oh because it clears when right like you could actually yeah you could put a file system on the external psram and store it there temporarily and then treat it like a on the disk bitmap but that's not going to be any faster than that's not going to be any faster than reading it off an sd card like you're not going to get any speed advantage using the psram right okay so i would just go i would go sd card and i'm just about to get in the web workflow sd card support too so you'd be able to manually copy them over if you wanted to as well okay retired wizard is correct speed is not really an issue for eank right yeah because eank refreshes are really slow and the acep ones in particular for the seven color is very slow gotcha it's like 30 it's like 30 seconds so you're gonna update every 15 minutes or more yeah i was gonna say even more than that i assume um yeah i'm curious about this because i just got the 13.3 inch working as well but it's only two color gotcha um well i will keep you posted um the micro python examples that Tim just listed Tim just linked to i will take a look out as well but i'll see what i mean you could always do a project in micro python you don't have to just use circuit python i know i don't have to we appreciate that you think of us first so yeah okay um so i'll i'll take a look what they're like how they're supporting the ps ram like in general because i guess i'm genuinely curious now given that given that you're explaining how it would work to implement it in in in circuit python or not work i'm genuinely curious at this point how they're doing it um so i will look into that and i will let folks know because i don't know anybody else wants to know um and this is good information um i will i will move i'm terrible at merging uh merging old stuff into new stuff but i will try to get that at least get that pr up to date because it's got merge conflicts right now and then i'll see if i can get it going once i have the board and i'll start from there cool all right come back and ask us when you are when you got more questions yeah we'll do thank you yeah you could do the sorry i missed the last thing you said but uh you i would start with just the pico w firmware and the library i linked you to oh okay instead of trying to get this pr going okay okay okay i gotcha just treat it like a pico w and then then you'll have the pin depths for the pico w so you'll have to figure out like how they match up but then you're not stuck in recompiling sea land yeah exactly to get the board that working right and i don't know like i i know how to do a board def i don't know how to do like redoing another person's code as much so i guess we'll start there and so what you're saying is just that that at that point i don't have board dot display i have to do like import display i o blah blah blah right and let me see if i it looks like there's an example in here yeah there's a simple test okay um so you'll just have to replace the the pin mapping gotcha so i just figured that out okay yeah that i will look at the um i will look at the um what am i trying to say the existing pr i'll look at the existing pr and see whether the pins actually match up yeah you could get the pins from there the like the the process of getting it on board display is copying over like the initialization sequence and it's pro if that doesn't work then maybe that was just miscopied or something but okay the the thing that i tested was in this library not nothing because i don't have any keyframe so i didn't test the board def oh i see what you're saying so you tested that it that like the display worked but you couldn't test the board definition in that in that poll request right so i like tested it with like the the ink feather instead okay all right i i guess i will try both of these things i'll also just grab an asset off of the um off of the poll request and see whether it you know happens to already work right yeah and we can go from there okay well thank you very much that clears up um most of my questions for now i'm sure there will be more thank you all right thanks and justin thank you for your patience um why don't you tell us about pie charm stubs yeah this is again something that happened from a user on um in discord i was like i've been a huge pie charm user for a long time and so i've been hand writing some some of my own stubs just because i like to know what the pins are and so they're asking and i sent them to them and i was like there's gotta be a better way to do it you know it was like on a weekend and so i was like why not and so i played with it and was able to go through the pins dot c and build a you know a script that would create all of the stubs so unique stubs for all of the boards that are in the repo and so kind of the question now is at this point is a like i'm happy just leave it where it is at this point and people can post it if ever anybody wants it or if it's if there's some way to build this into the product at some point i did ping pie buy to find out if there was any rate limits i didn't find any posted but obviously sending five thousand boards up to five five four releases could be a bit intense i'd also have thoughts of trying to figure out if we wanted to build the stubs to have a command line interface where you could actually after you do the pip install you could configure it for a board and so all the boards would be like a subdirectory and it would copy and overwrite the board dots pie and so it's kind of first question is this an avenue again that you guys want to go down and if so some general guidance of how you might want to see that happen i wonder i thought that occurred to me after you first talked about this sometimes subsequently it occurred to me you could make i don't know how this works in pie charm or vs code for that matter but you could consult an environment variable because i mean stubs files are still kind of python files and you seem to be able to write conditional statements in there and so you could have one like master file which conditionally imports the correct one based on for instance the environment i don't know if that actually works this is just based on my mental model of stubs yeah so in theory you could have a big if it'd be a ginormous if this block that would import this thing so i just like i'm just trying to figure out how that would work because so i guess the board dot pie would be nothing but and also imports probably star from another file yes that's the general idea of what i was envisioning now the question is you know does that work can you put that in a pyi stubs file and have pie charm treated in the correct way and then second do people using these tools would they understand what it would mean to say set the environment variable equal to the name of your board because yeah i i think in environment variables coming from the background that i do but other people wouldn't necessarily and i don't know you know is there something that facilitates doing that within the GUI of these programs yeah i know they can for tests and things i don't know i'd have to play around with it to see otherwise that's kind of why i thought of a you do a pip install and then whatever board you're working for at that time you would basically go you know something like interfruit stubs you know dash dash select board and then put in the name and it would just copy the pile over the board you know and i think i think it was filming guy that mentioned it i believe of having like the default one if you install it could be all of the pins and so every pin was available so that way you'd have high level autocomplete and if you wanted to like that one could get overridden if you're like oh i'm doing something this specific board i want to do this like i often have that i have ends for hundreds of projects for different boards and so for me that's easy but again i'm a long time developer and it's simple for me so yeah i don't know i'd have to look with pie charm and vias code to see if you can have an environment variable that would run wallets trying to use the stubs in pie charm i know you can there's a setting for it somewhere to add environment variables kind of at your sort of project project run level which i think would work for this okay and do you know if you can with vias code i use vias code for a lot of things but i i literally use it more like a text editor than anything else i don't actually ever like i don't have my specific stuff installed or anything like that yeah i would guess that there is if nothing else there's a terminal and you can obviously set our environment variables with the terminal but i don't actually know on the vias code side of things i've only really used it for one sort of stint learning a specific project and it it didn't stick as my primary editor which is pie charm do you guys have a feeling of one like environment variable versus like a command line basically use this stub like swap out for this stub i like the environment variable i mean honestly i think of them as almost the same anyway because there's uh there's certainly a command line export or something like that that would set the variable for you so you could kind of think of it as a command either way but i would say i'm not super strongly opinionated i know lots of stuff use environment variables so it seems like a good thing for us to just kind of ride the coattails of but i also wouldn't say that i cared that much too strongly which way whether it's a command or an environment variable but i do i would say my my stronger opinion is more around the fact of it when you install it by default you get all the boards and then you do something whatever it is run the commander set the environment variable in order to hone in on your specific board that way it's kind of installable and usable right out of the gate to the majority of people but then if you know you're on one specific project you can narrow it down further to exclude the pins that aren't actually on that board okay and kind of there is an ask of one way versus the other is which tack to try to spend my time on first to see if i can get work in both cases so like if many people think environment variable sounds good i'm happy to start going down that route to see you know whether or not that's you know feasible it's not like it's going to take a lot of time yeah i would be tempted to you know kind of do a survey there there are two pieces of software to survey and you can freely install them both and just see is setting an environment variable something that is like just fairly easy or is it extremely hidden in one or the other of them okay yeah i'll definitely look at that and did you jump right like i had that thought and realized i wouldn't want to update the code specifically in the stub every time and so whatever the environment variable it would just tack that as the file name so it would just assume you know if someone released the butter board it would just go look for the you know boards extra butter board or whatever and it wouldn't i just i realized that after i said like this i was thinking of this if block that's 500 things long i was like that's just not going to work so like just whether you're setting it or command line as an export it would just take the value and use that to ground that particular find something to import from yeah yeah so if you type it wrong then you would just get no pins right yep and then as far as updating there wouldn't really be any additional work when it comes time to update because it's parsing from pins.c which is already getting merged in so and then actions i assume somewhere will run this and actually do the upload to pi pi and everything like it does today so there shouldn't be as far as i understand it there won't be any manual step whenever new devices come in once we get things set up they'll just kind of get populated automatically like the stubs do today yeah and one of the other things i was going to play with on my side and i'm happy to add this in is like all these boards have all these different defaults like i was working on something for forgotten the name of it but there's a little bit of ram that you can write to um in vm maybe yep that one and like actually putting those things in the stubs where like if you're just looking at code you can go look at the sub and go oh like this is how much of this i have or you know this is you know here are some of the settings and things like that like even like how many sockets are available or something like that so obviously i'll go down this first route but like even just having some high level comments that say here's you know another one's were like these are the libraries these are the frozen libraries and things like that um i thought could just be really handy to have it all in one page and go parse all that stuff out so i might play with that a little bit as well sounds very good to me for sure awesome well that's what i got today all right thank you well that wraps up the meeting for today um i just want to thank everybody who participated this has been the circuit python weekly meeting for january 22nd 2024 it's uh i think the first time in a while that we've gone over 60 minutes and i i appreciate everybody taking the time to be with us today um if you want to support Adafruit and circuit python and those of us who work on circuit python considering per consider purchasing from the Adafruit shop at adafruit.com the video of this meeting is regularly released on youtube at youtube.com slash Adafruit and then it's taken from there and made a podcast available on major podcast services it will also be featured in the next python for microcontrollers newsletter visit adafruitdaily.com to subscribe the next meeting will be held as usual on monday january 9 2024 at 2 p.m eastern 11 a.m pacific the meeting is held on the adafruit discord you can join anytime by going to adafru.it slash discord the meeting is held in the circuit python dev channel and the circuit python voice channel but you can talk about cool electronic stuff 24-7 with people all over the world anyway but back to the meeting to be notified about meeting changes to the time or day or to speak during the meeting asked to be edited to the circuit python needs to roll on discord it's free we're happy to give you the roll and we'd love it if you participated with us we hope to see you all next week thank you everybody