 If you're watching this video ask in the back, make sure to check the comments for time codes, this is going to be like 2 hours long, so if you want to see individual bits of it, click the link in the description and click the time codes to work for the part of it. Let's just stop my... Don't tear that piece up. I haven't put anything in it specifically. It looks... I see it on my screen. It sounds like it's not coming here. You're talking about the game. Hello, hello, hello, hello, hello, hello, hello. That's like all the way up. Sorry. Is that better? I don't know why it's so low. Other audio setting. Playback device. Louder. Much better. Okay, well it's... I don't know why. I might have updated OBS, but that's very weird. It's like super live, but I don't know why it was so low. Like I can see the slider and I'm not sure why that's the case. But thank you for letting me know and that is why we start early. Um, DCD, is it better on Twitch now? It's like... it's very... I cranked the gain on the back of the mic all the way up. I don't know why. I mean, maybe I should unplug it and re-plug it in. I don't know. It's working now. I don't want to mess it up. Mr. Certainly, were you able to turn it down now? Hi, Anthony. Hi, Johnny. Hi, Armando. Hi, Randy. Hi, Unexpected Maker. Hi, David. Hi, Gerson. Yeah, weird. I'm at 90% as well. I mean, on my OBS it doesn't look... It still looks a little low, but... Still a little low. Let me unplug the mic and let's... I don't want to blast you. That's the problem. But this is really hot. I know that. Sorry for the... Okay, now you're hearing me somehow other than... Now it's really low. Test, test, test, test, test. Is that better? Better, better? Better, better, better? I'm getting into the yellow now. Much, much better. I turned it all the way up. Anthony says, too hot. That looks right on my end. I can crank it here just a smidge. Test, test, test, test, test, test, test, test, test. Randall says a bit hot. It's flat-topping. I don't see it here, but it might be... I can crank it down just a smidge here. No, not too hot. All right, let's go with that. It was definitely like on the input, it was a little low. I don't know. I don't know how it got changed. I did do... No, I haven't done anything. Hi, Dee. It's just fine. Thank you. Sounds normal now. 45 people turning up and down their volume. Yeah. Sorry about that, folks. Thank you for bearing with me. Lots of new folks. Let me say hi. David says it's minus 17 Fahrenheit with wind chill in Wisconsin. I remember visiting my mom's from Wisconsin originally, and I definitely remember it being pretty chilly there on Christmas that we went. It was minus 30. It was cold. Hi, Bruce. Hi, Mark. Hi, David. Hi, Keith. I sound normal now. Hi, Alvaro. I have Phil Moyers in the chat, I think. And I just wanted to say, remember when we were looking back at Circuit Python 2020s or even 2019s, Phil was like, Scott should do a deep dive and answer questions. Well, I think it's funny that we have that now. Greetings from Mars. Hi, Brandon. Hey, Steve. Hi, David Buchanan. Hi, Randall. Hi, Rodrigo. Anthony. Johnny, Jason, Dee. Lots of folks. Thank you all for joining me. Sorry for the audio problems. I'm glad we got it sorted. So let's do housekeeping. Mr. certainly says, aside from audio troubles, how are you doing, Tanya? How's your Friday been? Good. I'm like so close to getting I2S audio working. So I think that's something we'll do today. Thank you, David. And thank you, Daniel. Now is one of the rare times we do actually have a little, a little snow on the ground here in Seattle. Good morning, Mike, which is kind of exciting. We're supposed to get a bunch more tonight. So we'll see how that goes. But we don't have any plans. My audio, the video looks okay from here. Would just be my luck. Good. Okay, cool. All right, let's do housekeeping so we can get the show on the road. Daniel says audio and videos. Okay. Thank you. Thank you. Thank you. All right. And look, Vin. This is the other cat. She's actually in the cat cam right now. That's Vin. She usually is the one that gets up and like leaves because she doesn't like when I talk, but she's choosing to be in here with me when I'm talking because there's cleaners outside the door and they're scared of vacuums. So this is her choice today. Okay. 10 minutes in, we'll do housekeeping, which is kind of standard for us. So I'll take a tanker. Hello, everybody. My name is Scott and I work for Adafruit on Circuit Python. If you don't know what those are, Adafruit is an open source software and hardware company based out of New York City. I work remotely for them, so I'm actually in Seattle. But they do lots and lots of cool open source stuff. You know, the focus of the company is enabling folks to use electronics to do the projects that they like. And we create learn guides to teach people how to do different things with electronics. So check out learn.adafruit.com for those. If you want to support me and support Adafruit, go to adafruit.com and buy some cool stuff there. You'll definitely, we'll talk about some of the stuff you can get from Adafruit later. Circuit Python is a beginner-friendly version of Python designed for microcontrollers, which are these little tiny computers, and I'll show this again. Let's go into product showcase. Oh, I was in product showcase. This is an example of a microcontroller. There's chip in the middle here. It's a 125 megahertz processor with 264 kilobytes of RAM. And these boards all, they go for, oh, it's upside down. They go for $4 a piece, which is really cool. So it's a great way to get started with programming and Circuit Python is our platform to make it as easy as possible. So if you haven't checked out Circuit Python, I highly recommend it. And yeah, I love this camera. I was just, Sean Hemel is wanting to replace Webcam. I was like, dude, I love this camera. So I just clicked a button. Now it's like an eye tracking mode. Also, is that a lawyer? She's not a lawyer. She's just a regular cat. There's a bug on my cat's head. That's her coloring. She's got that little splotch. And then her brother has like a bigger splotch as well. Speaking of cats, let's go out in order. The other cat, Spook, is down here in his crate, again hiding from the cleaners. He is epileptic, so he does have seizures from time to time. He's been doing really good though, so I don't expect it to happen. So just if I'm on screen but not communicating, that's what's happening. I'm just watching him with that. Oh, two great questions. Hold your questions. Let me finish housekeeping. We'll get questions after that. So let me finish up. If you want to chat with me and a lot of others throughout the week, please join the Adafruit Discord server by going to adafru.it-slash-discord. Two cats for the count. And they're both in here. Last up, this is a deep dive. It happens every week on Fridays normally at 2 p.m. Pacific because I'm in Seattle. It's occasionally shifted to Thursdays at 2 p.m. if I want to have Friday to myself. And typically it goes for two hours or more. So we've got a couple of questions already, which is great. And we'll cover questions until we want. Oh, next week is on Friday. And then also there's a chance Lady Aida will stop by later too. She did last week and she was asking, like, hey, can I stop by this week as well? And I was like, of course. So we'll probably do that in an hour or so. Okay. So there's a couple of questions. Let's start with those. I also, I do have some projects I want to show, but let's do questions first. So the first question is, well, is the cat a lawyer? If you don't, if you don't get the reference, there's this awesome meme of a cat with a cat, or a lawyer with a cat filter in a zoom call. So it's quite hilarious. But no, Vin is not a lawyer. She is named after a main character in a book though. That's one question. David says, So Seattle was born there and lived there until nine years old in the fifties. fond memories. Awesome. My dad was around, is around that age too. Okay. So Gerson, I hope I'm saying that right says, does the Pi Pico have Wi-Fi? Let me switch to the desktop. The answer is no. But if you've used Adafruit stuff before, let me get the window the right size here. I have a bit of a different keyboard and mouse setup that I will show in a bit. But if you just look for airlift here, so airlift uses an external processor here. And this setup will, it should work with the Pi Pico. So if you get one of these boards, you connect this by and there's, I think is it under assembly? So here's how to solder it down. And then if you want Wi-Fi and circuit Python, here's how you hook it up. You'll of course have to change this pin mapping, but the library itself should work the same. So the Pi Pico itself does not have Wi-Fi, but you can use an airlift board from Adafruit as a co-processor to provide Wi-Fi to a Pi Pico. And I'm a little bit behind. I see your question, but we'll do Randy's first. And let's make sure that we're... Oh, thank you, David. David is awesome in doing notes, so thank you to David for that. The next question is, when is QtPi in the Feather 2040 going to be released? The question, it's a matter of when Adafruit gets chips. Officially, they've said Q2, but you never know when you're going to get them in the mail. So they will be released as soon as we can make them. I'm one of the lucky folks. I have a prototype Feather 2040 here, and it's actually very, very useful. So it's going to be cool. And I suspect that Lady, she wanted to drop by to show the QtPi as well. So we can ask again later about that too. Okay, Brandon says, did I miss... Did I miss anything in the Discord chat? I don't think so. Oh, Bruce says, oh yes, I saw something about moving to 4.3 for the IDF. Is that an actual thing or a hope? If somebody does it, then we could do it. I'm not going to take it on right now. So Brandon says, what's the advantage slash disadvantage of using a Pico over an Arduino? And this is where a distinction is really important, is that if you're talking about the hardware itself, right, so take like this for example. So here's the Pico, and I'll do product showcase again, because I like it. So here's the Pico, and then here's... It's not an Arduino, but it is an Arduino Uno shaped metro. Metro is the Adafruit brand name for something that's Arduino shaped. I don't think this board has a lot of advantages. I mean, it's very inexpensive, so it's $4. So if cost matters to you, that's a great place to start. But... And if you have a choice between this and like an Arduino Uno, the Arduino Unos are 8-bit microcontrollers, which means that they don't run as much software. So they won't run MicroPython or CircuitPython. So you want to make sure and get... If you're looking at a particular Arduino board, you want to go for... You want to go for something that has a 32-bit microcontroller like the Arduino Zero does. Yeah, so you have to make sure and get a 32-bit one. The nice thing about a Pico as well, and the RP2040, which is the chip, is that it's got 256K RAM or so. So if you do use it for Python, there's a lot of RAM that you can use for it. So, Brandon, if you have more specific questions, let me know. There is... Gareth also says, Pico versus the ESP32 is more interesting battle. Yeah, I think... I was thinking about this. I think, you know, we support the ESP32-S2, which I have somewhere here. I mean, it's just another board, right? The ESP32-S2 is interesting because it has native USB compared to previous ESPs. And it has native Wi-Fi. So if you want to do something that's connected and has native Wi-Fi, ESP32-S2 is the way to go. But it's more expensive than the Pico. And the Pico is going to be more real-time. So if what you want to do is shuffle around bits and bytes and stuff, like the Pico is actually really, really good at that. It's only where you start doing like floating point, like decimal math, that it gets a little bit like out of its element. So I hope I answered that over the ESP32 line. Well, so the other thing to consider about, especially if you're a newbie to microcontrollers is the documentation that comes with something. So the ESP32 datasheet is getting better and better. But I felt like when I got the first draft of the RP2040 datasheet, it was better than ESP. So I think, and there's a lot of tutorials and stuff already written for the Pico. So if you're getting started, the RP2040 has a ton of documentation and that can't be beat. And that can't be... Like a lot of people say like, oh, ESP32s are as inexpensive as a Pico, but they're usually purchased from a supplier that doesn't support them and doesn't provide documentation about how to use them. So you have to think about that as well. Okay, let's see. Next up, a question from Johnny says, have you seen the little VGL graphics library? They have MicroPython support. I have seen it. I'm open to doing bindings to it, but the way that they did the MicroPython bindings, they don't like because they basically just exposed the C functions directly and they didn't do any work to Pythonify it, like using objects and things like that. So I'm not a huge fan of their MicroPython support. I think it's done in a fork as well. I don't think it's in upstream MicroPython, but they are doing some cool stuff. And there's also like, there's also really cool some work that folks in our CircuitPython community are doing to do more widget-like stuff. So KMatch98, FOMI guy, and there's, I feel like there's like three folks that are doing it, but there's some really cool graphics work already happening in CircuitPython as well. So, yeah, little VGL is really cool, but it's a lot of work to create a good API on the Python side and then all the tutorials and stuff to go along with it. Davey says, Is it fair to say that unlike Raspberry Pi, you always have a graceful shutdown with unexpected power loss in CircuitPython? I don't think that's fair to say no. I think, you know, CircuitPython does reads and writes to the file system, and if you get interrupted, that could still be a problem. I think it's, maybe it's less likely because the core code itself is not writing to it. But no, I don't think it's that, quite that clear cut. From Discord, Naradoc asks, Do we need chip documentation when we have CircuitPython? Well, you're not going to get a good CircuitPython implementation without good chip documentation. Let me tell you that. But yeah, like if we've done the work to make things, unexpected maker, I haven't seen the editor, so link me, and I'll pull it up and take a look. Oh yeah, TG Techie, thank you. J for seeing. It has also been doing a lot of graphic stuff for a while now. Todd points out that Arduino is also coming out with an RP2040-based board soon. So RP2040 is the chip on the board, and then the board itself is called the Pico. SlinkyTangle says, Can I implement a high-speed counter in PIO? Cycle-accurate at 50 MHz would be fantastic and could it replace hardware or FPGA currently required in our lab? If you're just counting pulses, I think so? I was actually just thinking about this because I want to do some run-length encoding stuff. You certainly can run, like you'd probably need two instructions, right? Like wait for an edge and then increment. So if we just look at... This is the data sheet here that I've got. I think... Like it's... Counting is a little weird. Like you certainly... It depends on how... I don't know exactly what you're counting. You can sample at 50 MHz for sure, but if you're getting one pulse every 50 MHz it might be a bit more of a trick. Yeah, Mark says, I think the pulse at 50 MHz is possible but it's not an exact divisor of 125 so there will be some jitter. The divisor is fractional though, so I think you could actually maybe do it. It's certainly worth a look, but yeah, you can only count down. You can't... I don't think you can count up. There's not really... a lot of math in it. But the other thing to think about is that you could... The other thing to think about is there's two Cortex M0 cores. So you can always just use a Cortex M0 doing just what you need. And it has single cycle access to the IO. Okay. WinterMute says, you're brilliant. Mark, thank you. A lot of this is just not my work. Okay. Let's look at this link. And remember, I'm a little backlogged on... Whoa. I haven't seen this video. Is the audio worth it? I know you can't hear the audio. I think some folks were thinking about doing this as well. It's a matter of what widgets you have and all that. Yeah. LVGL is doing some really cool stuff. There's just music playing. So I... There's no audio or anything. Yeah, that looks neat. Like... I don't know. To some degree, it's like we can only do so much. My interests... My personal interests changes from different things anyway. So that's a bit more of a trick. Um... Yeah. I would love to see all of this stuff done. I wish I could snap my fingers and just have everything done. Um... Yeah. I'm not against it. I just play it at 1.5. Is it worth it? What is it? Oh, for like... I don't know how to change the settings. Yeah, yeah. It reminds me of the cute stuff as well. Ah, Garrett says, One minute summary of what LVGL is, please. It's a C library for microcontrollers that does embedded UIs. Yep. Yeah, sorry. Thank you. I should have... I should have started with that. Um... Okay. I'm behind... Hello, person whose name is in Arabic. Sorry, I can't read your name. That's my failure, not yours. Um... David asked what will be the audio frequency resolution and accuracy, for example, generate a 167.9 Hz tone in Pico. So, um... I haven't run the numbers. So, you're doing a 125 MHz base clock. And then, depending on if you're doing PWM or I2S, you have, like, a divisor that gets you down to your sample rate. Um... And that'll dictate what your sample rate is and then you can overlay, you know, whatever sine wave on top of that sample rate. Um, I know with I2S, well, I think with PWM I was able to do 10-bit 44.1 kHz stuff. The tone is more achievable than 50 MHz. Yeah, we're going to do audio stuff later. Um... And I do have a demo... although I've changed it. I had a demo of the PWM audio stuff playing. Um, let's keep doing questions and then we'll do some stuff and then Lady Aida might drop in. Uh, Rady asks, where does Thaunee store libs in MicroPython? So, Thaunee is an IDE that, um, the Raspberry Pi Foundation is having everybody in MicroPython. Um, when you copy file libs over, they get stored to the internal file system in MicroPython. Uh, and they're using little FS. So, just like CircuitPython where we show up as a drive because we have a file system, they have a file system as well. They just don't, uh, show you. Like they don't make it accessible over USB. Um, so it's stored on the flash. Uh, David says, he was buying a Pico online at the MicroCenter. He mentioned he was making a 3D printer robot called PiPot or Poppy. Anybody heard of that? I have not, um, but we have a wide audience here, so hopefully somebody has. Um, I saw Chris on, what is that? Uh, Twitter asks keyboard for the blind. Uh, blind keyboard. Oh, yeah, so, uh, Segway. I wanna, I have this set up and thank you, thank you David for taking notes. Um, I wanted to show this set up that I've got. So I, I made my overhead, my overhead's pointing to my hands. And so, what, what I have actually is I've got, I did this, what, yesterday, the day before, is that I have it so that if I have my hand on my trackball, the lighting of the keyboard changes and the right hand becomes mouse clicks. Um, so now if I do like that, that's a right click. I can't see the desktop, but if I do this, I guess. So, you can't see me move, but, um, I can drag, maybe? Yeah, it's kind of hard to see. Um, but, so all the mouse buttons are now on the right-hand side, and I have mouse wheel scroll up and down as well. Um, and so what I, the way that I'm doing it is, um, the problem I had was I got a new trackball and its buttons are like way on the side and I was using my pinky finger to press the button and my hand just from one day was starting to get sore from doing that. So, I had had this idea a long time, but it was, uh, kind of urgent, so I finally did it. So, uh, what, what we have here is this is a, uh, an Adafruit board, the VCNL 4040, uh, which is a, a proximity sensor, so it's being read just by, so I have it running here, which is a, this is a SparkFun quick feather board, and then there's a Feather M0 Express underneath. Um, so it's just like 20 lines of circuit python that's reading the proximity and sending a signal out, so the signal goes out, offscreen, comes back. What this is, is this is an audit, or an analog mux, so it's basically like pretending to close the context on a switch. Um, and then these two wires here, I don't know how, well, wait, let me start over. Well, not start over. Okay. So, Feather, Stema, this is the doing, it's converting like a proximity value to a signal, the signal runs out and around and here, this is the analog mux, and then the analog mux connects these two wires, they go into the keyboard here, through some screw holes that I took the screws out of, and they essentially press this key here, which is, this is a keyboardio, and it has an LED key, so I'm pretending to press the LED key, and I've configured it to be in a mouse mode when that happens. So, I turned off all the LEDs on the left-hand side, because like I shouldn't be able to press it because my hand should be over here, so it doesn't do any, well, it will do something, but I don't use it. And then on my right-hand side, I can do like left-click, middle-click, right-click, scroll up-down, browser back, forward, that sort of stuff. So, I've just switched to that, and you can see it's, my threshold's just a smidge off, like, if my hand's too curved, it doesn't detect it, but if I go down, then it does, so I think, like, there's a number that I have to just tune just a little bit. But the nice thing is, is that because it shows via the LEDs, I can tell whether it's paying attention to me or not. So, yeah, I'm pretty happy with it. It means my right-hand actually stays here a lot, a lot more, which is a good thing, I think. So, that's the keyboard stuff. Otherwise, I think we're caught up on questions. If anybody has any other questions, we've got about 30 minutes until I think Lady Aida will duck in. What else was I thinking? So, audio. We could talk audio. Oh, you know, I do have something to show. Do you need audio feedback on proximity? I usually, yeah, thank you, Alvaro. That's exactly what I was thinking. No, I can usually catch the LEDs out of my the corner of my eye. Oh, David Glad asked, what is this clue doing here? Well, this clue is the clue running David's code to do timestamps that I've been really bad about. But I do have that there in case I'm doing timestamps. So, thank you, David, as well. Okay, let me switch to the camera again and then I'll, I got a request because somebody knew that I got this. So, when Espressif announced that the ESP32C3 was going to be available or related to some folks, I emailed them and got on their list. Yeah, another David's doing the timestamps, yep. Your timestamps are five minutes off? Oh, so, let me look. I'm at 3551. This timer is maybe a second ahead of me. Yeah, Garrett says, is this the RISC-5-1? It is the RISC-5-1. Yep. So, this is, I think they're gearing this to be an ESP 8266 replacement. So, I'll open it up. So, it slid out and it came like that. And then you pull the tab to take it out and I will just show this. It looks like all ESP boards really. It doesn't have native USB. So, I believe this board actually has a USB to serial connection. And then you can see that there's a module there. So, that's just the dev board they sent. I just got this one. It is really neat to see circuit, or not circuit by RISC-5 as a core. I have not played around with this at all myself, and in fact I probably won't anytime soon. How does it hold on a breadboard? I have a breadboard. Yeah, it leaves one row on each side. I think, yeah. And did I have a solid here? Yeah, it looks like it's one row it's one row less wide than the cell. So, that does mean that you'd get one one row on each side, which is nice. Gareth says, what about the circuit Python potential? It's a long-term thing. It's not going to be done in the short-term. The thing is, is it doesn't have native USB. So, it wouldn't be able to... This one's a weird one. It doesn't have full native USB. What it has is the production version will have a built-in USB to JTAG and Serial Converter. It will not have a generic USB peripheral. And so, that means that we wouldn't be able to do the circuit PyDrive on it, which is why it's not high on my list. In the longer-term I talked about this before. I really want to do BLE file sharing like saving and loading files over BLE and also the Serial Output over BLE. So, that is higher on my list. And then once we have that we'd be able to support boards that don't have native USB if they have Bluetooth. And this not just Bluetooth, but BLE and this has BLE. So, long-term yes, we could potentially get this. We could also get the older ESP32, which I think a lot of people would be excited about. We could get the MicroBit V2 which I still have on my desk here. It would be cool because it since I made product mode still. The chip on here has native USB but they didn't connect it up. Which is a weird decision in my book. But it would be nice to use. Um, David G says if we get BLE workflow then would the old ESP32 be interesting for a circuit pipeline again? Yes, I think so. Yeah, I mean there's so many of those ESP32s. The question really is whether whether I lost my turn of thought because I was thinking about risk 5. Oh, with ESP32 whether the ESP32 regular is actually going to be as popular as it is now by the time that we get to it, right? Because there are these other chips coming out that are more interesting. Um, Phil Moyer asks would it be easier to use a different risk 5 dev board for porting circuit python? Um, and Alvaro points out that there are now risk 32 bit risk 5 chips with native USB. So the thing is, is that risk 5 itself from a circuit python standpoint is not very interesting. And the reason that it's not very interesting is because it's, risk 5 is very, very cool overall because it's a standard API for a CPU. And that means that all of the software tooling on top of that can be the same. Um, but when we do ports for circuit python we always already have like the compiler tool chain and all of that stuff. So risk 5 in of itself is not that interesting to us because the effort we put into porting is not due to the CPU it's due to all of the peripherals around the CPU. Um, and so like the C3 is probably not that bad of a port because they have the ESP IDF and we just use that. And we've kind of ported to the IDF already. Um, but for these other risk 5 that folks are talking about like it's the peripherals that are the hard part it's not the, not the CPU. Um, almost always. It's not the CPU. Like same with the, same with the Raz, the Pico right is like all the effort's been in like, okay given these peripherals how do I implement implement PWMIO, how do I implement pulse IO, how do I do rotary IO how do I do audio like like that has nothing to do like we already have a Cortex M0 and the same D21 like we had that ages ago. Um, so yeah, risk 5 itself is very, very cool. Uh, but you also have to think about that like risk 5 is just the API. So not only does it matter what the API is, but you could also think about the actual implementation of that API as well could be interesting in the long run. Um, and the API like has different modules that it can have just like kind of circuit Python does. Um, yeah. So it's cool. It's just early days. But like, I'm not like, oh, I gotta use this C3 because it's got risk 5 on it. Like if I cared like the ESP32 has to actually has a risk 5 core in it. It's just the like ultra low power one that runs at 8 megahertz like which I think is going to be yeah, we talked about this before. It could be cool to do like assembly level stuff just like the second M0 core. I get Gareth says, okay, great. Yeah. Billy would open so many doors accessibility to folks with just a phone etc. Exactly. And that's why I have to be like, look, I need like, I've wanted to do this for year the Billy workflow stuff for years. And I just I gotta do it. And I can't let myself get sucked into C3 and soon to the S3. Um, both of which would benefit from having a standard Billy workflow in circuit Python. So kind of my plan is like for my personal work is like we got to get through this RP 2040 bubble. We've got a lot of people asking for your still we've got a lot of people asking for infrared like we got to basically do all of the modules in RP 2040. And then once we do that Billy workflows my plan like I got to go heads down before I get sucked into these new ESP chips or other chips that come out. Um, so yeah, that's that's my my outlook on my work for probably the next six months. Um, I'd expect the maker says once the S3 is out no point in trying to support the previous versions. Uh, if it's low like if we add Wi-Fi and Bluetooth support for the S3 and that just automatically means it works for the ESP 32 as well like there's no we could do it like if if the cost of doing the older chip is low we might as well we might as well because there's so many people that have it already and we a different have products that use it as well. Okay, so let's um did you all see my audio example with PWM audio. I'm not sure I think I covered everything I wanted to talk about otherwise. Yeah, so we can do that. I mean the more better more boards the better. Yeah, David G says could the airlift coprocessor become the main processor? Yeah, totally. Complete with bugs. You know that's all I do. I don't squash all the bugs. Um, okay, let's do some audio stuff. So let me take the arrange it. I'll show you what I'm doing here. Okay, so there's my desktop when I got this like nice cushy thing for my wrist as well. So what I've got going here right now is this is the RP2040 feather. I'm working on I2S but I don't think I've shown the audio demo yet so I'm actually going to I'll just switch this briefly and we'll do the yeah, I think the PWM thing should work. So um, let me show you what it's doing right now before I change it. What I was doing last, so um, as you can see that I've got four wires going from the feather. I've got a yellow one that I'm using for the like capture trigger. So that's not actually doing the protocol and then I've got three wires here where I'm doing I2S. So what I'm doing is in my code.py, basically I'm prototyping the PIO assembly sorry. Oh no, see this is what happens when my hands not low enough as I type ends. I was noticing like in some of my stuff I'm like ending comments in ends. Oh, you can't see my screen. So let me show this and maybe I'll make it I think I can make it a little bit bigger. Okay, so this is my prototyping. So what I'm doing is I'm prototyping the PIO assembly that I'm going to bake in the circuit Python for I2S. Hello, Hugo. Phil Moyers says I'm really looking forward to the 2040 feather mostly so I don't have to bodge lipo with power boost. Okay, so what do we have here? We have imports, we have audio core, audio PWMIO which I don't actually need. I'm not using that. Bored digital IO array time math RP2 PIO and Adafruit PIO ASM. So this is a Python library that converts this big long string to the bytes of the instructions that actually get saved to the state machine. So if you're watching the stream for the start the PIO is a the PIO is a peripheral on the chip that basically has four cores. So each PIO there are two has four state machines and the state machines are very simple logic not kind of Turing complete meaning like a CPU is Turing complete. But it's a it's a state machine that allows you to do very fast inputs and outputs for different types of protocols. So what I'm doing here is I'm working on using that for I2S and so let me just go over here. So trigger and actually I have a good data sheet that I'll show it as well. Actually maybe let me show the data sheet first. So if you don't know what I2S is and I'm typing ends again. Here's a good example. So I2S is a digital audio format that's really common. It's not I squared Z. I need to get Twitch credentials. I think the people I block just go and restrain. So I2S is a digital protocol because possible so this is so this is the data sheet for the UDA 1334 which we don't actually sell anymore but I happen to have somewhere and what it does is I2S is a way to send the digital values for this audio sample. So audio is you take voltage over time and it changes the position of your speaker causing sound waves to happen that you can hear. So audio is all about shuffling numbers at a particular frequency to change where a speaker is. So what I2S does is it has WS which is known as word select and so this is it's for stereo audio which means you actually have just two like in my headphones right there's like speakers that are moving and they're moving to a certain like they get a new value every so often like CD audio is 44.1 kHz meaning you get 44,000 samples per second so what's happening 44,000 times is you get this pair of values so the left the way that works is you have a word select line which is like your slowest clock and that defines the boundaries of each sample so if it's low it's on the left side it's on the right hand side and then you have something that looks an awful lot like just like a spy protocol where you have a clock B clock means bit clock word select can also be known as frame or left right clock so bit clock is what clocks each individual bit and it's showing you here that like it starts with the most significant bit and goes down now i2s is a bit weird it's a bit weird because the last the least significant bit actually occurs after the word clock has changed which is very strange but it means you have to delay one so that's classic x squared s but then there's also if we look down here there's least significant bit justified format 1620 and 24 bits and so this is nearly the same except the last least significant bit occurs prior to the change in the word select line I still need to figure out what those people are doing over matrix stuff over i2s are doing and why it makes sense to them do they make a sound picture and run it in the loop I don't know the hub 75 protocol but this is at least on the esp32 s2 I think they actually had the ability of having more than one data line at the same time and then the clock managed for you so I think that's why that's why they can use the i2s peripheral for it okay so this is the output format we're trying to create I should say I started with the example from the raspberry py folks for this so building on what they're going to do but one thing I had to do is in circuit python when we're playing audio we allow you to pause and resume it and when you pause audio basically what you want to do is you want to keep the same value because that means that you're not moving this the speaker at all right and if you're not moving the speaker at all you're not going to create any sound so so what I had to do is take their example modify it so that we could hold on to the previous value if no more values are present so let's see how we do that so what we have here is the trigger switch which is just for the capture this is the length and then we do some math to produce a signed 16 bit array of just one sign sign wave and it signs all values in all values in in I2S are signed so that's good to know to so here let's let's look at this pio program now this is actually this is the left justified version this is not the old I2S version because that's what I was just adding is the left justified version so here's what happens the first instruction we do so in pio anything that starts with a dot like this is called a directive and so that's not an instruction it's just something that states about it but maybe you don't want to hold the speaker in a single position for a long time yes that takes power probably so if you need to turn it off for a while what you can do is you can take the value that it's at and then move slowly to zero which is usually the neutral position so what you have to do is you actually have to slowly ramp the value to the quiescent value which we don't do we do in some ports but not others it's and this is what causes you to hear pops like if you ever hear pops of things it's because like we played the last value and now we're going back to zero all in one go that will cause a pop so yeah if you wanted to help make our code better that would be great okay so dots are directives anything after a semicolon is a comment I think slash slash words too but semicolon seems to be the way that they do it in their examples so these are all comments if the line is like not indented and just has a name and then a colon that is what's known as a label it is not an instruction but basically it's a name of the next instruction so if you see here it's like jump to bitloop1 that bitloop1 gets replaced with the index or address of the label of the instruction the label points to okay so what instructions do we have here so we have pull no block so pull is a way to there's two 5-0's so they're cues right Luke says you will get a slight pop if you suddenly go to repeating values but it's nowhere near as bad as stopping is the bit clock interesting yeah that makes sense right because like you're still changing the information that you're doing thank you Luke okay so what instructions do we have here so this left right clock and this bit clock are straight out of the example for from the Raspberry Pi folks so pull no block so pull is I have a tx 5-0 so if 5-0 you can think of is like a number of values that you've queued up to output but you're not ready to output yet and a 5-0 is great because it can store those for you until you need them if you didn't have that you would have to make sure that the thing that was giving you the numbers was really exact and when it gave you to gave it to you gave them to you the buffer a 5-0 is really nice because it gives you flexibility on how you get the numbers to the state machine in this case so pull no block says pull a 32 bit number from the 5-0 if that is there the no block says if there isn't any buffered up instead what it does and I didn't realize this to start with but it's in the docs is that it will copy the value from X so it says here a non blocking pull on an empty 5-0 has the same effect as move to the output shift register X the program can either preload the scratch register X with a suitable value or execute a move to X from OSR after each non blocking pull to keep the last value so that's what we're doing here is that we so we do a pull no block so if there's something in the 5-0 it gets moved into OSR if there's not we move X into the OSR and we do a side set with the left right clock and the bit clock high so we're doing it something we're not changing the output but we are set at side setting then we do this move so this is moving the OSR register back into X if we got something from the 5-0 or not copying it back into X so whatever we're about to output we're going to copy it back into X so we can repeat it next time the side set is the same so if we're looking so side set 1-1 so if we look at the datasheet so where are we here word select high and bit clock high so we're right here and we're going to take 3 cycles 1-2-3 for this particular like high edge so that's important we'll get there so we have 3 instructions here all in state kind of 1-1 1-1 so we pulled we stored and now what we're doing is we're doing a set Y14 so this is the number of bits minus 1 that we want to output and why is that and see we're still here so now after we set the Y to 14 we output pins 1 so this is shifting this is setting the out pin we only have 1 to the value of the highest bit so we're shifting left that's further down so this is the most significant bit we're side setting so we're going to 0-0 oh yeah we're not it's possible this code is wrong too so we're actually here like we're transitioning we're getting the next high bit so we're high high and now we're going to 0-0 and we're outputting the first bit postmates sorry I'm lost yeah you jumped in the middle we're doing assembly for the programmable IO on the RP2040 okay so after we output the highest bit it's shifted right and then we say if we do we do if Y is not 0 then we do a jump and that goes back to shifting another bit it goes back up but at the same time if it's not 0 we subtract as well so that's why you can think of it being inclusive like 0-14 that's going to happen 15 times so loops over all of the bits and that's all of the bits with the left-right clock 0 and then the reason that we have this so this is delay so this is causing an instruction to take more than one cycle so every instruction here jump, outset, pull, move they all take one cycle by default but you can slow them down and that's what this is doing so the reason that there's all these 2's here is that it's making each of these steps take 3 clock cycles rather than the one they would take otherwise remember it's 1 for the instruction and an additional 2 delay for a total of 3 cycles per line and the reason it's 3 is because we have this thing up here which is actually 3 instructions that each take one time and in this 1-1 state we still want to spend 3 cycles so if we can optimize this further we would be able to reduce the number of delays on the rest of the instructions so that's delay bitloop1 is really poorly named because I changed it I think it was originally bitloop1 because the left-right clock was high but I changed it because when I was looking at this oh it changes I was looking at this classic i2s where left is first but then on left justified it looks like left is high so I could actually I could flip it that's not too bad in fact let me just do that so we're just going to invert this and this is the left justified version alright so now I've switched it and you can see that the bitloop1 bitloop0 match up now but the names are just names so it doesn't change the way it works it just makes it a little bit more readable okay so these 3 instructions run for a total of 16 bits because you get 15 with the jump and then the last one is the last one is the 16th bit the reason that you need the 16th bit is because you want to do something different not the jump after it um maybe I should I don't know how I indented or had extra lines to segment them together but these these two lines will do 15 bits these two lines will do a single bit you can see that they both have the 1-0 and then the 1-1 we're setting Y again because we're going to count the next number of bits and it's the same thing except the side is now 0, not 1 and then we loop around and here you can oh you can see at the end here we don't have that second set instead what we have is we have to pull and then the set on its own okay let's keep going I will actually run this and we'll see if we hear from Lediata okay so right now I'm using init to send pin direction I'm not liking this way of initializing the pins the way you expect so expect to see some api changes with this we will probably leave init because it could be handy it's a nice escape hatch but we need to have better defaults for what the pins do by default so frequency is how far I'm running it this has nothing to do with audio this is just for my testing and capture first output pin is D12 so that's where the data is going to go I have set pins and I have three of them for the three that I have in a row and that's just to turn them on for output once we have good defaults for stuff we won't do this and then for side set we start at D10 and we go to so that's for the bit clock and the left right clock and then auto pull we have false because we don't want any of these out instructions to inadvertently pull anything we want to do the pull ourselves so turn that off, outshift right is false because we want to shift to the left to get the most significant bit first pull threshold 32 which is actually the default but it's still nice I'm just standardizing on doing 16 bit samples so every time we get something from the FIFO we're going to end up getting 32 total bits we'll get 16 bits for each left and right there's a cool thing and Luke I don't know if this was your idea but I talked I think last week about how the mirroring of the DMA works where if you do like a 16 bit DMA the other 16 bits in the 32 bits total will be the same value but in a different spot the DMA always does 32 bits and the width only dictates like only dictates like the source width and then the remainder gets filled out with copies of that source and so this is neat because if you have a mono 16 bit sample where it's just 16 bits of every sample right next to each other is you can DMA 16 bit 16 bit and then the striping or whatever it's called where the DMA has the other 16 bits be identical means that it means that like we get for free mono to stereo conversion where both stereo channels are the same yeah Luke says yes I think Grammy is this trick for I2S mono as well yeah super cool the code gamers asks what IDE is this this is sublime text that I'm using is so confusing lol I'm happy to answer questions if you have questions in the twitch chat but it is a deep dive this is what people come for is the details but I can totally ask questions oh I missed it Gareth says maybe bit loop left is a better label yeah and it could be used for triggers like wait until X pin is lower high David G asked what is the initial value of X so I think it gets reset so their state machines have the ability to be reset and I think that the scratch registers get reset to zero at that point and so I assume it's zero to start and then as we load stuff in the FIFO will be zero and then we'll hold on to the last value and this is why signed is really nice because in signed audio land zero is kind of like your middle right and that's usually what you want to start and stop with so it's nice if it's unsigned then it's like half the range which is weird so yeah I think the initial value of X is zero and in fact we can look so let's see did I go over all this I did pull threshold so wait for TX stall is something I added when I did writes for Neapixel I made sure all of the bits have been transmitted but because we have this like default value we're never we never stall um means that Luke corrects me so for those of you who don't know in the Twitch chat Luke Ren is watching and they work for Raspberry Pi and worked on the chip um so yeah that's one thing for us to do state machine restart does not clear the scratch registers or the output shift registers so you need to initialize it yeah and this is this is great like this is something I've been thinking a lot about in terms of like initializing pin directions and all of that um so we'll have to do that as well like we could clear it on it's on our own I really like I like in circuit Python to make sure that things are starting from a known state so you know maybe we maybe we added yet another keyword arg that's like initial scratch x value or something how to make a painter with Arduino LCD touch screen I think I know what you're talking about if you go to learn.adoford.com learn.adoford.com paint let's see here there's lots of light painters with touches so go to learn.adoford.com I know I've seen here you go this is what you're talking about where you can use your finger to there you go go there follow the instructions if you have problems go in the forums film lawyer says but it's so exciting to start from random states this is why people ask like oh why can't I just read all of the state from my code.py I don't have time to teach you right now you can join the discord as well people can help you there if you have questions but you have to try it first you can't just ask for you gotta have a more specific problem and no you can ask other folks there that they can help too I don't do Arduino so that got clarified we should figure out how to get to false state that's a great question so what can we do what works at this point so tx stall means that we don't wait for the last few bits to be read which is good because we don't actually stall at all if we were to stall we just use the x value we have to have this set to false otherwise this right here will never return um well here we go and let's take a pause Lediata just pinged me so she wants to show stuff develop ties are asking asking to help with our dino channel on discord folks can help you there there's also a forum that can help too alright Lediata is not quite ready lantertronics erin says hello from georgia tech prof these deep sides are excellent thank you I'm glad you like them I've gotten really positive feedback from folks so I kept doing it and they're definitely deep dives but as it goes I'm always happy to take two steps back and answer questions um Hugo says right I mean people go through all this mess to get real random numbers and here we are here we have them but we don't want them what's up with that Professor Lanterman okay let's do we'll get interrupted here when Lediata is ready about um logic let's show what it does so here is the logic program this is for the clia and so what I can do is I can hit start and then I can just hit save and go back to the clia and it stopped so it captured and I'm using my thing to zoom out now I don't this the clia I have it set up to so this like teal is the i2s clia analyzer and the purple is the one from is the spy analyzer just on particular ones I'm getting all these errors on the i2s one and I'm not sure why it looks correct to me um I like counted each edge and it like as it says like bits don't divide evenly between subframes and I'm like it looks exactly right to me oh hello yeah sorry about that let me pop you out no it's good we're talking about audio and I got distracted I was helping somebody was well I was redirecting somebody with our video questions as well so they're gonna hop on the discord are you are you in chrome okay yeah it looks good I was just making sure yeah you look good is she here wait wait wait your audio still oh sorry you're quiet I I had issues earlier no it's not you I can hear you fine they can't hear you so you just keep talking I had audio I had problems when I started as well device default okay you folks can't hear her like I I named this desktop audio okay say something hello hello now that looks better on my end hello hello now yes maybe loud loudest yeah we might have to do lady this raise oh we get a nohoy ahoy so we got we hear you now oh yeah okay yeah cool um I'm gonna show off this thank you all thank you everybody well you know we're doing it whatever so I got this QT Pi 2040 it's a RP 2040 PCB in a STEM at QT format so to fit everything because you know the chip needs two buttons and it needs like external flash so it didn't fit on one side I had to make it double sided right but you can see that it's got the same pin out it's got a USB C two buttons is reset one is boot select and then there's a STEMI QT port which is kind of like the whole point the whole thing and then um what's funny is because there's exactly four analog inputs it actually kind of works perfectly because there's like four analog inputs labeled on the bottom and then um I'll show this one is I didn't finish putting together because like you know I got one working and I was like oh I'll get to it later um so you can see the bottom of the PCB and then um now I have one here see if I can get it to focus so you can see the chip the flash and yeah it's like I had to fit everything in there but it'll fit you know and another thing is like I try not to use a 402 capacitor so I can avoid it I try to use a 603 because you get better um you get less uh not de-referencing but what's it it's like de-weighting the capacitors de-weight the smaller they get so to avoid that um but you know what's really nice is that you get this um STEM EQT you can plug in um OLEDs and sensors really easily people love this and it's it's like so easy so this is a display I know this is just the Rappel so even if I go over here which I don't think people who use like they're not used to this we're micro python but this is like yeah I'm thinking on my computer right we did like a bunch we did a bunch of hurdles to make that work but I think once we got it working we were all like oh that's amazing and then like up arrow like does the right thing yeah you know yeah so um and it says I think that's really fun because what's interesting is you don't even if you just have to print out text you don't even need a GUI right like I just want to have it display what's going on in the project and um I think you did display I oh sorry it's hard for me to type and get it I feel yeah easy I was doing examples with my mouse and keyboard yeah I totally know what you're talking about oh yeah if you like the H18 you're like oh my god my mouse is like drifting off to side yeah the um the Rappel stuff came from the Pi portal um which you know you were like really fixated on okay like we have to have the Rappel show up and I was just like you're spending that kind of like three or four weeks on it I was like oh man like you know if this works it's good but I was kind of like a little concerned I was like how long this is going to take but when it worked out I was like this is like really sweet I mean it's it's really nice to have a Rappel on the display and it's you know again it's something that's completely alien to folks doing microcontroller programming because you never get that where like the low level RTOS controls the display right it's a such a weird hack but like it works really great um yeah and the reason we did that is uh hold on is Phil there can he ban the person in Twitch uh he is not sorry um there's a question for you which is uh what's your feeling we were talking about this what is your feeling on the flash that you're gonna end up putting on it on the QT Pi yeah so I was talking with Scott about this so here's the good news you know we actually have the flexibility to use any flash we want circuit python like it's it's easy to add well Scott's gonna add a little thing but basically you know folks we're gonna get easy but basically you know you just define what ships you're likely to use you have like four five of them and then it adds the support for all of those um all those options so um I don't want to go less than two megabytes or I don't want to do two megabytes or less so one of the flash is being um separated for firmware and I feel like one megabyte is not a lot on the other hand you know flash is increases price you know people really want a 16 megabyte flash QT Pi like I'll make one for them um I'm thinking kind of like four four megabytes or something to keep the price reasonable and then I can the thing is I can just pick in place on a 16 megabyte chip too it's not a big deal right yeah yeah I like yeah when I started working with you you know I did the like drone stuff before right and like one of the failures I thought of myself doing hardware design was like not being cost-conscious enough and so I've always been really impressed with how cost-conscious you are and everything you do in the Adafruit hardware and I think it shows both in like Adafruit success and that you have enough margin for hiring people like me but also that you're able to not only do you have that margin but you're you're able to sell things at a really good price still yeah and I think that's you know it's because you know we're re-manufacturing the QT Pi 2040 here in the US and so it's like we pay people and we give them benefits and they have low and k's and all that good stuff and you know so you know that's important to do I have to look away from the screen because it's confusing because it's like slightly off so you're like why am I staring out because it's like exactly two seconds you're just very you're very deep in thought your brain is yeah my brain is like what's wrong with you okay so the the cost thing you know yeah it's a big deal because the bill of materials is invulable right like once you set the bill of materials you can get lower cost components but at some point you do scrape the bottom right like you can't really get PCBs any cheaper you can't really get a USB connector any cheaper right so you know and also sometimes you can't get your low cost USB connector you have to get it from a different place so you know or flash memory like the price it's variable it's not a fixed price like it goes up and down so it's something that you know I always always try to be really mindful you know yield is another thing I have to think about that's why I don't like using a 402 is like I try to use the biggest components possible why because the yield will affect your outcome like if you if you have a board and like you just don't have the right amount of paste and you're adorably cute you saw in flash chip right which is what we're using doesn't quite get enough paste it's like you can rework it but now you're spending like a minute or two reworking it and it kind of like bounces like that equals the amount of the labor cost equals the bomb cost so it's like you want to really reduce yield but use generic enough parts and make the final cost you know market compatible and when I talk to big companies they actually don't really get this which is you know it's a little sad they're like hey like I'm you know we're megacorp right like multi-billion dollar company and they're like we want you to sell our feather like we're gonna design a feather wing and I'm like I'm happy to sell it but it has to be within like the market range and they're like okay we used all of our sensors and made like a sensor feather wing and I'm like great what's the price and they say it's 75 dollars and I'm like nobody's ever gonna pay that like you know like I'm happy to post about it but I can't purchase 250 pieces because there's just no there's just no reasonable market where people are gonna spend 75 dollars right you're never gonna sell all 250 I mean if I like I'll sell like you know and then like one or two people have a problem with it and they return it and then like okay great now you now you have even more inventory than expected so yeah cost is tough you know I actually don't even know the price yet of the RP2040 chip which means it's gonna be I have to find out what it's gonna be we're getting a reel of chips so we can get started on manufacturing like in a week or two so that'll be good but yeah yeah I do have to think about it it's like you can make two or three people happy by increasing the bomb cost but you might make 998 quiet people unhappy because the price just went up by two bucks or they won't even purchase it because they're like why why purchase it for two or three dollars more and so that's it's not easy I don't know the answer to it I try to tell people like people who come to me and they say I have this product how much do you think I could sell it for I'll tell them I think this is worth about like X dollars and this is what you can sell it for and then it's just you have to adjust what's in the design to match that make sense it's weird sometimes you go backwards sometimes you say oh this is gonna be 20 bucks what can I fit like the clue was like that or the feather sense it's like what can I fit in this to match the final price I want to hit yeah totally and I it's also very surprising or I think you also do a really good job at knowing what people want and I think that's I think that's one reason to do show and tell and show and tell and learn guides right is like that's how you can understand the things that people want to be able to do yeah I mean being good at pricing and business is a totally totally different skill than being good at engineering like completely different there's no there's no intersection and people are like oh but if I'm able to like figure out this SDK how come I can't figure out pricing totally different like it doesn't it doesn't relate so I don't you know I don't want people to feel bad if they're like I don't know how to price my product also some people surprise me like I've had people who you know I'm not totally not gonna name names who I don't consider to be great engineers I mean they're good engineers but I'm like you're not a great engineer and they do pricing things that I don't understand and it turns out like they were completely right and I also know like really brilliant engineers like the best engineers I know and I'm just like you're pricing and market strategy is just like a total mess and it doesn't work out that's where I was that's why when I had the opportunity to just be paid by you to work on stuff I was like that is a much better fit for me like yeah totally works out for me I mean it's totally totally different skills and there's it's I don't actually know for business even how you would learn it you know there's there's you can read books you can read you know white papers but it doesn't really teach you shit like you have to have to be in that the industry for long enough to see what works and what you know what the what the price points and capabilities are I mean like I think I will say if you look at you know my controller boards you can tell that like okay you know it's gonna be about 10 to 20 bucks like my controller board it's like until you unless you add more stuff you have to kind of be in that range whereas for something like you know a Raspberry Pi competitor or something you can't it's gonna be tough to sell something that's 100 bucks because the price has been set by the Raspberry Pi to be about 40 dollars so I think we've we've asked this before but work with economics and I'm curious what are the profit margins I think you said basically what 30% for you and 30% resale is that what it is? Yeah so 30% is a really good that's a good spot to be in basically it means that you take your bill of materials cost because you might not know your assembly cost yet and then you basically triple it totally rough but like it gives you some sense of it and then one third of that goes to the distributor so when you buy products from Adafruit we get two margins but a lot of people buy stuff from like our distributors on Amazon or they buy Digikey or they buy them you know their maker space or whatever and that case those people get one margin as well so that's that's how you you balance the cost and having the bill of materials one huge mistake I see people you know they only make the mistake once is they only add one margin and then they get crushed mm-hmm yeah 100% whenever I've had discussions with folks I try to be like go on the high side like I know you people like they want I know they want it to be inexpensive but like really like um these are lower your price than this to raise your price that's what I always say all right another question can I ask has coronavirus affected your sales and if so has it has it been good or bad yeah I think so I mean like schools are closed a lot of businesses are closed it's been really tough you know that's why we're really grateful for all the people who pick up something from Adafruit it the money does not go to any holding company it goes straight to Scott basically and other employees yeah there's a reason I say if you want to support me support Adafruit yeah I mean like this is how we the money comes in and we use it to pay a rent we use it to pay our people like there's no if it's it this is where we're our self sustained company so the people who have been supporting us through this it's been really great and thanks to everybody you know it's it's a really it's been a really shitty year it's been almost a year now it's been really hard for everybody um you know I know that there's people who are like well I'm at home and I want to learn new skills and I want to be creative and I want to do art projects and electronics it's a great time to do it and uh we are shipping yeah and I like you know I I don't see all of it because I'm remote right and in fact I was about I was going to visit right right when the pandemic started and didn't end up doing that yeah we told everybody like don't know visiting like it was right before the open harbor summit and like yeah yeah but I did see like the production line for what two or three months months and so like there was definitely like the the whole fab team did an awesome job like catching up to that right like yeah there's there's a graph of like they're in a hole and um we were yeah we it was like there was like a point which we were like you know basically half of our stock we were out of stock um we were we had some you know whatever we had in the store we were able to you know sell and then we'd ship them um but we were only doing essential manufacturing and essential sales right we were um making components for people making ventilators for people making PPE for people um you know working on like health monitoring um all that and so you know and and also we New York was in lockdown I mean to be completely frank like people couldn't go out so um you know I was was like going in I think I was going in at night I actually can't even remember anymore but um I know you were doing that for a while I mean we yeah I mean I still do but I'm saying like we we were trying I think we were doing the the face shields and we were doing very little manufacturing just enough because we would have companies say I need humidity sensors I need motor drivers we need micro control boards more like okay like well you know and they're like we need them immediately okay we need them immediately so um but we're back we're back up now we're running and and actually looking pretty good um so thanks to everybody who's supporting us it's been a journey okay um I know you are you out of time or can I ask you there's a couple ask me two more questions but I do I'm exhausted we'll pass out okay there is uh I can answer some of these questions I'll I'll do these quickly business model sell hardware for more than it costs to make yeah there you go Scott you're a creative business no that's a hard thing to do and you do it well but that's the model I would say okay well yeah and whatever is left over you know that that's how we pay our staff I mean like this is I mean anyone who who is an engineer knows how much it costs to have the staff of engineers we have we have a lot of engineering staff um specifically to support um all the software I mean I know we just did a whole bunch of like Raspberry Pi script updates and you know Melissa did a great job at it uh I haven't seen it for that yep totally um the other one I'll answer which so it does um can we buy stock in Aida for the answer is no uh because now I know there's no um but that's good because it means that it is good evil people can do it yes um the question I have for you is back to the QT Pi um you yeah that's right made a PR for the QT Pi this morning or last night and I just wanted to say how how did that go for you because I you know I have this role of being an advocate for circuit python and we're about we're on the precipice of all of these rp2040 boards coming out and adding them adding support for circuit python so I I as somebody who just added board support for circuit python how did it go it was like really easy uh and I'm not just saying that because I I just want to hear that I'm telling the truth I actually have a I tried and true you know 20 30 years of development technique for whenever I do pull requests or any code contributions which is I copy and paste something that already exists and I added it right I took the feather uh you know or you can take the Pico and I copy and pasted it and then I went through each file and I renamed it um you know I have we have our own uh USB that's the only thing that's a little bit challenging yeah um but we do we do have tutorials and we do give uh independent developers um and one off you know people we we can help them out if they need a vid otherwise pid codes is the place to go I think also the Raspberry Pi foundation hopefully will uh go in um and then the only thing that I always forget to have you ask them about the USB vid thing yet I just pinged I have not I pinged Alessair about it in the discord so hopefully that'll get on their radar I think let them know I we'll see what they say I mean I I don't you know it's a common thing for them to have one they do have one I know that it's common um but if not there's pid codes and then also you know we can help out independent makers um and hackers who need uh a single one I do want to say that I have to keep it with a limit we do have a lot we don't have infinite and people are like I need 25 and I'm like hey let's right let's think about this um but uh the only thing that I have to remember to add it to the github yaml file yeah and I always don't put it in alphabetical order other than that yeah it was only like you know maybe 20 minutes of work it's really easy because you you know here's one of the things that I personally really like about circuit python compared to Arduino which takes a lot longer to add a board support package is you don't have to define each pins functionality because the chips the chips pins functionality has been predefined already like which pins are pwm which ones are spi which ones are you are you don't have to like in Arduino you have to say like at least with samd you have to say like oh make this into an analog panel like interesting you know I mean they give just you have to yeah I don't like it but I get why they did it that way you you you basically do a lot of uh pre computation of which timer you want it to use it's much more level right whereas what I like about circuit python is you just say like here's my pin names and then you know I boot it up and what's interesting about this design is there's two x squared c ports there's the one on the pin out and there's one on the uh semi qt to actually get to share it yeah yeah it turned out to be actually like a very it was like it was right there and I was like yeah let's do that um so uh so yeah it was and then you know I just booted up and then the only thing I was thinking is you know do we want to have board.i squared c1 do you want to do that or not for other designs uh maybe maybe I'm gonna bring it up like you know the board stuff is for like what is the default bus people are going to use and on the qt pie that's definitely like the stem of qt1 so well that's the one that I made i squared c1 now right so it's like well I would I would have that be I would have that be board.i squared c and then if we had like a board.i squared c1 like one without the one and one with the one like that's probably the way I would do it no I know yeah I gotta get through the fixed switch so I gotta figure that out uh and that's that awesome well thanks for doing that PR that PR is also like super helpful to point people to uh as they are adding boards to the RP2040 um yes it's a oh wow the building across the street somebody moved in the lights are on you know like you like you see like the a place and it's always like dark right and like the one time I look over and it's like all the lights are on and like the windows are open looks like they're somebody's gonna move in airing it out I'll have something to look at while I'm writing code I know we we have snow on the ground here which is rare for us so yeah all right well no we still have snow we I'm backlogged on questions but I I'll let you go before I get to those yeah and so little more lady at us thank you for stopping by uh she may stop by again in the future on on this deep dive but also there's ask an engineer on Wednesday nights if you have more questions for her specifically yeah I just like to pop and buy totally well thanks I have a little bit of free time and I'll I'll scroll back and and get to the questions and do my best I enjoy thanks everybody good night all right that was fun thank you for the audio patients let me look at the chat here so we answered the business model so Johnny says when I order directly from Adafruit instead of from a local reseller I get more money no I do not personally get any more money but Adafruit would get more money if you buy direct for them but if it's harder for you to buy direct from Adafruit they still get some money if you get it from a local reseller developed she's not going to add you on discord but you're welcome to ask me questions or stop by ask an engineer on Wednesday nights but yeah that's ask an engineer is a great place to ask business questions because Phil is there as well and he's the managing he manages all of Adafruit as well first name one last name two says new to all of this is pico a good place to start do you have a kit that includes all of the things to work through the pico book the pico is a great would I say it's a great place to start if you're starting I would actually start with the circuit playground blue fruit is what my go to board is actually let me pull that up the pico is great so if if you want to do that that's awesome but you're getting at what you're talking about the kit with all the things you need for the pico book I don't know of anyone selling one yet it's something Adafruit totally does and I would expect us to do in the future I think we've sold out of the original the initial pico batch and maybe when we get more of those we'll do a kit but if you haven't looked at it the circuit not pipe pipe on playground I'm in learn not in the shop but yeah so this Adafruit circuit playground blue fruit is what I would recommend because it has a bunch of sensors all built in and it has bluetooth as well so if you're just starting out I would actually recommend that Mr. certainly in the discord points out the clue which has a built in display as well so pico is good it's perfectly fine but if you want something that has all built in the circuit playgrounds are great so that okay I'm caught up on YouTube let me just see if I missed anything in circuit or in discord Gareth says well love the factory said can we buy stock in Adafruit and Gareth says I'd like to invest in Adafruit so I don't think they're doing any sort of investment they don't need it as far as I know if you want to invest in Adafruit buy stuff that's how you can get that's how you can help support Adafruit by buying things Dylan says honestly can't understate how difficult selling hardware for a profit is 100% and there's certainly like the startup thing is pretty difficult too Adafruit got past the hump of having a couple products they carry like 4000's use or something and that makes it easier Phil Moyer says Pid, Unix guy here so you're probably not talking about process IDs yeah it's product ID so USB VID is vendor ID and PID is product ID and VIDs cost $6,000 once to buy so Adafruit spent $6,000 or I think it was $5,000 at the time but $6,000 now to get your own VID and there's 16 bit so you have like 65,000 product IDs that you manage yourself so what smart stuff can we do with 2 I2C is like PIO to isolate 2 I2C so the the RP2040 has 2 I2C blocks so you probably don't even need PIO to do that yeah Jay Francine says you could have I2C I2C0 and I2C1 where I2C and I2C0 are the same so that would work um yeah technically snow but it looks like heavy frost yeah not much okay there's a microphone MicroPython on Pico book yes there's a physical book for MicroPython on Pico and then we've also cribbed the examples out of there and translated them for CircuitPython in the learn guide um which is getting started with Raspberry Pi Pico as here you can see that we have like this reaction game and we say like hey by the way we ported it from the book Jonny says Pico is too new better to get a board that's been out for some time then you'll find projects on the internet so yes and no like one of the nice things about the way CircuitPython is built is like once we have the module for something like all of the examples code should just work um and Beck says you can get a return from Adafruit by buying this stuff learning how to make things and then selling that or starting your own business with what you learn yeah invest in yourself um Mark Olson asks do you have any idea why iSquirtC might be really slow on Blinka devices the FT232 or the MCP221 i don't um i don't i have not used either of those at all i would ask Carter, Carter has done some work with them and he may have an idea if you don't have a logic analyzer my guess is usually what happens is that like the actual transaction for iSquirtC is really quick it's just like everything else around it going from one transaction to another is slow that's what i would suspect if you're seeing like slowness overall um GP0 and GP1 are for iSquirtC0 but they're also TX and RX it depends on how they're hooked up to the board like all of the iSquirtC01 things are like copied across all of the pins um alright any other questions otherwise I I really want to just see if this iSquirt iSquirtS stuff works but I'm not sure I have enough time to do that we could play some audio we got 20 minutes or so Zach points out that getting started with PicoBook is also available as a PDF now so starting out with Pico is not an issue if you plan to follow the book that's true first name one last name PyCom seems like a great board with lots of examples any opinion on that I do not know the state of the PyCom MicroPython port but I my understanding is that it's a separate version of MicroPython that is not CircuitPython or MicroPython upstream MicroPython so if you want to stay in the PyCom ecosystem that is fine it's kind of similar to the CircuitPython ecosystem where we have lots of libraries and stuff like that my bias is to say no I wouldn't do that but if you want to it's up to you but I think that starting off like Adafruit's focus is people who are getting started for the first time and that's not true for a lot of things Pboy says I have 10 PyCom boards I abandoned because it was too vendor specific Phil says 2 hours 15 minutes to sailboat racing so I can hang out demo time first name asks the most basic reason to use CircuitPython over MicroPython this is something we talked about but the pitch for CircuitPython is one our user experience is consistent across all of our devices means you plug it in it shows up as a CircuitPy drive and you edit the code.py on the drive that's true for all of the boards almost all of the boards you can see on the downloads page we do have downloads for the 8266 which it doesn't work on but we don't support any so that's one thing the other thing is we have a strict hardware API which means that all of the libraries and example code based on those APIs applies to all of our versions all of our ports MicroPython does not have that they have an API they try to keep standard but it's not quite standard and they don't have the library catalog built on top of that so I'm trying to I'm trying to be objective but I'm biased obviously as well Ryan says is iSCritzy peripheral support planned for the RP2040? No I mean I would review and merge it if somebody added it but it's so far down my list that I don't think it's something that I feel like I need to do before I moved on to BLE workflow stuff I want to do largely because what we've been talking about is our focus, Adafruit's focus, remember Adafruit pays me my focus is on the beginners, what do they need and iSCritzy peripheral is just not one of those things the iSCritzy peripheral API itself was something added by someone else as well so like it's doable the chip can do it I'm happy to help you do it I'm happy to guide you in doing it but I don't think we'll do it, at least not in the short term I think it's more likely that somebody not paid by Adafruit does it David says but then when we grow up we will not be the target of Adafruit and circuPython where do we go then this is a sentiment I think that gets people in trouble this idea that once you're an expert you're no longer our audience and I think that that is true so much of the work that we do for beginners is benefits, intermediate and experts as well and there's always going to be more beginners and intermediate and expert folks I think the expectation for us is that experts can do it themselves and you know it's all open source you can start with the code you can add stuff in circuPython if you need it Nerodox is when we grow up we make satellites, right? that's a good example, right? that is an expert use case Max Holliday who did the satellites he made poll requests to circuPython that I reviewed and we merged in we have support for I think it's mRAM, magnetic RAM which is used in place of flash that's in there because of Max's work so my goal is to get to enable anybody to contribute but the contributions I will make will be towards the beginner focused stuff um David says talk about the QDPy2040 MIDI synth I don't know what you're referring to like it'll be able to do MIDI for sure like we have MIDI working on RP2040 already Gareth says I'm using Adafruit hardware and libraries in production IOT devices that's doable and then Dexter asks is there a UF2 bootloader upgrade for the QDPy M0 you'd have to check if you open the boot drive you should see info.txt something info that will have the version in oh MIDI and sound out somebody could do it I don't know of a demo but I don't see why you couldn't do it Phil Moyer is working on a CubeSat controller board Dexter compared that version number to the UF2 Samdy repo I'll show you GitHub Adafruit UF2 have it in my history this is the source for it and it looks like 3.12.0 is the latest so yeah you could probably update it whether that actually impacts the QDPy M0 or not is a separate thing I don't know of any if it works then we'll need to update it Popup says speaking as a sort of expert Adafruit and Sparkfun are great resources because they're doing excellent documentation work on making these complex chips usable via CircuitPython and Arduino libraries I'm always on their Gabs learning about chip internals yeah I think that's true I think a lot of experts use Adafruit and Sparkfun to basically accelerate learning something and then it makes total sense to quickly learn the basics and then because you're an expert you can learn the expert thing that you need to know Johnny says even when you grow up you buy Adafruit boards for prototyping as that is way cheaper and simpler than doing them yourself okay let's do a little bit of audio should we just go for gold and see if it works actually you know I don't know the problem is I don't think I have it compiling yet maybe so what I did right before the stream is I okay you can see my screen I added the program stuff I'm gonna have to I'm sure there's compilation errors here but I kind of want to just go for broke and see if it works oh it compiled uh what are the odds that it works slim I don't even know if I have it on let's just see we're skipping ahead and we're not picking up where we left off but let's it's probably not on so we gotta turn the module on I really wanted to get I2S done this week so okay we're gonna turn audio bus on let's go for broke huh odds are 2040 we're gonna probably have to clean again haha just might work it compiled but the code that I changed was not included in the compilation so near docs is I absolutely would recommend using circuit by them for prototyping on any project where you find you can do it this is what I expected this is what this is what I expected to happen have I shown waiting or waiting through this stuff so okay so let's just let's just do it let's just see how far I can get maybe maybe I'll be able to get it seven minutes we can run over a little bit but I don't want to run over too much okay audio bus IO PDMN at most start pins clearly you can see where I copied that from and so I think we just need to clean out all of the so I want to do PDMN as well at least serializer in use mainly just keeping the error messages that I think I'm going to need and then I'll comment everything else out so PDM is another version of digital audio that is the density of ones indicate the value so it's like a whole lot of one bit samples and then you do math to figure out what the real or like the 16 bit equivalent is oh come on and all this clock unit stuff we don't need it's pretty awesome like a lot of this just doesn't we don't need it because we're going to rely on um we're going to use the PIO to clock these bits in so right now I just want to get it compiling so that I can test the other thing and again I think I'm just going to I probably would have saved myself times starting from the I2S example here's all this set of DMA stuff I don't need I don't think I'm going to use DMA with it either this sync filter stuff is the stuff that I need commented out I'm just trying to like get this get the compilations gone and I'm going to clean again just because I fix the headers Johnny says I just realized I've been watching live streams continuously for 7 hours that's dedication okay so now these are I2S problems so number yes I meant number and the state machine okay so in here include PIO state machine just lazy you're like laying on your couch and your TV is just rolling from one to the next and then see here pin check is rolling this is the sort of work that's like really good when your brain's fried it's like very basic stuff now type I should have that should have fixed it discards const qualifier const kind of makes things marked as marks them as read only if you're new to this state machine obviously I'm surprised that didn't work I2S out.h oh did I put it in the wrong place it did I'll copy it because I know I'm going to need it there as well I gotta tune that sensitivity it's not quite right one tip if you're new to see I always start with the top errors because sometimes that an error at the top causes the other errors further down and so it's always good I think to to start at the top and work your way down because you might fix one and then have a bunch disappear okay so this is just a copy and paste error we're just not calling it obviously this is when I'm doing code like this it's really like I write a bunch and then I fix it and then once it compiles I fix it some more to make sure it actually works too many ends I'm loving this new CPU it makes it so quick okay that's interesting that it's seeing this is the private version that we have for neopixel but we're not using it not using the basic one which makes me think that at the top here if it starts with common how it is usually in the in the shared bindings version so I think it's rp2pio state machine fix that and PDM's complaining I suspected this would be the case let's just replace that with a zero I think that's like how many samples did you get ah it's not shared bindings it's bindings because it's a funny case where it's port specific shared bindings is for the stuff that's ah look at that I've got less than screens full which is good too few arguments and then this audio sample bits per samples here's the function so we'll want that as well sorry I'm I'm in heads down mode trying to get it fixed okay so the question is which arguments are we missing I thought I copied it but maybe I you know I think I added more arguments so we have program program frequency and it program which is program program frequency and it and then four pins exclusive pin use oh txtall okay so I think I was thinking this is this is the bad side of C so like most of these most of these parameters are keyword args in python meaning that they have a default value you don't have to provide them in order because you always have to give their name and you don't you only have to give the ones that you want a non default thing for but in C there's no such thing and so in C we end up having to do all of the parameters all of the time which goes to show how much nicer okay let's see if that's the right number and it is awesome okay let's test it so I'm going to go away remind me remind me to change my camera when I do my wrap up I'll do this and it looks like it's live still which awesome the USB on those new motherboards been so much better try to do first is I think I'll just try to change the example I have from using pio back to using audio busio I think he asks can supply and render markdown I think so I'm not sure I think they have a mode where you can have like a second panel with it okay so what I'm going to do is I'm going to hold actually I'm going to make sure I'm ejected I think I am I think I did now and now I'm going to hold boot selects and press reset so get me in the boot loader I'm going to I got to tune that the proximity is throwing me off I feel like it got worse feather I want to there we go the circuit by that's showing up as the time stamping so if you can hear the vacuum all right took a little while but now it's going and we should see circuit by again and that's the one we want so I'm going to he boy says one of the nice things about circuit by number is my cry done is a reusability of libraries in my cry them many libraries are port specific work on circuit by them has common layers which increases the port ability and the community and mighty dice Todd bus says yep I use streams like this to help me do work working alongside some and even though I'm working on something totally different else you're welcome to have that and thank you for sponsoring me Mr. certainly is a sponsor as well Scott you and your work always be valuable for engineers even those grow up to be experts yeah that's what that's my opinion too okay let's duplicate this and say this is I'm actually going to want to use this later because I want to add this as an example okay so we've got our code to pie and let's switch it back to playing audio bus I oh so here's how we convert it we don't need that anymore need this and back now becomes audio bus I O I to S out and let's pull up the docs for that because I can't remember she says this is because there is an important portion of expert engineers that continue their growing up process to become mentors and can tell their new hires go check me out did I checkpoint the matching code and get no I didn't everybody's like very worried about losing their state but it's really when I'm going to restart my computer because generally I have a copy of something in my in my editor it's really like worst case I write it again get says plus one for deep dives driving hardcore users into becoming contributors yes the deep dives I think have have had an impact I think we've we've definitely seen folks come out of the community to contribute which has been amazing to me like I really want this project to be bigger than Adafruit and getting non Adafruit funded people ideally people funded by other people working on it has been great and product mode all the time just means the focus will be a little bit better okay let's do I2S out and we give it bit clock word select and data and how did I have it arranged clock was board.d10 word select d11 and data was I think I can do it with the arguments d12 and then left justifies the only other thing to give it which we don't want by default and instead of right we want play and we also want a loop it was true and where's my terminal I have it here I'm just bit clock argument required let's just see what this does here oh it's bit underscore clock all roses for me circuit by done is cool because I can talk to a scientist or a park ranger in places without internet so go and change a file to fix project and doable undoable with any other language I can think of right now so you can send them out and they use usb to update the device exactly it's still crashed array object does not support protocol audio simple that's true all these ends sample equals audio core dot raw sample s16 and what was it odd rate sample rate sample rate that's my guess 8000 oh it's doing something maybe it crashed care says I have to spend weeks teaching folks to compiler flash see exactly when it printed done but it didn't give me a prompt can I control see it or am I I think I'm hung there's a bug okay so what I'm going to do is I'm going to just ignore the fact that it doesn't work at the end and I will eject it and then I don't have a cable that's non data I just want to take a peek at this so I'm just going to hit the reset it's going to start alright it's not going now so it did manage to stop so just hit reset and it looked like we captured something and the drive popped up nothing we got oh I guess that makes sense because I'm not initializing the pins the same way use windows and you won't have that problem that's not true you can still have problems with windows you can always have problems with Mac too okay so the problem is that I haven't done the pin initialization stuff which is unfortunate and it's also going to take I wonder if I can cheat it the way that I was regular I was also cheating it okay in I2S out what we're going to do is we're going to do this is what we should do but we're going to do word select three we're going to do the same pin initialization that we did last time oh you know I don't think I know the the set it's like one command that I need here from the other example okay so if you noticed I2S test in this code okay I did start using TO again folks interesting it's hung but the USB is fine eject and reset again ooh Bruce got circumfiling the id of 43 that's good all I want is I want this number E087 87 is the magic incantation knit this is totally a hack this is not going to be in the final VR I used to like curl my hand more now load it up just because my mac hangs twice a week doesn't mean I have a problem with it come on I don't have there it is I am over time I don't really want to go outside I usually go outside after but it's cold okay so that's still running but I'm going to change the example again and then before I rename this one code.py I'm actually going to get Celia going because it will probably still hang on the way out in this code.py and sync to make sure the file system gets written and we captured something that we got some what do we have and what do we not have interesting look at that the frequency change so we do do it looks like we're like shifted right like this is clearly the left right clock and this is the what pins did I say D12 should be data let's see if we're progress I'm hoping to hook it up to an amp though that's what I was really hoping for yeah and see we're we're hung here again which probably means so this is a I know I'm over time but this is a good question how do you figure out where you are because we know our code.py is completely done and we printed done and we know it's I2S related so the question is where are we it's possible we're in state machine reset that's another thing I gotta tune this proximity thing it's great you're showing us troubleshooting tools along the coding most videos don't do that yes I'm an open book and this is all part of programming and having techniques for debugging is definitely something that's really hard to pick up it's not something that's often taught that's so that's my guess as to where we are Tio's been great I don't know I know folks have mentioned it to me before Tio is great because it it automatically detects and reconnects TCD says what sorry what debugging tools do you have to get a stack dump I could have a J-link on it and then be doing it in JDB in JDB and then I would be able to just control C and see where I was but I'm also like I haven't set it up yet and I'm about to have weekend so it's just not interesting to me although it looks like the problem is that it looks I think we hung before we got USB we're playing back before we ever get USB but USB is active it's just not like the resets never finishing which is weird but there's a simple thing we can do which is type ends into everywhere in our example we can just add a weight we'll just trick in the book so that's to give USB time to that and if it was actually hung we wouldn't be able to safely eject it would complain so now we don't actually need to load a new one so we'll just hit reset is it 90% of coding figuring out why it doesn't work yeah I think that's a fair fair thing to say okay it's going so we do get done so we got the second done we got reset state machines and we got done weird I don't know where we are then this is probably a time I would actually just need to use the Jlink it's on the same line because I didn't add the new lines I don't really want to do that so I think D12 why is my pinout wrong data is D12 that's right so my pinout's wrong I'm going to try to get it going I'm going to ignore the fact that it doesn't that it hangs outpin 1 data side set pins starts at word select and is 2 start at word select D11 goes 2 am I plugged into the wrong 1011 12 1011 12 is right but I'm going out the wrong places let's just capture it again haha crashed it Jlink for Monday yeah cable tie says is JTAG debugging support available for therapy 2040 it's not via JTAG but yeah what you're thinking of is it's called the protocol is SWD and there's an example on how to do it I have a Raspberry Pi to it but Jlink actually just had the initial support for it in their beta which is what I'd rather use I have a Raspberry Pi here that's been heating my office for a few months now but I'd rather turn it off ah alright let's call it this is nothing I see Lee is so unhappy happy you guys be so hard haha go make a tiny snow person there is not that much snow I think tomorrow is going to be a snow day oh dear did I oh I was going to say did I jinx myself it's still the wrong pins we got the side sets but the side sets are on the wrong spot oh no that's the right spot that is the right spot D12 is purple looks like an eye looks like an off-by-one air I'll keep working on it but I'm going to I'm going to call it Hot Meal and a favorite TV show alright thank you all so much for hanging out with me for these two and a half hours thanks again to Lady Aida, Lamor both for stopping by and showing us the QDPi RD40 RP2040 but also for sponsoring this stream and all of my work on SecretPython is her company and makes all these things possible so if you want to support me you can support Aida Fruit Pays Me so support Aida Fruit by going to AidaFruit.com if you want to chat with me and a whole bunch of others on the Discord you can go to A-D-A-F-R-U-I-T-slash-Discord if you're getting started and you have questions that's a great place to do it this has been a deep dive it's more of this every week Fridays at 2pm Pacific I live in Seattle so Seattle's time zone every week next week is on Tuesday not Tuesday I saw Tuesday somewhere next week is on Friday like normal not on Thursday so if you have questions either ask them on the Discord or you can ask them of me next week during the deep dive I keep an eye out for the Saudi work this I am close I feel like I'm close like the code is written it just needs to be debugged issues ironed out so I might actually keep working on it after the stream so keep an eye out on the CircuitPython Discord channel in particular that's where we do all this development if you're new to CircuitPython please say hi we'd love to have you if you're new to programming microcontrollers there's lots of great tutorials on learn.adafruit.com thanks again to David DCD for taking time codes they'll go in the description here after the fact so people can skip around and as always thank you so much for everybody hanging out with me and I'll see you next week I think this week we'll end with a petting Vin since she's actually here not locked out of the room so have a great weekend everybody if you are going to the CircuitPython Weekly remember that Monday's a US holiday so it'll be on Tuesday so be aware of that if you're planning on making it alright cheers everybody