 Oh, if you're watching this not live, make sure and check the comments for time codes to skip through. So probably be about two hours long, maybe, if I have enough energy. We'll have lots of questions and stuff, so it'll be good. Let me... Looks like my video looks okay, and let me know that the audio is okay, too. Is okay, too. I figured out what update had broken my video, and I filed an issue on the Mesa folks, and they said, oh, I think I fixed this already. So that's super exciting. Keith EE says, hello, looking and sounding good on YouTube. Thank you. Peter Graf says, Shorah. And Gary Zee, good afternoon. Thanks for hopping in. Hi, Simon. Good afternoon, or whatever time it is, wherever you are. Thanks for taking the time out of whatever time it is to hang out here. Mark says, hello, Spook. Well, Spook, this is actually Vin in the cat cam right now. This is the brother. It's a cleaning day today, so they get to shelter in here with me. You're all good. I'll go to cat cam so you can see Vin. Have you noticed both of her ears are pink, like she doesn't have any brown on her ears. Twitch looks good, too. Thanks, Keith. Hi, Johnny. Hi, Patrick. Hi, Jim. How was Easter? Easter was good. My partner and I went and saw my parents and went for a walk, which was great. Her vaccinated, my sister has one dose, so that's been good. So this is the cat that doesn't like it when I start talking, so we'll see if she stays there or not. But it's a pretty lazy day. Cats. Hi, Keith. Hi, Minnesota Mentat. Here from this time time. From the start this time. Yes. Great. Well, last time the start was really rough, so you didn't miss anything last time. Love the Factory says, Ola from Colorado, boarding at Winter Park tomorrow. Nice. Yeah, we're kind of all done skiing here, although we have had a few cold storms blow through and I think dump a bunch of snow for us, at least. Cutie stretch. We'll wait just a minute or two more for folks to get started. I think everything's going. I'm a little discombobulated. I did not sleep as well as I normally do last night because I had to get up earlier than I normally do. Hi, Poverty Six. We do have some exciting, exciting stuff going on. Did the open source hardware summit earlier? Hopefully folks caught that. If not, you can check it out later. Ah, Mark says, MMA Dolce de Leche Muffins, best cakes ever. Simon says, I've had one C19 jab next in about six weeks. Awesome. Congrats. I'm super excited to hear about more and more people getting vaccinated. Bill had a very, for those of you who didn't see it, Bill Benko, who's a part of our Eight of Fruit community, was in the hospital with COVID-19 and so he went on show and tell this week and was like, everybody, if you can get vaccinated, get vaccinated. It's really important not just for your own health, but the health of your community members as well. So I'm here in Washington, the vaccinations open up to everyone next week. So I'm going to get on top of that. Huh. Interesting. Johnny says, just a heads up, the ZV-1 camera does not fully charge over USB. It dies after four or five hours due to empty battery. I guess the 500 milliamps is not quite enough. Interesting. Yeah, I've never streamed four or five hours, although occasionally I've forgotten to plug it in, but we're plugged in today. Well, at the factory, got a first dose last week. Dylan's getting the Moderna vaccine next Tuesday. Hi, Paul. Woo. Jim Kirk says, I spend a night in the ER after getting the vaccine. Oh, that's rough. I know it hits people of varying degrees. Oh, no. Mark says, my parents and sister have had it their way ahead in the UK, though my sister had an allergic reaction, so it can't get the second. Yep, it doesn't. It's still way better than getting COVID itself, I think, but yeah. Not always a cakewalk. I know my uncle had felt pretty sick after his second shot, but then he like slept it off in the next day. He was better. All right, let's get the show on the road here. Johnny says, I have long meetings over Zoom. I'm really glad I do not have four or five hour meetings. That would be a little much for me. All right, I'm doing time because today David's on vacation, so this is going to be like an extra relaxed stream today. So let's get started. All right, let's get off cat cam. So hello everyone. My name is Scott. I work for Adafruit on CircuitPython. Adafruit is an open source, hardware and software company based out of New York City. I work remotely for them, so I'm in Seattle, which is three hours time difference. So yeah, I do that. And CircuitPython is Python designed for really inexpensive microcontrollers called, and I'll show the clue here because I don't have it running right now. I guess I showed this last week, too. So back here under this, oh, wrong side, metal, canister is a little chip that has a microcontroller in it, and it runs Bluetooth, which is Bluetooth BLE, which is Bluetooth low energy. Run CircuitPython, you plug it in, it shows up as a drive and it has a code that py file on it that you can edit. So if you want to chat with me and a bunch of others, we have a Discord server, which you can go to adafru.it-slash-discord to get to. That will get you in the chat last all week, which is the best part. The one that I'm following during the stream is the live broadcast chat channel. So you'll see folks there chatting about, we were just talking about the COVID vaccines. Love the Factory says the arm hurt day, too. Mark says Emma, his partner, had no side effects. So this is a deep dive. It's going to be really chill today because I'm a little sleepy, a little tired, got up earlier than I normally do this morning. It's normally Fridays at 2 p.m. Pacific, which is now, but occasionally I do do it on Thursday if I want to take Friday off or I'm busy on Friday for some reason. It typically goes for two hours or more. I suspect we'll land right around the two hour mark, if not maybe a little shorter. Questions are welcome. So if folks have questions, feel free to ask them whenever during the stream. Next week we'll be on Friday, I think. I don't have any plans so far. And last up, there is a second cat in the room that is not on the video. This is on the video, this way for me is Vin, and her brother is in his carrier here. He is epileptic, so he rarely has had seizures, so I wouldn't expect him to, but he has in the past, so I just want to give you a heads up on that. And with that, let me take another time code. Let me, before I get into questions, I should just say thank you to everyone for joining me on these deep dives. I looked back and I started, I had done a few deep dives sporadically, but this is the anniversary. It was April 10th last year that I did my first regularly scheduled, every week deep dive. So thank you, everyone. It's been a pleasure to hang out with you. It's been awesome to see folks get more involved in CircuitPython as a result. So cheers to you. Here's what I have. Since I'm a little tired, I'm like super sensitive to caffeine, so this is a Theo's chocolate bar, and they make these lemon ones in the spring. So I'm going to treat myself. I'll probably end up being tired all day today, and then like when I go to get to bed and go to sleep, I'm going to be awake. That's kind of usually how it goes, but you know, it doesn't really matter because, you know, tomorrow's weekend, so I'm going to have more chocolate than I normally would as a happy birthday to the deep dives. So thank you all for being a part of this as well. It's really good. I don't know if you can get these outside the U.S., but Theo's chocolate is made in like the next neighborhood over. I'll go away from the mic. Bruce says, just actually listening. I'm eating chocolate right now. Sorry if you can hear it. Hamslab says, hi, Scott, your talk at the Oshawa Summit was great. Thank you. That's part of the reason I got up early was to be ready for that. It was only like an hour earlier than I normally do, but I was worried about getting up, and therefore I woke up even earlier. Keith EE came out to say, happy birthday, deep dive as well. Poverty Six says, happy birthday. I have to pour myself a drink. Mark says, I actually watched your first deep dive as in a year ago. That's when I got started in PCB design and circuit python. Awesome. I don't know what the Portuguese that Paul says is, but I assume it's a well wish. So thank you, Paul. Eric says, happy anniversary. Poverty Six says, tangent time. Yay. Yeah, we can do all sorts of tangents. So Paul asked, let me take a time code and I'll answer this question. If folks have other questions, I did see there was a question about what BLE was, but I think it got answered. Anniversary. So Paul asks, I'm trying to write, compile, and build in C++ for the Raspberry Pi Pico. Do you have any advice for a source to increase my knowledge of C++? I don't have great resources. I myself kind of learned C++ when I was at Google, because that was like the only time that I, that was the only time that I like, that's when, that's when I learned C++ was when I was at Google. So it was a lot of just like, seeing the existing code and the style guide there. I did, I'm actually on the embedded FM Slack though, and somebody just pointed out this tweet. So I'll just copy this tweet and maybe we could pull it up about references for C++. And the recommendation in the chat there was a book called A Tour of C++ by Bjarne Struestrup, the guy who created C++. So that would be a good resource. And I'll just let me switch to the desktop. So there's this tweet here. I know Russ quite well, but what C++ book would you recommend? And so you could check that out. Let me pull up. I know that even as I was at Google, C++ got a lot better. So the newer stuff is really cool. Mark says, you had written something in Unexpected Maker Stream, so I checked out who you are. Yeah, Unexpected Maker has been doing this longer than I have. All right, TigerBite. Sorry, I was eating on stream. Oh, and I should hide that window. OK, so here's a question from Generation Generation. I'll take another timecode and go with it. Says, generation says, have you ever heard about low energy packets, piconets in Bluetooth? They are used for WPAN, wireless personal area networks, mostly for devices and wearables, but rarely also for implantable devices. I haven't. I haven't heard of that. It sounds like something that would be built on top of Bluetooth low energy, but I don't know a whole lot about that. Generation Generation says, piconets and low energy Bluetooth CID numbers one master for up to eight devices. No, I've not looked at that. Bruce S. sends a picture of a C++ Primer fifth edition. So yeah, there's lots of folks here. Oh, yes, and thank you, Seth. Skr and Discord has pointed out that the Itsy Bitsy RP2040 is in stock. So we can pay some bills here and get pretty excited. Let me make the window bigger. If you don't know, on the Adafruit site, what you can do is you can go what's new and click here. And the Itsy Bitsy RP2040 is in stock right now. $10 for this board is a really good price. I just got my, maybe we could do some mailbag. I got actually all the Adafruit order stuff I already put in the laundry room. But I do have the open source hardware summit bag here as well. And it says, show us your beautiful nature desktop. I can show you some of it by moving the windows. This is my partner. We were up, it's like an alpine lake. This is only the left-hand side of it, because I have an ultra-wide, so this is stuff I was working on that we'll get to. So yeah, pay the bills, support me, support Adafruit, pick up an Itsy Bitsy RP2040. If that's interesting to you, they're in stock right now. Interesting. Beatergrass says, by the way, my phone hates the CircuitPy file system so much for powering things with my phone. Ah, interesting. Yeah, I haven't tried it much with phones yet. I bet doing file transfers over Bluetooth is a much better option for interfacing with phones than over USB. We'll get there too, it'll be really good. Jaffer Sien says, what monitor do you use? It's a Dell UltraWide, Dell UltraWide 34. I forget which model year it is. This is the newest one. They're not cheap, but they're good quality monitors. So yeah, my setup here is what you're seeing in the stream is like it's a 1024, or no, it's a 1920 by 1080 HD resolution top left chunk of my desktop. And then I have OBS on the bottom right and Discord and all the chats kind of scattered around that. So the books behind me, right here, it's like games and stuff. I'm not going to go over that. Hi, Randall. Kmart says, bought three RP2040 boards earlier this week restraining self on itsy-bitsy. Yeah, I'm not immediately picking up an itsy-bitsy either because I already have the, I just got two QT pies and I can use those instead. I don't like pop-ups like this that are really annoying. All right, yeah. I have an older version of this monitor. This one will be the same size, it's just updated. And it says $840 just for a monitor. You are the richest person in the world. I am definitely not the richest person in the world. There are people that have billions of dollars and they should be taxed more. But I think it's well worth $800 or $900 or $2,000 because if you work on a computer every day, each and every day, like getting the best thing that you're going to use for eight hours a day, five days a week is like a no-brainer. Like fancy chair, fancy desk. Sean says, yeah, the 3417W. Yeah, I think it's a 17 is what I have. I don't have the newest one for sure. But yeah, whoa, that's a giant new monitor. Yeah, so one of the reasons that I really wanted like an ultra-wide is I just have one. Like I just have one monitor. It's not like two monitors where you would have bezels in the middle. So it's quite nice. I'm a fan. Love the factory says, picture in picture with two computers makes a nice monitor worth it. Ah, yeah, I don't do that much. Keithy E says, there's huge value for making sure your tools don't fight you. Business expense of struggling is way undervalued when looking at flat cost. Yeah, totally. Bruce says, I think 49 inches might be useful for my aging eyes. I had a regular 30 inch monitor when I was interning at Google and it was too big for me. So one thing I like about this is I get a lot of screen real estate but it's wider than it is tall, which I like. Okay, so let me talk just briefly. So I did do the Open Hardware Summit and I'll take another time code here. Do you, do folks want me to go through my slides? Sean says, I finally spurred and got a U2917D to go alongside the ultra wide and it's been so nice. Oh man, you're such a power user. Dave G says, is that board games behind you? Yes, there's board games here. A 52 inch UHD TV for a monitor. That's pretty wild. I think it's pronounced 1337 or elite. Okay, so if you wanna see, I won't give it all because we've got some other stuff to do but I do have, I forgot this. Love the factories, the slides will be cool. So I'll just briefly go over this. Maybe I won't give it completely. So I have this repo, it's github.com slash tannewt slash presentations. That's where all my slides and kind of like all the contents of my slides go. So, Poverty 6 says, sure, quick slideshow please. Okay, so I'll just go over it. So I do have PDF versions. So these are by date. So you can see here's the Open Hardware Summit and if you just hit presentation PDF, maybe, actually let me open it. Oh, open it here. UPDF repos, presentations, 21. Oh no, it didn't, here we go. Well, and Carlos says, I've been working from home on my 13-inch laptop for a year and now that I feel I'm gonna have to relearn how to use a larger monitor. Yeah, see, I would not do that. It's just like, for one, I'm trying to sit up straight or like my, I'm sure you see how terrible my posture is. But a laptop certainly does not help that. I did do the multi-monitor thing for a while. Okay, so let's go over this. So this is a talk I gave earlier. It's a 15-minute talk as I did it before but I think I'm not gonna formally do it and we can interact over it. But I wanted to talk about, and those of you who watched last week saw me kind of like formulating these ideas. So I wanted to talk about better interface design and in particular, what I consider outside in is the main thing to take away from that. And what, am I not? So first I said like an interface is a boundary between two things that's super vague but we'll get into it. A well-designed interface, kind of of course all this is my opinion but it's an interface that defines what without revealing the how. And that is really about abstraction. So an interface's role in a well-designed interface will abstract away the how into the what and critically what that allows you to do is it allows you to reuse components. Like those two things allows for reuse. Hamzlabs says the Osmo summit is just ending like right now. Yeah, I knew I would overlap with them. So this is the feather ecosystem. I think most folks who are watching this stream right now understand the feather ecosystem. What we have on the left, these are actually boards I have. This is how I store them actually. It's on this like black foam. On the left-hand side is feathers that are feathers and then on the right-hand side are feather wings. The point is that the feather ecosystem itself in the interface that it's built upon is actually been very successful. So it did a lot of things right but I also, there are some weird corner cases that I wanted to show that I wanted to show as like lessons to be learned for next time as well. Randall says impressive collection. Yeah, I mean, I have all these for testing. You'll notice they're not in projects or anything. They're just in case I need them because if I see a bug come up and then it's like two days minimum to get something from New York to here. So I've just picked, I've collected them over time which is why I've got like cutie pies and stuff like that too. So if you want to know more there's this githublink.github.com slash Adafruit slash awesome dash feather. So three ideas of interfaces when it comes to open source electrical designs. Mechanical, electrical and software there's kind of like the three domains of what I consider to be interfaces. Mechanical first is something that the feather did reasonably well or like almost entirely well. So here's six examples. This is a picture Noam Pedro took is that all these feathers are the same. They all fit in the box. But if you look at the box there's a pair of mounting holes that are actually slots. And the reason that is is because the feather spec allows you to have longer feathers if you need to. And as far as I know, there's actually only one. It's the phone of feather is actually a bit longer. So this is an example of like what happens if you are designing for the inside out, right? It's like this notion that the feather could be two different sizes, kind of propagated outwards into the design of the box itself. Oh, I'm doing, if I do the mouse wheel rather than the arrow key, it goes a bunch. So, yeah, mechanical interfaces include board size, mounting holes, component size and the electrical connections locations. This whole section is like geared towards teaching people. Yeah, Randall says leaky abstraction, exactly. This whole section is geared towards like pointing out all the things that are involved in an interface and that you can actually design. Eric points out, well, there are display feather wings too that are longer and wider. Yeah, I was talking specifically about feathers, but yeah, you're right that there are feather wings that are other sizes. So here's a feather wing. This is the new pixel feather wing and it has only one data signal coming into it. And the question is, given all these locations of pins, which pin does it actually use? So if you look at the back, what you'll see is that there's a bunch of jumpers, one that you can place. And because this doesn't use I squared C, there's no like canonical place for it to happen. So what happens is that we say, oh, here's a default, but if you need to change it because of conflict, like here it's possible to do that there. So electrical interface involves the, like it builds on top of the mechanical locations of things, potentially is also like the connectors that are used for electrical connections. And then on what you build on top of that is like designated functions, designated protocols, any voltage levels, input, output, direction sorts of stuff as well. David says, I think there's a SparkFun Feather ESP32 S2 seems to be longer and longer. Yeah, yeah, they just released it. And it's definitely, they did some weird like the pinouts the same, but the positioning of the mounting holes and stuff is different on the SparkFun thing pluses, which are feather pinout compatible or something. So here's one feather and spoiler alert, it's actually the RP2040. I'll give the inside track here. And this is important, this is to think about like from the outside in, right? Like you're not looking at the circuitry of it, all you're seeing is the interface of it. And so what you can see here is like the SEL-SDA, yeah, Randall, it's the RP2040 feather. And then on the top, the thing that I wanna point out is that it's like 13, 12, 11, 10, nine, six, five standard, kind of like typical numbering, but we also have this feather here, which has SEL and SDA in the same spot. And like that has led like having that alone has allowed us to make this like huge ecosystem of feathers. But the numbering on the top is actually different. So what does that mean? Well, that means that like anything that references those numbers, like the numbers in Arduino more than the pins in circuit pipeline are gonna have a problem. And yeah, this is something David has been learning. So what impact does that have? Well, that means that, oh, were you asking for a link, Randall? The impact that that has is that you'll find all these examples about where they'll have different comment sections for different setups that you're doing and so the more standardized things can be, the like easier it is to reuse code. And that's the whole point of an abstraction layer, right? Is to reuse code, knowledge, other hardware that also interacts with it. Celebs asks, does it have Beely and Wi-Fi? No, it does not. The RP2040 is just an RP2040. If you want Wi-Fi, the recommendation is to use, I recommend using the ESP32S2 boards for Wi-Fi. We don't have a board that does Beely and Wi-Fi concurrently. We have the NRF52840 for Beely. Maybe we'll get there, I assume we'll get there. Okay, so software, software's names, including the names and numbers that end up on your board. So really think hard about that as part of your interface. The interaction that you have with the board is also part of it, what the buttons do, what the LEDs do in different states, that's all part of an interface. It's just not like a physical interface. The bootloader that ships on it and how you use it and the default software, those are all part of it as well. That's all part of the experience. And those are interfaces as well. They're like kind of amorphous interfaces, but the more exact they can be, the better. And so if you do it well, what you can do is like in CircuitPython, we have all of these libraries that are building on top of it. And we also have all these guides that are building on top of it. And this is like so critical, right? We've seen all these RP2040 people coming, the Pico folks coming in and being like, how do I do this? How do I do that? And it's like, well, we wrote a guide two years ago about how to do it in CircuitPython. And it's inherently like, it's no different on the RP2040. So like look at this whole guide and it's still works, right? And so, and I think this is super undervalued because this guide work and tutorials and all that is like super hard. It's a lot of work. And so the more that you can make it uniform, the same. Remember all those kind of soft interfaces that we're talking about, just can save you immensely in the long run. And so let me, hi Hugo, greetings on this dive-aversary. Eric asks, how feasible is it to do Wi-Fi and Bealee concurrently on the ESP32 S2? It's not, the S2 does not do Bealee. It only does Wi-Fi, I think. I think the plan is that the S3, the ESP32 S3 will do both. David says, reusing code in libraries or what I like about CircuitPython? Exactly, I think that's the thing is like, if you can reuse almost everything, it means that you can spend the time on the new thing, right? Like in the RP2040 case, it means you can take the time to learn the PIO stuff, which is unique and weird and cool and powerful. But yeah, ooh, ESP32 C6, we'll pull that up. Let me finish this so we can take a look at that. I haven't actually looked at that page yet. Generation generation says, it will be great if you will add support for Wireshark packet capture for the boards. Yeah, I don't think we're gonna do that if you're talking about capturing Wi-Fi packets. It's just not a core use for what we're doing. Love the Factory says, is it fair to say that only one chip model is supported in CircuitPython for the ethernet wing? Yes, I think that's fair to say. As far as I know, we only have a, we do it purely in a library now and it's the WisNet 5500, if I remember right. Okay, I'm gonna keep going and then we'll take a look at that chip. I haven't actually taken a look at it yet. Okay, so thinking outside in is the first of the three kind of tips I have for how to make a better interface, how to design a better interface. I think design is the right term here. So thinking outside in is this notion of not starting with the datasheet. Please, please, please. And you've heard me rant about this on the deep dive before. But the datasheets job is to give you all the details and the details are not the thing that you want to leak into your interface. Instead, what you should do is you should start from, I like to start from example code, but start from how you want to use something, what you want to do with it, not how you're going to do it. And so here you can see this, this is real example code. That's just printing out temperature and humidity from a temperature and humidity sensor. So it's super simple, that's the complete code. And what you end up with is this much nicer abstraction layer, this nicer interface that just has ways of controlling the chip, but also standard names for like reading relative humidity and temperature. So yeah, that's the first of three. I'm actually going to open the window here because it's getting a bit warm. What? Where are you meowing at me? Mm-hmm. Poverty six says a big hug of appreciation to Adafruit for all that hard work put into the lovely documentation and guides. Indeed. And sorry for any of the construction noise that you hear. So the second tip that I have is be explicit. So this is one thing that, this is what, one thing that the feather spec does really well is the bus pins in particular, I squared C, spy and you are all really well-defined. And so that's a super strength of feather and what we've seen like really benefit so many of the feather wings is how explicit these are. And it's interesting to note that in the feather spec as well, the I2S pins are explicitly not defined. So it's still explicit, it's just like, we don't know. So that's great. So that's two of three. And then lastly, be strict. So those of you who've heard use circuit Python, this is the like, we want all of our modules that match CPython to be strict subsets of CPython. So here we have the example of the time module where we have only some of them, but the way that we implement them is to be strict. And I want to make the point that this is be strict when you're implementing an existing interface. And I want to include when it's not an interface that's been like formally defined. Imagine you're doing a second version of your own product and it's the same form factor. Be as strict as you can, labeling all the pins the same and making sure that all of those STL, SDA pins, all those bus pins are in the same spot. Don't let the internals of what is on the new version of the board leak out to the outside. Because remember, if you keep it the same, you have all of these resources that you can reuse then. And I still see this happen. So this is why I'm giving this talk. So to wrap up, remember interfaces are three things. They're mechanical, electrical, and software. And those are all big categories. And then to design one well, I think you have to start by thinking outside in. Start with what you want to do and not directly going to how you want to do it. And this is the argument I'll make if people come to me wanting interrupts or threading is that it's very much starting how you want to do something not what you're trying to do. So be explicit when you're designing an interface and be strict when implementing an existing interface. So yeah, that was my talk that I gave. That's pretty much everything, except it was a little bit less formal. So folks have questions, let me know, otherwise we'll keep going. Hugo says, so you're saying to use a friendly name for Bluetooth services and not magic UUID values. Not necessarily. The UUID thing is just a thing that like that Beely folks have defined. So I think the most important thing with that is to, the most common mistake I'd see with that is actually people, sorry, I got distracted by Todd's comment. And I'm tired. The most common mistake I see in Beely design is that everyone reuses or many people reuse the Nordic UART service and then they overlay their own protocol on top of it. And I think that's a mistake because the Nordic UART service should be reserved for actually just doing a serial link between a device and somewhere else. The moment you layer another protocol on top of that, you should change the UUID to make it clear that it is actually like a, it may work under the hood like Nordic UART service, but you actually have another protocol involved. And you should have a unique ID for that specifically. Well, the factory says some data sheets are inspiring and read like a good book. Yeah, so the other thing I do is if you do want to read the data sheet, and this happens a lot in circuit Python now where we may be adding in a native API that's going to work across ports. If you read the data sheet, actually read multiple data sheets of similar things. And that will allow you to find the commonalities between them and kind of understand better the things that are unique that you don't want to encode in an outward facing interface. Hi, Leonardo. David G says, can or should something be done for those simple tests to avoid all those alternative names for various form factors like a file you import that maps Metrofeather name it or checking it runtime, what board? My opinion is that you really should just have different examples for different boards. And you'll see that I've done that more in the like e-ink examples is that it will say like like e-ink or like ILI 93 41, 2.9 inch grayscale, ILI 93 41, 3.2 inch tricolor. I don't know, like I'm making that up. But like I would prefer to have very specific, exact like works as exactly as written examples instead. And I think that's becoming even more important because we're very rapidly, it turns out, moving to this world where we are doing like these zip files that we're calling project bundles. They just added this to learn where you can download a zip file that has the example code and all of the dependencies it uses, including file assets. So like if it has a font or an image like a spreadsheet in that's needed by the example, like it will all be included in the zip. So I think it's really important for us to move away from this world of like, oh no, they can, they can uncomment it, right? Like we have to assume that like they're not, like the person that's trying our example code is not going to change it at all. And so I definitely prefer this split example thing. Simple test generator, you tell what screen and what board and it does the perfect demo code. Like potentially, but the reality is that there's not that many combinations, right? Like that's where interfaces come in. That's where feathers come in is like, yeah. So what distracted me is Todd bot said, okay, I want to run code when a pin state changes for your interrupt use case. You didn't say that you wanted to run it while other code, like in the middle of other code. So that does tell me that like, if you just had a helper that looped and checked for you, it would be okay. But also like I try to tell people, if you want interrupts or threads, you're welcome to add them. It's just not my priority. Instead this Bluetooth and energy stuff is, which we should get to here shortly. Bruce linked to my talk in the open source summit live stream as well. But you just saw, you basically just saw what I said. Hopefully I said it better than that. Okay. Ooh, one thing I wanted to talk about before I get onto the Buley stuff is, after I take a time code. Todd bot agrees that Buley's more important. Okay, great. At least I've made that argument. Okay, so I showed that. Let's see if the itsy bitsy's are in stock still. I don't know how many they made, but they are. David G says, I want time dot sleep to be interrupted earlier if something happens. That's what light sleep is for. You can do alarm dot light sleep until and then you can give it alarms to wake back up. So that exists, we have that. It's the light sleep stuff that does that. We may not have all the alarms you want though. Hugo says, with samples, what I've seen elsewhere is things like if you want to do this variation, go get this other file from this place. Place is vaguely nebulous. I think we're gonna get this interesting. We're gonna have infrastructure for picking the right thing for the ports that you have. I think it's gonna be really cool. Like Trevor and I were already talking about having an app on your phone that would basically do this as well. So like pull the project data, pick the project you want, push it over really and get it on your device all from your phone. Slav says, could you please link in the audio sessions you did previously? What do you mean exactly? Sorry, my time codes are behind. I think I did maybe a couple streams about audio playback. The place to look is just in the playlist. I just, I looked at this. So if you go to Adafruit.com slash Adafruit and do playlists, oh, 78 watching. I didn't have my thing down here that tells me it's that many. Welcome everyone. If you go to playlists and hit created playlists, this is all of the Adafruit created playlists and there's this deep dive with Scott one. And if you look here, or actually, you know what? It's almost easier to see it. Oh, there's an unlisted one, secrets. If you look at, if you hit view full playlist, you'll see kind of all of the topics that we've covered, which is actually a good overview for what we've got going on. We did a lot of ESP32 S2 stuff, FPGA stuff, which I'd love to get back to. Showing the puzzle. Yeah, I don't know if I've done, oh, here you go. RP2040 audio and DMA debugging. So these two right here, probably be what you want. Hello, Dirac. Bruce S asked, let me take a time code again. I've been really bad about time codes. Will circuit Python 7x be merged with MicroPython 114 or later? I would like that to be the case. It's not clear to me if somebody's going to do the work. Dan did the merge a few years ago and MicroDev has started it. So there's a draft PR and I just replied to it yesterday saying like, hey, now's the time. Do we want to do this? If MicroDev wanted to do it. But I'm kind of like all in on VLE at the moment and Dan's going to be doing, Dan's going to be doing the USB descriptor stuff. So being able to change the USB device in boot.py. We've heard a lot of people from the like HID, like I want to be a mouse or keyboard world being like, I don't want the drive to show up. And so we've heard a lot of people wanting to turn different parts of it off. And so I don't know if anybody is going to do that work. I know MicroDev started it. I don't consider it super critical to seven. Now's a good time to do it though because we're really early in 7.0. And if we did do the MicroPython merge then we would want to potentially extend how long until we're stable with seven. Not because MicroPython's unstable but because the merge is really difficult to get right. So yeah, I would like to but it's just not a top priority for any of the eight of our folks to do. So if you want to help check out that, check the PR out. Devo asks, is there a course on this stuff? We don't have any formal courses but if you want to learn more about MicroPython start with learn.adafruit.com. And that's where we have a ton of tutorials about electronics and software and stuff including like how to build custom MicroPython and stuff. So that says, I'm CatStream loving it and much appreciated. Thank you. David says, I also like starting with the learn guide examples and then change or adapt it for my project. I recently did that with the Clue project saved a ton of time. A lot of time. Yeah, a hundred percent. That's a beauty of open source is like and good interface design as well is if you can restart or if you can start from a baseline and then do the customization you want it saves a lot of time. And let me answer Keith E. Keith E.S. What are the major milestones for that merge to take place? It's kind of hard to like split apart. It's just a ton of work usually. So I think the way that MicroDev was doing it is you do the merge and it's like a year and a half of changes to MicroPython where a lot of those changes happen in code that we don't use like the STM port for example. And one thing MicroDev did already which is good is that the newer MicroPython repository has code formatting. And so one major thing was to get CircuitPython doing the same formatting so that the merge later on would be simpler. And MicroDev has done and we've merged in the formatting stuff. So it should be easier for the MicroPython merge to come in with that. We don't tend to do a lot of changes. The changes that you get the most differences are in the Py directory because that's the place we share the most. We don't change it all that much ourselves but we have a bit. And in fact, I just merged a change merged a change into it earlier today as well that will make it harder but it also saves memory or it saves slash space which is great. So major milestones, I think it's gotta compile and work. And then what we'll find I think is we'll merge it and then there might be some instability and some bugs that come from it. We do get a new MPY version which is why we would always do MicroPython merges on a major version boundary because the MPY versions from like six X MPYs would not work with seven X if we merged in 114. But yeah. Hey, Mr. Certainly. Okay, I'm not sure I'm not sure I'm in a last a full two hours but it's all good. Maybe I'll have some more chocolate. I think I will. Let's just hang out here. I'm carrying out the ASMRU with me eating. Devo asks, hey Scott, do you game? Are there any games you currently play? I've been playing, I have a friend in Boston who I play once a week with and him and I are playing Astroneer. We're pretty much, we're pretty in the late game like we've been to every planet, but it's still fun. And then I got Dwarf Romantic which is like placing city tiles. I might actually play that after this. I think I'm about, I'm about done for the day. So I don't have a lot to get going. I do, I actually have some bealy work I'd like to do here. So I think that's what we'll do now. Chill celebration for the year, deep dive is an awesome excuse for chocolate. Yeah, my dad's birthday was last week so I went to the chocolate factory, like literally a chocolate factory to go pick up. They have like a four candy thing that are like beer flavored confectioners or confectionaries. And Itsy Bitsy and QDPI are between the 40s are still available as well. Those are the ones that I expect the keyboard crowd to really be excited about is the smaller form factor Itsy Bitsies. Oh, ESPC6 chat next week, Gareth says. Let's take a look. That's what we're gonna do. I haven't actually taken a look at it yet. Been are you too cold? She got up Moonstruck chocolate. Ha ha ha, she is cold. She says dad I wanna be on your lap, come on. So funny. Randall says any pointers for using the Feather S2 with the 2.9 inch grayscale e-ink feather ring instead of a mag tag? Do we have the example for the feather ring already? Cause it should be the same code. All right, well, cat cam's boring cause I froze her out. I opened the window and she's like, she sleeps right below the window so all the cold air is coming. So now she's on my lap. Cat cam would have to be lap cam. Okay, so, ooh, this is today. Hot off the press. Let's go to the desktop. So this is from Espressif. I think this did leak a little bit earlier and let me go scroll down to the discord. Mr. Sturgeonly says congrats on when you were streaming in the open hardware summit talk today. Thank you. Everyone get up and stretch our cat god demanded it. No, my cat god demands me to sit so that she can be warmed up on my lap. Love the factory picked up some cutie pies. Awesome. Thank you. Thank you, thank you, thank you. Oh, Randall says problem is replace the magtite class with the components. I tend to not like the big classes. The magtite class is gonna do a lot under the hood. I would see if you can find an individual example just for the ink. So I think it's, where would I find it? I wish our e-inks were better labeled with the chip that they are, but it's the 2.9 inch ink. It's the one in the mag tag. Oh, unexpected maker said miss the start time due to daylight savings. No worries, thank you for joining in now. Ink breakouts and feather wings, 2.9 inch grayscale ink feathering. I think that's right. And, ah, here we go. Pin out, circuit by then code. So this code should work, but it won't do everything that the mag tag library does for you. But this ILI 0373 stuff should just work. Okay, so let's take a look at this C6 announcement since that's the time code this will be under. Today, the upcoming release of the ESP32C6, it's Wi-Fi 6 plus Bluetooth 5, and it says LE. So I think that means that it's only Beely. And I think that's true for the S3 as well. The S3 is Beely only. After successfully launching the C3, Wi-Fi 6 support is optimized for IoT devices and the SOC supports a 20 megahertz bandwidth for the AX mode. Station interface, interesting. Beely 5 radio supports long range operation through advertisement extensions, which is great in the NRF 52840 supports, coded phi and the two megabits per second, high throughput phi. Oh yeah, maybe we wanna add that. So, that's getting into Beely, but I was, I'm playing around with how fast we're sending data back and forth and switching to the megabit, two megabit per second, phi would actually double our speed, which would be cool. But we're not, we're not doing that right now. So, let's keep going. Single core risk five, which is cool, 160 megahertz. That's, you know, on par of the SAMD 51 and the RP2040, but it's a different architecture. So you never quite know exactly how that will compare. And like it may compare differently depending on things. It's got 400 kilobytes SRAM, which is, I think the C3, or at least the S3 are kind of like on par with that. Works at the external flash, which is super common for, for expressive. 22 programmable GPIOs, ADC, SPY, you are I2S, RMT, which is the remote thing, which we use for pulse in. TWAI, also known as CAN and PWM. So this is pretty standard for them. It looks like it doesn't, it still doesn't, it has this weirdo. It's got this weirdo USB serial JTAG peripheral. It doesn't have the full native USB, which is, you know, what's interesting is all of this BLE workflow stuff will unlock all of the stuff that doesn't have native USB, but does have BLE. Yeah, Bruce said so we need the BLE workflow, exactly. Yeah, that's totally the case. UnexpectedMaker asks, are you looking at L2CAP for BLE comps? I'm not. For those of you who don't know, L2CAP is like the underlying layer or a lower level layer of the BLE stuff that is, last I looked, not as well supported on the like phone API side. I think it is improving and the benefits would be that you would have less overhead, but speed is explicitly not really, not really a goal of what I'm doing. And we'll see that I think even as I just got it today, like it's not terrible, at least for transferring Python code, which is a caveat, but that's okay. Okay, we're almost at the bottom. So nothing super surprising here. You know, the thing that Expressive is particularly interesting just about is just cost. Like they're just so aggressive in their cost that it's pretty interesting. I don't know a whole lot about this 802.11.ax, which is like a Wi-Fi thing. Sleep for extended time period with assistance of a AX capable Wi-Fi access point. Interesting, this feature in the C6 will allow customers to build battery operated connected devices that can last for years on battery while staying connected throughout. Cool, I mean, so the thing is with all this Expressive chips is like, we probably won't put a lot of time into it until we can have chips to sell. So it's kind of like a perfect time, like there's a chip shortage right now that's hitting a bunch of people. It's a perfect time to take a step back and invest in some software stuff, like the BLE stuff. Higa says, I don't remember where the 100% certainty, but did you share a resource in getting up to speed or at least familiar with BLE protocols, et cetera? I didn't. Somebody asked me a book. There's this book that's in the Adafruit shop, which if you just made an order, I'm sorry. What is it, BLE, or it's Bluetooth. This one, getting started with Bluetooth Low Energy by K-Town. So K-Town used to work at Adafruit and is one of the authors on this, getting started with Bluetooth Low Energy. It's kind of a good overview. I can just do that now. I guess I haven't really covered it, because I did all this work prior. So let me just, so there is also a learn guide and maybe I'll just talk about that. I talked about it a bit last week as well. I thought there was this one good page or search is just so, I can never find the guide that I want. Understanding BLE, maybe I should call it Bluetooth. Oh no, he says that book would have bumped me to another freebie level. Sorry about that. Maybe it's in the Circuit Python guide. Yeah, there's other folks on here that have a much better, no, this is too specific. Ah, here we go. This is probably it. Bluetooth Low Energy Basics. Let's see what this page says. Okay, yeah, let me, I'll share this link. This is, I think, the best primer that I've seen. And I tried to talk it over and about. I just got accepted to give a talk to the Python language summit. It's windy out. I could close it too. This kitty wasn't on my lap. Okay, so we talked a bit briefly before about, there's this difference between like the gap side of initiating connections and discovering other devices and then once you're connected, what do you do? So central and peripheral are these two roles that the BLE folks call them that happens when you're discovering devices and connecting. The central is the thing that's looking for devices and initiating connections. The peripheral is the thing that's advertising what it can do or what it wants to, who it wants to connect to. So yeah, that's the advertising process. And then once you're connected, there's another protocol of GAT which is built on top of L2CAP which is individual like service discovery. So all the things that the device that you're talking to can do is encapsulated in what's called the service, like a function the peripheral provides. This is actually not quite correct because both the central and peripheral can provide services. And the thing that provides the service is called the server and the thing that talks to it is the client. Yeah, this is not the page I was thinking of. I like wrote it out really technical. Oh wait, what is this? Okay, so this is, yeah. Sorry, there's not a great thing. This is also written by Kevin Townsend. Is this introduction to Bluetooth or energy? I don't know. If you have more specific questions I can give you better answers but there's no great like one resource. I did a lot of reading just on Nordic stuff and I was very confused for a while but I think the key thing to understanding Bluetooth is really understanding that there's really like two protocols involved. There's the like advertising stuff and then there's the like once I'm connected stuff. And that helps it. And you really, really, really try to think that those are two separate things. Okay, so let's just dive right in. Hey, Timon. Yeah, physical cookbooks are good. Let me take a time cut. 11.52. On to Belie. So what I've been working on is, and I would love feedback, is there's this Adafruit Circuit Python Belie file transfer repo. And I have a poll request that is me, Belie is such a mess of a standard. I think, I haven't looked at much at Bluetooth but Belie I think is actually an improvement. That's why you're seeing these Espresso chips not have classic Bluetooth is because I think they're basically like deprecating classic Bluetooth in favor of Belie and making Belie faster so it can do things that Bluetooth was used for previously. I won't queue up the question, can you teach me Bluetooth for next week? I think, yeah, it's just not, it's hard to explain when you're just generally saying it because there's so many different components. So what I have here is, this repo is a Belie service that is designed for sending files back and forth. It does not, it doesn't primarily want to be super fast. And that's, Timon says classic Bluetooth was a really bad protocol. Yeah, I've not had the deal with it. So if anybody wants to give me feedback, I've written up the protocol that I've been implementing for file transfer. It's five commands. Well, let's just go through this and maybe. So in this repo, I have two examples. There's this simple test, which is kind of the client side of like, okay, I'm gonna read and write files to you. And then this, oh, and this is the wrong link. Fix this link. Second link. Add my, there's a second example that is stub server and I'll show you this. And I think I showed it maybe two weeks ago. TigerBite says, how fast can you get advertising to go on the Nordic chips? As an example, I want to do more of a broadcast to see if a device is there and react to really fast. Don't really need to send data back and forth. So probably don't need to establish a connection. I think it's like every 10th of a second by default. Generally, Belie is not good for really fast. Even once you're connected, there's this interval, this connection interval that is like, you and I, like both sides of the connection agree to only talk every so often. And so the smallest that you can get that window right now I think is like seven milliseconds, which is actually kind of a long time. And that's if you're lucky. And I'll show you some output, but basically if you want really fast, Belie is not the way to do it. But again, it also depends on what you think really fast is. Johnny says, I looked at your spec and I wonder if there's a specific reason that you don't support transfer page-wise and just sequential. What do you mean page-wise? Like for just a piece of it? I think largely unexpected maker says 20 milliseconds is the quickest. So you can get iPhones down to 11 and a half milliseconds if you have an HID service, I think. Because HID is like keyboards and mice and you want it to be lower. For I think you can get, the lowest you can get the spec is seven and I think Android will do seven if you ask it to. You don't support piece-wise. So I was originally thinking about having the ability to do like a patch operation where you would say like starting here, replace this many bytes with this many bytes. And that just is like really complicated. Yeah, start index and the size we could do if you are just gonna provide the remainder of the file. But I kind of like when I was doing this two years ago, I got lost in the weeds of trying to be fancy. And that's why I'm like, that's why my goal is really not to, not to do that. My goal is to be simple and there's a version number if we wanna make it fancy or we can. Yeah. I mean, even on a user level, the whole parenting thing is so unreliable on day-to-day usage. Yep. Yeah, ESP32 and MicroPython. Yeah, I don't know how MicroPython is doing it. You have to negotiate. Once you're connected, you can negotiate with the other side what connection interval you want and the MTU as well, which is the max transmission unit. Love the factory says, is it feasible to stream three access sensor data over BLE or old school Bluetooth without dropping any points for Windows logging? So advertising is not the way to go if you want reliability because advertising is just like broadcast it out and you don't care if they heard it. The lower level primitives of once you have a connection in Bluetooth should give you a continuous stream. And that's kind of, we have this primitive in CircuitPython called the packet buffer, which we'll talk about, we'll show we've got time. But it kind of exposes kind of the internals of like what you received and in what chunks and allows you to send in those chunks too. So without dropping any points, yes, but it really is like, it depends on your data rate. And we'll, I'll show you exactly what I'm working on right now for that. Paul is asking you about some build errors and I don't know, I don't know, there's not enough detail for me to help you with that there. I think I would recommend asking on the Discord and ask on the Discord for help with that. Oh, UnexpectedMaker says, I'm talking specifically about Gap and advertising and scanning. Not sure if that's the same as Gap. Yeah, I'm not sure either. What I was talking about was the connection interval when you have a connection. So during Gap, I think it is still part of Gap. I think Gap includes the lower levels of the connection. TaggerBot says, that is why I was hoping to not establish a connection, just advertise really fast at a low decimal. So I'm not just stopping everything around it. I think what you'll find is everything else is stomping around you. If you look on Learn, there's this broadcast net thing, which is the thing I did two years ago when I was doing all this, which is just use advertisements as a unreliable way of getting sensor data to a Raspberry Pi in terms of like IoT stuff, but the data rate that you're actually gonna successfully get through is like quite low. But if you wanna talk, and I think advertising is like kind of underrated, like I suggested it to Unexpected Maker for his project. And it seems like it worked out really well. Bruce says, yes, advertising interval for Billy Minimum is 20 milliseconds. Oh, and the other thing about advertising intervals is iPhones particularly have a specific rates that they require, require, recommend, recommend or require. They kind of like give you even more specific bounds for when you wanna advertise. Because you have to think about that, like what the iPhone is doing is like, kind of glomming all the things that people wanna do with Billy together so that they can do them all at the same time. The latency will be from misalignment between when an advertisement payload goes out and when a scan starts and stops. Sanders says, if you're going to do piecewise, you might just copy the R-sync protocol. Yeah, link me to it, I'm interested. One thing I thought briefly about doing FTP, but one thing I realized is that I realized that anything built on top of TCP has an underlying layer that's doing control flow management and Billy doesn't do that. So one thing that you'll see in this protocol that I have for Billy is it has control flow stuff built in. And that's primarily because it's also like it has to specifically work with specifically work with like low memory devices. So like if I have a megabyte file, there's no way I wanna send the whole megabyte immediately because there will be a rate that I can write it to the flash that's probably actually lower than what I can send over Billy. So yeah, I'm making another standard. Love the factory says, is it still true that Circuitpython can only do one of the sides of Bluetooth? Bluetooth mesh in the cards for Circuitpython. So I haven't looked into the details of Bluetooth mesh, but Circuitpython can do both central and peripheral. It can't do the ESP32 implementation, I'm not sure if it can do both roles and the Blinket implementation can only do central. But Circuitpython on the NRF can do both central and peripheral. David G says, you have to style with a packet that has an offset. I mean, it's kind of a, I don't need to. The reason that the U of two has an offset is because it's assuming that the host may actually write it out of order. But in this case, we do know that it's, we do know that it's in order, we do have ordering. Okay, let me show you what I got. And I guess I should take a look at our sync, but I really want something simple and generally I don't feel like things are that simple. Oh, and maybe this stuff stopped. So what I was doing is I was, I have, oh, it isn't stopped. Okay, great. It was sleeping. So here's what I've got. Have I shown this? I think I did. So here's the base UUID. And if you look, I did, oh, I didn't fix this one. I meant to fix it, that it would say file transfer. I didn't apparently fix it in my local copy, but I fixed it on the library. There's a missing R here in an exclamation point, but apparently both my devices still have it. So I don't want to change one. So I have that. That's the UUID. And it's documented in this PR as well, what the full thing is. An executive maker says, yeah, I'm using it for Sam and it's working great, but the lack of acts with gap is really problematic. I'm hoping Bealeemesh will help with this eventually. You could take a look at scan response. Maybe if you're doing a scan response as well, because that's something that happens if it hears you. Yeah, so I'll take suggestions, but at this point, I really do want something simple. Okay, so this is the transfer characteristics. So this is kind of like the RUART equivalent. And the way it works is that you can write no response, which means that you don't get an acknowledgement back, or what you can do is you can notify, which is kind of the reverse of it. It's just different terminology. And then you can set permissions and max length and say whether it's a fixed length or not. And then this is some magic that says bind. And so this happens if you're, this is called if you're talking to something. So if you find a service on the remote, like peripheral or the remote side, could be the central or the peripheral, where you're going to be the client, you'll get the service in and then it goes through here and gets bound. And what is used is a packet buffer to do that. And a packet buffer is the thing that will store incoming writes or incoming notifies for you and then also kind of glom things that you write into a full packet. And that's really important because because BLE has these connection intervals where things are written. You can, if you glom packets together, if you add more data in a single packet, that means you can write more data for every connection interval that you're going through. Yeah, I expect to make this as I tried scan response, but couldn't get it working. I think it might have been my response payload was bad, but lack of docs on the MicroPython side is a bit meh. Yeah, sorry, they took a different approach with Bluetooth and like we went pretty native heavy. A lot is done internally. And the reason for it is like this project is one of those is like just like USB, we have to actually use it from C as well. So we do a lot in C whereas MicroPython does very little, I think in C. They let the Python do it all. Which is the way, which is their design decision. So actions, read, write, delete, make directory, list directory, I should just call that make. Make directory will create any directory. So if you want to create two, like a parent and a child, it'll make them both. Delete will delete directories as long as they're empty and it'll delete files. So here's some two write and read helpers that I added. And I think this is what I needed to do last time. It allows for at the file transfer level to actually talk in buffer sizes that are larger than packets are. And one thing that's interesting is that the packet size can actually change because the packet size is dictated by what's called the MTU, which is the max transmission unit, which is like how many bytes per connection we could do. David G says no permission because it's fat, yes. And because I'm trying to be simple. So I don't know, I think I went over this. This code's kind of hard to grok, so if you want to know what the protocol is, check out the docket. It makes it a little bit easier to read. But what I actually want to show is the demo code. Okay, so I have them both in. So the code on the feather is as if you were the client. And what I have here is you create, so actually let me just, let me go over all this code. Since folks want to get ramped up with Bluetooth, it'd be good for me to explain the full demo. Okay, so what do we have? You import Beely Radio. This is an object that represents the radio itself. And you just get one of those. It will, this Beely Radio should be singleton. This is based on the library. The underlying adapter class is a singleton. And then there's this provide services and advertisement. And then our library for file transfer. So what is this doing? So this commented out erase bonding. Bonding is information that each side stores so that they can connect to each other automatically without user input. So if you've ever gone on like an iPhone, sorry, I haven't used Android in a while. But on iPhone, what you do is you go into your Beely settings and it says like devices and you can hit the I and say forget device. Like that's the equivalent of this erase bonding thing. Jim says, so that Stack Overflow answer started as a Beely enthusiast. I must say Beely is possibly worst way to use to transfer data. And a question response starting Y-O-Y. The reason to do it is because, Jim says I want them to be wrong because I'm looking to use an ESP as a log capture and want a way to get data out the ESP. I'd love you to say, nope, or is this is sort of right or something. Yeah, I think that's right. Like if you look at the way that I talked about this a little bit last week, but like AirDrop and the Android like share something, share nearby or whatever, they're both, they were kind of work in tandem with Bluetooth and Wi-Fi. So basically like if there's a shared Wi-Fi connection between the two devices, they'll use that instead of Beely. But I would be curious as to when that was posted as well. Because Beely 4, that was pretty true, but in Beely 5, they did a lot to make it allow a lot more data to go through. So I think it's less true now with Beely 5 than it was with Beely 4. And the argument to using Beely is that on the iPhone, for example, you don't need certifications to use Beely. So we can write an app that talks to a custom Beely service and not need to run it by Apple as a Mi-Fi device or whatever their like certification process is. Gareth points out like we have to use it as it's the lowest friction and cost for users. And that's it, right? It's not great, especially Bluetooth 4. I don't think it's that great for file transfer just because the data is so limited. But it's going to be like, the Beely spec is just getting faster and faster. And that includes in Beely 5. So I think it's less the case. If you have large files, you probably want to be able to do compression on each side, especially if you're doing logs, you probably want at least some bare minimum of compression. And that kind of crossed my mind as well as something we may want because like, Python files have a ton of white space in them. And so if you could do even run length encoding, you'd really be able to compress the file. And if you send it compressed, you're sending less data, which means it'll transfer faster. But yeah, I think, I don't think they're right. I think it's the way to go because that's the way to connect to things. Eric says, Beely may not be the best way to transfer data, but it is easier to support and use than Wi-Fi director AirDrop. Yeah, like it may not be the fastest, but it will be a way to transfer them. And it's funny, Trevor and I were talking that like, it's very surprising that no one's actually, Jim says the Stack Overflow answer is six years old. So yeah, yeah, the newer Beely, Beely 5 will be much better. We've talked about this, like the max transfer unit size, the MTU is larger. Beely 5 has these two other files, which the two megabits per second one means that you'll transfer twice. The default is one. So you'll transfer twice as fast. And there's also some things added in Beely 5 about like, if you do your max transfer unit, but then you can say like, oh, I have more and you can just kind of like, instead of waiting for the next connection interval, you can just continue if you like negotiated that with the other side. So yeah, I think look at that, you're doing exactly the right thing of like, I'm not sure exactly what versions, like there's 404142 and then five. I'm not sure when all of those things come in, but there are some good posts that I looked at a while ago about like Bluetooth data rates and stuff. Send a Python file and circuit Python board to receive an MPY, pretty good compression MPY across on the fly. Yeah, that's a good point. We could do MPY files. That would at least get rid of the white space. But then again, if we do generic compression, if like, we're not gonna just transfer Python files, so it might be better to actually do other, like even a basic like run length encoding or maybe GZIP or something that we can fit in little RAM. Okay, so what is this doing? So we have a while true loop here and this is to, this while true recovers from disconnections. So we have this giant try catch which is catching connection error. So connection error is thrown whenever we're trying to do something and the connection's gone away in the time, from the time that we checked whether we had it to when we're actually trying to do something. So what this does is it says while we are connected and any of the connections, sorry, this is, so the way that our API works is that you might actually have a connection when your code.py starts, especially because like, if we're doing this BLE workflow, you may have already connected your phone, right? So you may wanna use that connection yourself in addition to us using it. So this is saying for every connection in the list of connections, and there will be at least one thing when connected is there. However, between the time that you connect, read connected and you actually go through connections, you may have lost it. So you may actually raise an exception here as well. What you're doing is you can say, is this service available over this connection? And then for, so that's like, I'm connected to something that has the service that I want. So it says for connection, if the service is not in the connection, just we're done, that's not the one we care about. If we're not paired, then initiate pairing. And this is, pairing is the process of like, establishing an encrypted connection. But the factor says, do any USB-C hubs work with CircuitPython devices with CP as a USB host? CircuitPython does not do USB host currently, so no. Ooh, Eric says, I implemented BLE file transfer on iOS pre-air drops since it didn't need pairing or configuring Wi-Fi in weird way. BLE also works without any Wi-Fi infrastructure, so you can do it anywhere you have two BLE devices while camping in the wilderness, et cetera. Eric, you should look at my pull request and tell me if my protocol's okay or not. Gareth says, my first computer loaded files at around four kilobytes per minute from audio cassettes. Yeah, I mean, it's not that much faster. Okay, so basically all within the stuff that manages connections, if we have a connection we're like working, we do this series of like, write a file, read it back, print the contents, make a directory, list the directory, write two files, read one file back, list the directory, delete it, try to delete the directory, but it's not empty, so it should fail and so capture that. List the directory again, delete the file, delete the directory, list the directory, and then what I just added was a large 1k file, so it's a 1k file of random integers that we write and then we immediately read back and we compare the contents. And so that's just kind of, this is kind of like my testing for this test code, and then we do that every 20 seconds and it's been running for like an hour and a half now because I started it when I was, so it's actually going pretty well. So here's the case, if we're disconnected, how do we reconnect? So this code is the central role, so what we're doing is we're looking for, we're scanning for a provide services advertisement, which is there's a format for the bytes that get advertised and there's a standard kind of key within that that says I'm providing, hey, world, I provide a service and so this is saying like, if you find any of these provide services advertisements, it yields them back, so as we get, as we hear them, you'll get them in this loop and then what we can say is, oh, is one of the services that you provide the file transfer service, if not just go to the next one and if you do, then we try to connect to you, we connect and then break out of the scanning loop, stop the scan, go around the loop. Gustavo is asking, is it using JustWorks for pairing? It is currently, yes. Pairing is something that I want to look at improving later on, but for now we'll just do JustWorks. So yeah, it's JustWorks right now, which means there's no user interaction. There's other things like, I'm sure folks have seen it, where you're typing in the six digit code or comparing two six digit codes, for example. Love the Factory says, is it possible to do high quality audio from guitar to amp wireless without lag? You're always gonna have some lag? To know if it's possible, I would say look and see if there's a product that already does it. And if there is, then yeah, it's possible. Like, without lag, it's kind of hard to say. You have to define what lag is and then high quality audio, like generally audio is not that high of a bit rate, at least when you're comparing it to video. And David G says, you will destroy your flash. We've heard a lot of people say we're gonna just destroy flash with CircuitPython, but I've yet to actually see somebody who has, I have not seen a board stop working because the flash is actually broken. I think ultimately, I do, I lost my train of thought because I saw another question from Kassau. Will you destroy your flash? What was I gonna say? Oh, ultimately, you only have to worry about destroying your flash if you're actually logging to the flash. Like, if you're programmatically writing it, you're gonna write way more than you could initiate as yourself, as a human. Humans are just slow compared to computers. Kassau asked, why did you choose to encrypt pair by default? I think the reason I did that, I kind of like am expecting that I'm gonna want a pair. Stop, can you see her? She's being naughty and scratching. Do you wanna go out? Hold on, folks, I think she's ready to go out. Come on, I think the cleaner's all done. You can go into the funny smelling brawl. Go see mom. She's been locked in here with me all day. Oh, I'll destroy my flash with my test. Oh, so my test is not actually writing the flash. Sandra says, you should never send unencrypted data over there, also hid devices, I think always need it. Yeah, so in circuit by then, you have the option. Spook, do you wanna call it now too? One says, you mean you've been locked in there with her. Spook just got out of his bed being like, yay, she's gone. Okay, so that's what's running here. So I'll pull up my thing. So I've got some debug prints. So I'm doing six bytes at a time when I'm writing for my large file. And you'll see that I have this, like I'm just measuring, like using time.monitonic. And then I'm dividing how many bytes are going over, we're getting, the writes right now are getting 166 bytes per second, which is not very fast. But I've, I started optimizing the read. And so I'm doing 500 byte chunks. And I'm getting just over 3000 bytes a second. So that's pretty awesome. You know, like most, most the Python files will be smaller than that. And so, and that's my main concern, right? Is like, sorry, lady to ping me. She's pretty exhausted today too. So I didn't think she was gonna stop by. We'll see. But yeah, so the reads right now are getting this 3000 bytes per second rate. And the main thing that I was changing is like, this protocol has a, right, I think Lady is gonna stop by. Let me unmute. Ooh, some sticks. To one says, is the main application editing the Python code on the device? Exactly. So like, you may transfer a wave file, you may transfer an image, but like, I think you're only gonna do that once. What you're gonna iterate on is the Python code. And so it's like not the end of the world if it's like a little slow and we're resending a bunch of stuff. Garrett says, 3k a second is screaming fast. Yeah, so I think I can get the writes that fast too. Now, I'm not sure what the right rate of the flash itself will be. This, the other end of this, which is this other terminal window, is just saving it in RAM. So we're not having, we're not, the writes wouldn't be accounting for erase times. But yeah, sorry. We'll wrap up with Lady to here and I'll try to remember to take a time code. I did have to find, I found some bugs. So if you're following along with this, make sure you're using the latest circuit Python. And if that doesn't work, bug me. Ooh, ooh, great question. David says, will the iPhone app run, run circuit and update my libraries? Yeah, so I think we wanna do an app like that. I think the first app we'll do is probably just a generic like transfer a file because we've been kind of shocked that nobody's done this already. But I, so I think we'll do an app that's just like open file transfer spec for BLE. And then, and then later on what we'll do is we'll have a circuit Python specific app that I think will be more full featured. Let the factory says, what is the fastest way to parse in circuit Python for multi-processor communications? What are you parsing? Circuit Python doesn't do multi-processor stuff at all. It's only single processor. Pig nose. Ah, there we go. Can you hear me? Yes. But it's normal. Yeah, you can't see me. I popped you out and you can't see either of us. Why is that? I don't know. Turn off my camera. I could see you. Thank you, circles. I can, I could see you briefly. Okay. You want me to recall? Try turning your camera off and on again. Turn it off. And turn it on. Oh, no. I'm just a disembodied voice. You're a disembodied voice. I think people can hear you. Okay. I can. That's weird because I'm using the same. I mean, I don't really want to reboot. No, no, no, no. Here, I'll just do this. I have the pop out's not working but the pop in works just fine. Yeah. And I'm in streamer mode so people won't see. Okay. Everything. Although they can see my friends. Okay. I can go like this. All right, we're good. Okay, good enough. Hello, how are you? Get out of my work. Hello, I just thought I'd just pop in real fast. I don't have a ton of stuff. I've been playing more with user interface elements and stemmyqt and seesaw. We just sent Sam D09. So you've seen I've been, and Phil's been also leaking some of them onto the blog but basically, I started with making the four mechanical key to iSquared C converter and I was like, well, I should go to encoders and I made one with like four encoders and then I made one with a big slide pot. And then I made one today with four arcade button connectors and four arcade LED things. Oh neat. I can show, I can show. So the thing about that is like, I'm like, oh, that's not so hard. And then you remember like, oh, that's right. Arcade buttons require five volt power for the LEDs. Oh no. Yeah. So I had to put a little like little booster in there. So I don't know if I can see if this likes being shared. So I don't know if it's showing up or not. But let's see. So this is the back. This is the arcade button one? Four. Yeah. So these are, these are XH, JST, XH connectors and they're used, we have these like arcade quick connects and they're nice cause it's like, you know, they have spade connectors on the end and you can then just use whatever arcade buttons. And then there's the LED connection which goes through a FET, which goes through this boost converter to get it to five volts cause you might be powering it from three volts. Right. We're flexible on the three, it's three to five volt input. So it's like, okay, if you have three you're gonna have to boost it up a little bit to five. But then, you know, yeah, cause the red and yellow arcade buttons, they have the two LEDs in series, not parallel. So you need like five, you know, you need five volts really to get them going. You can't do 3.3 volts. The blue and white ones, ironically, because they're in parallel, it's like, you just need more current, but they are, and it can be driven from 3.3 volts. So either way, you know, and then also we have like various metal buttons and whatever, there's always buttons that are like, they really want five to six volts or so. So this is just got a little booster switch cap converter. I like switch cap converters because the inductors don't break and they're very inexpensive, like 20 cents. Interesting. Yeah, I've never done these stuff myself. Yeah, it's basically just, you know, it's like, this isn't battery powered. So I'm not, I don't care about efficiency. So it's the nice thing about switch cap is no matter what you give it, it'll give you the right thing on the output. You don't have to have any voltage divider or anything. It's just like, and you know, boost converters, like you can break them. They're sensitive to inductive spikes and all that good stuff. So you have to be a little bit careful with them in the layout where switch cap converters are just like, they totally are, you know, totally okay with pretty much anything you throw at them. So I did this one, sets the arcade buttons and LEDs. And then I did, I showed the key switch one. So then I did, this is the slider. Which brand of voltage booster is it? It's like the AP3602 or something. It's like, there's a couple generic, very generic. This is a slider so you can see on the back. Ooh, nice long slider. It's a long slider, but it was like, oh, 75 millimeter actually turns out to be exactly the right length. It's a little bit less than three inches. So it's like, okay, great. You get a full slider and I put four Neopixels underneath it because why not? And then this is, you know, you I scored C. And it's annoying because it's like, you can only fit one. If I didn't want the mounting holes, I could do two, but I think I want to, I'd rather keep the mounting holes and have it be one. So that's one. And you have all the same size, which I thought was kind of like cute. Like you could just, you could just tile them up next to each other. So I was wondering if you stacked four like on top, would you create a square? You know what I mean? Like if you have four sticks in a row, would it be as like, would it be square then? No, it would not be exactly square because for the arcade, so for the mechanical key switch one, if you're using kale sockets, you cannot have headers. I couldn't make it 0.75. I couldn't make exactly one by four, it's a little bit wider because the headers would interfere and I wanted to make sure that these could be soldered onto a breadboard or perforated for mechanical stability. And so there's no, there's no, like I tried like every which way and there's just like no way to rotate anything to make it so that it fits. Like these kale sockets are just, they take up all the space. So I could do that. But all the sticks are the same size, right? They're just, the size is established by the key switches. Yeah, so it's 0.8 by three inches. And if it was exactly, it would be 0.75 by three. But again, another thing is if it's 0.75, it means like, okay, to make the holes exactly 0.1 inch spacing, like they have to be either close to the edge or it's like, it basically solves everything by making it like 0.1, you know, 0.05 inch. So it would be, if you had four of them, it would be 3.2 tall and 3.0 wide. Yes, that's life. What I was trying to ask you about is whether you would do a vertical board because you have the pin headers in the middle for all of them. I was wondering if you do a vertical board with like four slots so that you could stack like four of them next to each other and have them all plugged into a backboard. Yeah, I could. I'm not sure if I would do that because I would actually kind of prefer people to use the Stem IQ T-Cable. And then you physically mount onto your front panel because you'll want to have different standoff heights possibly because not everything is gonna be the same. And there's no way around it. Like getting everything to be the height you want is just always a total different chaos factor. I'm not even sure people use multiple ones of these. I mean, maybe, maybe not. Yeah, it may be worth like stating, can you, because we have the mounting holes, can they go on the top side? Like, so you can. Yeah, they can go on either side. Right, so, because then you could do like different standoff lengths for the depth from the front panel that you want given whichever one it is, right? Yeah, you and you almost certainly will have to. Like, I just, I remember when we did the Dock's Box, like the panel height was actually way more difficult than expected to have a PCB and then have every, all the buttons and the potentiometers and the switches all lined up to be the right height. And actually, like, we almost like the last thing we thought of and then we got them were like, oh my God, every single, like the potentiometers were a bit too tall and then like the rotary coat, you know, like the switches were a bit too short and the button caps would find, like it was very hard. I'm actually really surprised we were able to find a combination of like all the things that would make it fit because like, it's not like a back panel where you can move components in and out. You can't move them up and down. Right. You know, on the back panel, it's like you have the PCB and then the components are on top and you can move them back and forth to fill the, to fit panel. But when they're soldered onto the PCB and the PCB is parallel to the front plate. Right. Like, you can't control the height. The heights are what the heights are. Right, right, right. So by... We didn't want to do panel mounting or things because it's a different nightmare. Yeah, interesting. This is a rotary encoder. So it's neat because it's like, it's, you know, a SEM-D09, but it can, you know, it's like on one hand, there's like four rotary encoders and Nia pencils. Oh my God, but on the other hand, it's like, well, I used to use a timer to do all of the rotary encoder math. I don't use pin interrupts. I just, I just have a ticker that goes off every, I don't know, like 10 milliseconds or something. And it checks all the pin states and it works like perfectly fine. Nice. So, so this is for rotary encoders. The rotary encoders are on the same, they're perfectly equally spaced. But if you look, this NeoPixel is not... Sorry, start over. I just, your screen wasn't showing because it decided the person talking would be. So now, now we can see. Really? Weird. I had to click watch stream. Okay. You just pause the preview. Okay, it's fine. So this LED, this LED is actually not perfectly aligned on the center cause it's a chip. I couldn't, there's like these holes and I couldn't fit the chip, but nobody's gonna notice. Yep. This way. So that's that. It'll shine through anyway. And then I also have, oh, well, am I still there? Yeah, you're good. I can't see your screen, but I can see it. How is your stream, we're just connecting. I'm like, what are you doing? So intense. I also got some like weird rotary nav button things. Oh, interesting. From cars? Or what do you think they're used in? No, no, it's like remember like the original iPod? It's a knock off of the original iPod. Okay. Let's see if I have this. They were originally made by, I don't know what name the company that showed up. Yeah. So it's, it's this middle part's a rotary encoder. It's like a scroll wheel that you can rotate it. Yeah, like a real, a real wheel. Yeah. No, yeah. I mean like the original iPod, not like the fancy iPod too. The original one, this is rotary mechanical, which means a break. Yeah. That's why they stopped doing it. And then it has four directional buttons and then the middle is a button too. So this was made by, I think CNK switches or something. And then they stopped making it and then Zippy was this company that also makes like mechanical stuff. They, they started making a clone of it. So I got some samples and they're like, they're not too bad. They're a couple of bucks so I can make a little like, this one doesn't have the I squared C connectors. No, it does. It has I squared C, you know, because rotary encoder plus, you know, mechanical switches, but I thought this would be funny. So you always want like, you know, everybody wants like an iPod, you know, interface or something, right? Right, right. So, so like, what was I started going into rotary? Cause I was looking for like, you know, RGB rotary encoders and like I found this by accident and I was like, cool, weird thing. I don't know if I have the switch itself. I don't, I think it's just like, I think I may have put it away. Yeah, I don't have it here. Oh, no, I do. I do. It's just super weird. So it looks like, it looks like, I'll stop sharing. Stop. How do I stop sharing? I clicked you, so you're big anyway. Oh yeah, okay, cool. Yeah. So it looks like this. Oh, there we go. So you can see, yeah, so this is, this part is rotary. I bet they have it in cars or something. Now, this is not, this is just like, I don't even know. Like nobody really uses these cause it's like, it's a mechanical nightmare. Like it gets dust in it. It stops working. People like, you know, people like are constantly messing with it. So this is not, I've never seen this in any product. It's definitely like, they looked at the iPod and they were thinking and then said, like Zippy, I don't know if you can see the Zippy logo on the back, but it does say Zippy. And so, so I thought like I'd make a little converter cause this is like, you know, it's, it's first off, it's got like this, you know, every pin is in like the worst location. And if you look at the data sheet, it's just like, the data sheet's like rotated 45 degrees. It's just such a nightmare. Oh no. Yeah, it's really funny. Like, like I actually had to like, take a screenshot, rotate it and like, you know, whatever, like image ready or whatever image software I had. So I could do the layout. It's not, the layout isn't even that bad. It's just like, it's really, like they purposely do it at 45 degrees because it's, it's like offset. Like this is on a grid, but the grid is offset from whatever. If you look at the data sheet and you look at the thing, you're like, oh, I understand, it's terrible. So anyways, so that's the, that's the things I'm working on. That's awesome. I don't know why I'm just, I'm sort of like getting interested in like doing, you know, the code for the seesaw encoder is from like 2019. Like we did, this was like one of the last things the Dean worked on before he went off to do synthesizer stuff. Right. And it was like, oh yeah, I should do it. And I kind of redid it. And he also did one for potentiometers. And I even have the PCB, this was like the, you know, basically a seesaw to potentiometer thing. It's so old that even has the original Stem-a connector. The big one. Which was a JST, yeah, it was a non-chain JST SHPH. So I have to revise that. But I never like, I never, it's been like sitting in my bin like, like, hi, why don't you make me? Like, I don't know. I mean, we're seeing so, we're seeing so many people doing the, the controller sorts of things that, and we're gonna, like somebody was trying to do a switch controller. So like maybe with the new USB stuff Dan's doing, like we'll be able to actually have custom profiles for interfacing with specific things. I know that like Bill had like a specific build for working with the Xbox adaptive controller as well. So I think, like it's gonna be neat. I think, I think this is something that's like, people understand and is like, the tech is just perfect for that. Like we're so strong in USB that it's, it's a great place to be as like custom interfaces. Yeah, I think also chips like, you know, the RP2040 are so in, you know, they're inexpensive enough that you can, you can have them be controllers for this stuff. And, you know, you're no longer dictated by the price of all the, like the chip itself isn't like the most expensive part, which is always a kind of a bummer for me. It's like, oh okay, you get a couple of buttons and switches, the chip is like $4 and like, okay, you know, that sucks like why, you know, why even bother anymore. So I think, I think it'd be fun. And then, you know, what we can do with C-Size because the chip, the SAM-D09 has identifier information inside of it, you can query a virus where it's C, like we can have something that will automatically say, like here's all the things I found connected. Right, right. You know, it can auto, it can auto detect them for you. So you can just plug them in. I'll say like, here's what you got. And here's an example, you know, JSON file for configuring what the keystrokes are for each element. It does that now? Or we could do it? We could do it, because the I-squared, you can send it a command to ask it what PID it is. Oh, I didn't realize we burned that in. Yeah, yeah, it's burned into the firmware. It's cool. It's part of the firmware thingy. So you can, well, at least it asks me to, so I'm assuming it's in there. And I'm sure it's in there. I just don't remember the command. It's in there. I just don't know what it is. So, you know, you can ask, you can tell it like, you know, because each one, you can set the address. You can't really predict what the I-squared C address is gonna be, so I would just actually scan everything. See if it responds to the C cell command. And if it does, just say like, okay, I found like the rotary encoder. I found like your, you know, your iPod wannabe thing. And so it's like, here's all the things that you've got connected. Nice. That's awesome. Yeah, I was thinking about that and I was asking you about this as well. Like I imagine a world where in like I-squared C is so universal and the way that we use it is always like, it's one device controlling a bunch of other devices. And I was thinking a lot about what if you inverted that and you had a lot of devices that were all controlling the same one instead. Which I think is kind of- Like a multi-master mode or? Yeah, yeah, yeah. So like- I don't know anything that really implements that. Like everyone talks, like it's always in the data sheet. Like if you're doing this, but I never, actually see it happen. Yeah, so I think- Nothing can happen. Right. I think that the interesting bit for me is that then you don't need to manage addresses necessarily because like all of the devices are talking to one address. But the trick is that you have to, you have to be able to detect collisions then. Right? Yeah, this is like the topic of many PhDs. Like I mean, you know, it's almost like you know, the joke of like engineers and network theory and like do the Byzantine general problem. And before you know it, you have like, it's like random retry, retry, retry, collision retry. And yeah, that's great. I am a huge fan of not creating new protocols. I absolutely hate creating protocols. Right. Because there's always so many exceptions to be that you have to deal with. Right. I'd rather have someone else deal with it. This is why I like I squared C and this is why I like SPI. And I tried it to hue closely to, you know, it's like when we saw wanting to add Wi-Fi to circuit Python and I was like, everyone was like, oh, let's take an ESP 266 and like you program it with weird firmware and you have like 80 commands. Right. And like I tried it and after like two weeks I just wanted to kill myself. It was so bad because it was not able to deal with, it was like as long as you were doing like exactly what the protocol is okay with, you'd be fine and the minute you tried to do anything else is it completely fell over and died. Right. Like, you know, it was like, you can connect to a site and you can get one piece of data and then you can disconnect. It's like, what if you want to do MQTT? Absolutely not like death. And so that's when I was like, okay, I'm going to go use like, you know, Nina firmware, which was like a protocol that Arduino developed. And I was like, they did it, they figured it out. I'm going to just use that. Right. I do not like to invent. I'm not a fan. I do think that's, I do think it's funny that you're saying that on a stream where I was talking about inventing a protocol. I don't want to do it, you're doing it. For the file transfer stuff. That's why I said, I remember I suggested like, here's all these other places that have similar protocols, maybe. Yeah. R-Sync came out today that I had like that. You're doing a high level, you're doing a high level protocol though, which is like, at least you're doing high level. Right. You get to the low level. Reliability stuff, yeah. Like don't reinvent one wire. Like I've seen, everyone is always like, like I've seen so many people try to invent iSquirtZ without addressing. And it's like such a, it's such a good idea that has never worked. Right. I've never seen it work. You can do one wire if you want or you can do iSquirtZ. There is no thing in the middle that I've seen that works. And with one wire, it's really slow. And with iSquirtZ, you get like, it's kind of in between. Like, yes, you have addressing, you know, but there's workarounds. You know, for the sea styles, we have lots of like iSquirtZ jumpers that you can solder or you can cut. I think that you just have to live with it. Would you would you consider doing actually like a dip switch for it or are they just a pain? I was thinking about dip switches. Because then it's solder free, right? Yeah, instead, what I'm going to do is I'm going to have the jumpers be something you cut instead of solder. That makes sense. I think I'd rather do that than because I'll tell you that the dip structure is kind of big. And it's like it starts actually becoming mechanically on some of the boards. Like, if you look, you're like, oh, you really don't have it. Like there's the mounting holes for, like, the this mechanical switches and the socket and then the road encoder. Like, you're like, oh, there's not a lot going on this board. It's actually all of those holes and spots and mechanical. It's like, actually, it's very, it's very Swiss cheese. It's actually quite hard to route around it and and put something large on the back. So I think I think about that today and that's why on the board that if you look at the arcade board, I have the solder jumpers are cuttable. Nice. Which is fine because I own the firmware. So it's like, I have a little flag now. It's like, invert, you know, invert them. And then when you cut them, they they turn on and that's like super easy to do. So is there a space for a silk screen blank where you could write the address of the device on it in the same way that we did on like the back of the circuit playground? Yeah, sure. I think that would be so I'll say something very unpopular, though, I actually don't think a lot of people are going to combine multiple ones of the same board. I know, will you have different address defaults for each one? Yeah, they'll be spaced out. We spaced out every, you know, eight, eight bits. So you don't mean you'll collide with like your, you know, celerometer, but like they won't collide with each other. But but I will be on it. I actually don't think that there's going to be a lot of. There's I don't think people are going to take like four of these like one person will. And that person is like they have some desires and needs that will, you know, accommodate. And I like having multiple address jumpers because you do sometimes have collisions and I like to have options and it's free. Right. I'm a big big fan of like free things on hardware, you know, jumpers, silk screens, right, mounting holes. You know, I mean, these cost nothing. Right. Labeling GPIO pin numbers, you know, whatever, like these are things that are free, you know. Yeah, these are like super free. But but it also don't take any, you know, there's no mechanical problems or pick and place issues. Right. So I think I think I'll make sure that you can use it. But I I'll say I really don't. Whenever we have things that have address. Changeable addresses, I really see people just use one. It's quite rare. Yeah, that's another reason why this whole like I squared C and having non addressable I squared C is like, right. And I think I'm suspicious of it. When I picked your brain about it, I think it was on Monday. You know, I asked you, like, are you able to do what you want just by doing this like scan of all the addresses? And you were like, yeah, it's fine. Like it's perfectly responsive. Like there's no reason to get more complicated. I squared C is so fast compared to humans. Right. You're like, what if you have eight? And I'm just like, it'll be two orders of magnitude faster than any human response. Right. Like we're we're like, we're like, wow, I squared T is so slow at 100 kilohertz. Humans don't function at less than like, you know, 10 hertz. Really, like we were just we're just incredibly like we have all these like backups, you know, we have like a lot of like DMA going on. But like we we, you know, for for functional, you press a button, you get a response. It's like, I think I said, like this is one 100 million milliseconds. Yeah, plenty. Yeah. Even you want that or you want like 10 to 20. But but the bouncing of switches is 10 milliseconds. Yeah. Right. So it's like you're never going to get any better than that anyways. And so like when you think of what 10 milliseconds is for I squared C transfers, it's perfectly fine. Totally. All right. Well, I'm going to let you go. I'm going to go through any questions we had. And then I'm going to wrap up because we've been going for two hours here. I know. But thank you for stopping by. I think I think the sticks are going to be really cool. I'm excited to get my hands on some of those. Yeah. Yeah, I think I'm just going to. I'm just going to like keep me. I'm just I'm having fun. Another thing is, you know, with with part shortages, one thing that's not having a part charge problem is mechanical things. So it's like if I have the same nine every other component I can get, you know, like, I'm not going to start a new S.T.M. 32 project right now, like, you know, I die. Right. You know, for the NXP thing, it's like I went and bought the chips because like, well, I mean, you know, I went to bought them for the design was done because like there's not going to be chips anymore. Right. But I wouldn't I wouldn't start a new project right now with with anything that was I mean, I like doing these mechanical things because I feel confident that like plastic isn't, you know, we have plastic in this universe, right? It's not dictated by whether TSMC is like overbooked. How is how is the NRA 52A40 supply as somebody who's working on BLE right now? We we book them really well in advance because it's it's something that we use. So I think we're actually good. I think our next shipment in July and I think we're OK. Like we we have ordered well in advance, but it's like something new. If we don't already have it booked, I'm like, I want to be able to get it. Right, right. Which is like when I like when me or Dan or Jeff get sucked into doing a new platform, like that's that those things line up. So now is a good time for us to like Dan's going to do USB stuff, right? Like it's a good time for us to do non-platform work. And also, there's some chips that are doing fine, like expressive chips. They're doing great. I have no problem. Like they're all they're like they've never said anything like we won't be able to supply you. They're like, yeah, I tell us just like tell us what you're going to use for the year. But like whatever, right, like never, never heard any problems. And then we looked over the ESP 32 C6 press release that they released today. More and then you can't get some easy. You can't get NXPs. You can't get S.T.M.s. S.T.M.s. Nebatons. You can't get that. Like you can't get a lot of stuff. You can get RP 2040s. I mean, I can. You can't. But I can. Yeah, it's hard to know it's getting some too. Yeah, everyone's getting a couple of years. So we know, I think we just got 14,000 chips or something, which lasts just like, you know, not that long. A few days a month. Yeah. Right. All right. Thank you, everybody. I want to. All right. Thank you. Thank you, Lady Aida. Have a great weekend. Me and my go-to-read coder. Bye. All right, folks. If you have more questions for Lady Aida, she'll be available on Sunday probably for Descalady Aida and also Ask an Engineer on Wednesday or other places that you can chat. I was not watching the live broadcast chat on Discord. So my plan is just I'm going to go over. I think I saw. Everything on YouTube. Oh, Eric asked, could you use USB host stuff in Circuit by Thunder to talk to the upcoming things like this? So Circuit by Thunder doesn't have a USB host, but the sticks that we were talking about will be available. They're Stema QT, so you would be able to talk to those. And then you would use Circuit by Thunder to it talk USB device up to your to your computer. See software, the RP 2040. I don't think it's going to be quite as cheap as the San Diego nine. I think the chip itself is probably about the same. Multiple sliders for mixing neopixels. Or the itsy-bitsies out of stock. Did they actually go out of stock and pulling it up? No, they're in stock still. Itsy-bitsie, RP 2040s are in stock, so. Okay, let's let me look through live broadcast chat. We answered which voltage booster and if the sticks are the same size. Oh, love the factory asks, is there a Stema connector for board to board mating without a cable? I don't believe so. The boards that the stick boards also have pin headers that are down. So you could do like a, backing PCB instead. Yeah, you can use PCB, David G points out, you can use PCBs to stabilize the holes. Well, the factory asks, is effort still going with the stepper control with trinamic chips with encoder feedback? I don't know of any work that's being done on those right now. Rotary controller might work for a tempest knockoff video game is commodity seven bit midi encoders in drum pads working in circuit Python. That I don't know. Seven bit midi encoders and drum pads. You should post that. I'm curious what those chips are. I'm always interested about chips that are in a lot of stuff, reinvent one wire over eight to increase the bandwidth. Tiger Bright says almost every project I want to do wants to use multiple of the same board. So you'll be able to use eight of the sticks together. You'll just have to do the jumper cutting to give different addresses. But I think like the seesaw chip is set to do like three bits of address, which is eight different numbers. Eight encoders and midi USB drums for $50 ish. So more ice grid C multiplexers. Love the factory asks, when will reverse neopixels be on sale? Sorry, I had to let her go. She was already, she said she would do 15 minutes and I think it was like more like 35. So her and I can talk. So ask either deskablaida or ask an engineer or you can email support and ask. Watch the screen. You have a program running there that's printing a lot of zeros. That's the, that's the neopixel test. The Bealeigh test is still, or not neopixel test. The Bealeigh test is still going in the background. Oh no. Oh, the QDPI 2040s went out of stock. Hi Jeff. To one says the RP 2040 itself is cheap but I'm not sure if we could talk publicly about pricing yet. I don't think you can. It's like not on Digi-Key yet. But I think it's similar to a San Diego nine except a San Diego nine is very simple. Like if you've ever put a San Diego 21 on something it's like one capacitor. It's a, and no crystal. Like, and where you need like eight capacitors and a crystal and all that sort of stuff for an RP 2040. So this is Spook, the other cat. He's in the bed now. Now that it wins out. Okay folks, let's call it a day. It's been a pleasure. Thanks again for this whole year of deep dives. I have no plans of stopping doing it. I enjoyed a lot. I know I've gotten a lot of positive feedback as well. So if you know somebody that would like to watch this please share it with them. If you wanna support me, just support Adafruit. They pay me really well to do all this stuff. So go to Adafruit.com. Itsy bitsy RP 2040s are still in stock. So if you haven't gotten an RP 2040 yet, check that out. If you wanna keep chatting with this community that and if you're on like the YouTube or whatever you can go to the URL adafru.it slash discord to join the discord server. That's where we're chatting all week long. And I think that's it. Thank you all so much again. And I will see you next week. I'll be on the discords and working on this VLE stuff. If you have thoughts, please please reply on the PR. So in the the VLE file transfer repo ping me on discord if you need a link. I'd love to hear any thoughts folks have but I think 3K a second is gonna be about what we can get and that's gonna be perfectly fine. Not spectacular but perfectly fine and that's all I'm going for. So with that I will switch to cat cam and give Spook a couple pets and then call it. Kibbing. Want some pets? All right. Have a great weekend everyone.