 and welcome to Disco Lady Aida. Hey everybody, it's me Lady Aida at my desk or low dude Aida if my head is in the way of the A. And wow, it's been a nonstop weekend. A lot of hacking, a lot of trying to get a baby to sleep but we're here finally and she's asleep. So let's kick it. We got some hardware, some software, some friendly robots. Mr. Lady Aida, do you wanna go over some of the videos? Yeah, we posted a lot of videos over the last week or so but the one we premiered last night was doing drivers with OpenAI Chat GPT, Narduino Library specifically and we'll probably talk a little bit about that and this is just us exploring the tool. I know this is a polarizing subject for some either AI is gonna take over, we lose all our jobs or it's the future and we're gonna live in a Star Trek utopia. We're interested in figuring out what these tools are, how they can be used and fun coincidence, OpenAI's Chat GPT seems to be trained on all of our 10 plus years of open source software. It definitely is. And it's interesting. Not seen as it is. So we did this video and it's like 35 minutes long. So if you want to go see it, it's very detailed. We'll do maybe a short version just people will watch the whole video. But it's interesting is like a week ago is when I started using Chat GPT and if you all remember from the last desk of Lady Aida I was using it to take some C code that was formatted in a way that was kind of annoying to use. And I was like, oh, Chat GPT, can you reformat it? Like, could I have written the Python script to do it? Sure. But OpenAI was able to take that data and reformat it into the exact right setup saving me like 20 minutes of like carefully pasting and moving, you know, bytes here and there because you have to have the init code for these screens like kind of perfect. Like if you have even like one byte off the screen doesn't work anymore. So that was kind of useful. And then after I did that, I was like, oh, you know, like that was really great because I have all these like bars and round and square displays. I really did not want to go through like and every init code file is like slightly different. Like you can't just like use the same Python script if I'd written one. What was nice is that like Chat GPT4 was like happy like whatever the format was, it could figure it out. And then I was talking to Mr. Lady Aida and he was like, you know, you should just try it every day just like every day. Like whatever little task you have to do use Chat GPT. And so, you know, I do remove a watermark from an image and so I tried to use Chat GPT. Totally failed, could not do it. Okay, good to know. And I had it, another thing I tried to have it do was do image recognition on a PDF to extract a register map which is actually what leads to this. And that actually didn't work either. I tried for like two hours. And I was like trying all sorts of different ways to get it to like read and like take the, I wanted to extract the registers and like all the bitmaps and that bit, bitmap, not image bitmap, but bitmaps for all the bits in the registers, the mappings and export that to a JSON file. And then I could like maybe like automate which that I would read a library writing and like that didn't really work either. So eventually a few days ago I was like, oh, you know what like, you know, you were showing me the PDF importer and I was like, oh, maybe I'll use this plugin. And I started with it just like, you know, I copy and paste the parts of the PDF and I was like, I want you to reformat this into any num because one of the things that's very tedious about writing libraries is you have to get like the registers out and it has to be like pound define chip name underscore reg underscore control one pound define chip name underscore reg underscore control two. Okay. And then continue. And there can be like 50 registers easily. And then on each one, you have the enumerations for the actual capabilities. So like even within those 50 registers, you can have like four bit wide sub register configuration sections and each one of those has like 16 different settings and you have to write an enumerator for that because you don't want to like, I prefer enumers for that instead of pound defines. I use pound defines for registers enums for register settings because they're sometimes sparse and that way people don't accidentally try to configure it with the wrong one because often they're used as arguments to the function. And, you know, I can write libraries but it's like having something like chpbtdute for me is really helpful. And you know, if you watch the video, you'll see like, I have to teach it what to do. I kind of call it like an intern. It knows how to code fairly well but it kind of does how to read a document but it also kind of easily like makes mistakes and typos. So it's not like it comes out you can't just type in like, write me a library. It's not going to do that, right? You have to tell it, I tell it step by step. Okay, here's what I want you to do first and then I take it through all the different steps. And it isn't, you know, it's not instantaneous. It does take me like, still an hour and a half to write a library but my hands don't hurt the next day because I don't, I'm not doing a lot of mousing and typing. And second, as I'm doing the prompts, I'm kind of learning like, okay, how, you know, like my intro prompt, instead of me just like trying a few sentences at a time, I'm kind of crafting this intro prompt that kind of gets everything at least in the right context. So that way I, because I keep telling you the same things over and over again, like I've written out three libraries, the chat GPT, two of them aren't finished, one of them is finished and I'll show that. And I've noticed like, okay, it kind of has the same, I have to kind of remind you of the same things, like, oh, don't forget the docs and comments and do the docs and comments in this way, that I particularly like. And then, you know, use this register a lot, you know, I have to give it the prototype for the function call that I wanted to use to create register objects. Anyways, let's go to the computer. I'll just show you the library I did publish. So here is the HUSB 238 and this is a USB parallel of a sync chip and actually like made this break out a long, long time ago, you can look in the block, I think it's like a year old and I was just like, oh, it's a big library to write, I didn't want to write it. So, you know, you can actually look in the commits, you can see the first initial not working test of commit and that's like pretty much the raw data from chat GPT and then I did have to do a cleanup run. I went through and there were a lot of typos, I did a clang, I did ask, ask it to do docs, gen comments for everything and so I added those in. It used a different underscore R squared C register but it should have used underscore bus I register. I made that mistake, I should have realized when I was having it write the library that was using the wrong object name but like I, it's typed after I was confused. There were a couple, you know, small mistakes here and there, you know, like typos, it wasn't not perfect but it did get me like kind of going, right? Let's definitely look for typos and mistakes and like off numbers but like it was only making, you know, it doesn't make the mistakes any more often than I would. You know what I mean? Like I would often make typos and copy paste errors and so I feel like, you know, just be aware like it is going to hallucinate and then, you know, you can see all the history and then I eventually got it to pass the I and of course I tested it with the hardware here and then I gave credit to open AI as a co-author and then here is the links to the two chats. By the way, the reason we're doing this is because there's no guidance out there. As far as like copyrights concern, ladies is the author but things have, things are changing in the future. So what we decided to do is always be completely transparent from our editorial guidelines. If we ever use any of these tools, we'll tell you, we'll indicate it, we'll link to the model that was used, the latest build. And then in our case with code, we're linking to the actual chat logs. Yeah. And no one's going to do that ever. I was copying and pasting. Above and beyond, but we're going to do it. First I was copying and pasting. I'd like, I'd grab the chunk out of the PDF and paste it and that's what, you know, again, later I realized like, oh, you know, you can just like give it the PDF directly. So that's kind of like, that was like, ooh, like now I'm really saving time because I'm not even like copying and pasting. You can see like I'm giving a lot of positive reinforcement. And that's another thing somebody was kind of like, not making fun of, but they were like teasing me a little bit. They're like, why are you being so nice? On some of the social media platforms, you know, we're being made fun of because we're being polite. And that's how it is. You know, these are, so, you know, I like Star Trek. You want to be nice to- I like Star Trek. And a lot of these people that say things like that, also like science fiction futures. And so they can somehow in their mind be like, no, you should be a total effing jerk to this current- This problem. 2023 AI that humans are trying to make. But don't worry. By the time, you know, things change and Commander Data's walking around, no, then it'll be nice. Yeah. So, you know, it's actually, it's more work to be mean. So, anyhow, we're gonna, we're gonna probably just be ourselves with these things. And we say please and thank you. And like, that's just how we are. No, I'm like, love it. Perfect. Well, I was trying to give it positive reinforcement cause I was like, when you did a good job, I do want to show the chip real fast. Cause, you know, now you've seen the library cause I do have a break up for it. So this is the HUSB 238. And you connect it to USB-C. And then if on the other hand, let me see if it sees the text here. So it's a USB 100 watt output and it can give you, let me see, five, nine, 12, 15 and 20 volts, up to 100 amps, 100 watts, five amps, 100 watts. And so this chip, what it will do is it will communicate with the USB-C power supply and be able to get you not just five, but different voltages and there's, you can use set jumpers. You can see I've set and opened every jumper or you can use I squared C. And so that's the driver that I had to write. And it actually did a really good job. Like I tested the driver, obviously. And like I said, you know, it hallucinates and makes mistakes, do check everything out. Like don't, you can't just trust everything that comes out of it, but it can save you from typing. Okay. So next up I can show off this moon clock or I can- Moon clock. Okay, let's do the moon clock. So next thing, while this is all happening, we're making a lot of progress in adding circuit Python support for the ESP32S3 in TFT mode for the RGB TFT. So this is the WebB. You can see that I don't want to longer have any cut traces. And also because I'm no longer using these three pins, because it turns out you can't use those pins if the PSRM is in octal mode, I have a GPIO expander instead. So over I squared C, this has the TFT reset, chip select, clock, data. These two buttons up and down are also on that. And then the backlight control on and off, it's basically up and down on and off. And then some other pin, I can't remember, but basically all the IO is used on this. And that lets me have a full SPI port here, clock, most of me, so chip select, and two analog pins, which means that actually what's kind of neat is I can now do 4-bit SDIO for SD cards. So I can do maybe high speed graphics, video, video graphics display. Let's go to the computer and I'll show the circuit Python code real fast. So the ESP32S3 is a Wi-Fi chip, which means that not like in a display, up to 720p TFT displays off of the PSRM, but in the background it can also do Wi-Fi. So this demo is based off of the moon clock from the Matrix portal that Philby did. It gets my latitude and longitude from this GOIP website. So it's not my exact, exact location, but it's good enough to make sure that the moon phase is matching what it should be. So it gets a latitude and longitude and then it goes to this other API that does weather and sunrise, moonwise and moon phase and it gets the property, the moon phase property from the JSON response. And I think this is like a really, this little chunk of code is a really great example of what circuit Python or MicroPython or embedded interpreted languages are really good for, which is that doing this where you like to make one query to a website to get your latitude and longitude, you parse out the JSON, you extract that value and then you pass that value to another JSON request to an API, get the response and then traverse to get the moon phase and print it out as a floating point 223.6 degrees out of I think 360. This would be really, really hard to do in Arduino. You could do it in C, but it's like so iterative and slow, whereas with embedded Python hardware, it's like five lines and it's really easy to debug. So it's not merged in the support for the TFTs with ESP32S3, it's in a PR, but it's coming soon. So the next step is I'm going to, right now I'm just dummy loading a single bitmap image, but what I'm gonna have is 28 plus moon phase images and it will select the one that matches the one that is for your current phase. Or maybe I'll use the alpha blending bitmap tools thing to like automatically generate the alpha blended bitmap. Either way, one thing is that I wanna ask if maybe we can get JPEG decoding in Circuit Python at some point because the bitmaps, once you get to 480 by 480 on that round display, the bitmaps get quite big and so it's got 16 megabytes of internal flash, but that goes very fast when you're using like 600K or larger full color bitmaps. I mean, I guess I can make it a monochrome bitmap, but oddly enough, it didn't look quite as good. You actually, like, it is a 16, sorry, 24 bit color one. Looks quite nice. So that's the moon phase. Okay, did I miss anything, Mr. Ladiator, or should I go? No, I mean, we're publishing quite a bit, so go go. I know, I've got all the videos. Okay, so let's do a quick demo with the OpenAI. I mean, of course, watch the full video if you want. So maybe go to the overhead and I'll show some of the things that I'm working on. So I did the HUSB238 library. So I'm finally getting all these prototypes I've been seeing on my desk and it's like, I got the boards made and it's like, I'm pretty sure that the hardware's good and it's like, okay, the I2C scans, now you have to like write the library and I'm just like, I don't have five hours in order to write a library because like the baby, you know, and stuff. So what's nice is that now I can use ChatGBT. So I did the HUSB238 PD sync libraries. That's done, working. And then I am still kind of poking at the VCNL4020. We actually kind of see the infrared emitter going there. This is a nice proximity sensor and infrared an ambient light sensor from Vishay. That's almost done. Also a very complicated sensor, a lot of registers, a lot of thresholds interrupts, but this is looking very good. And then this morning, this one was actually quite easy, the AD5693. Interesting thing about this is it doesn't use registers. It uses like a command byte and then you two data bytes. It's like there's literally like one register maybe called command and you just write data and then you read from it. But no, so you can't read from it or maybe you can, you can read the status. Anyways, I have to check the data sheet but I started working on this and I'm gonna get that data working. And then this is the TMag50273, which I think we featured on INMPI, see magnetometer. So let's go to the computer. So this is a Hall Effect sensor. It's used often for like joysticks and stuff. I think this one has, there's two versions. One has a fairly low range, plus or minus 40 millitesola and I think that could probably do geomagnetic sensing. And then there's a high level magnetic range, which is good for like magnets. And I also think that this has, you know, fairly, you know, for single axis, it can go quite fast, 20 kilosamples per second. So I wanna just show really fast like how I've been starting to get my prompts together for writing the library. So one thing is I have like my little wiki, I've got the beginning of a prompt where I kind of like set it up. So first off, I'm on chat GPT-4 and I'm using the AI PDF plugin. So I paste this in and I'm gonna tell it that we're gonna do the TMag50273 and then I have to give it the PDF of the datasheet. So go here and I've got this is the datasheet. So what's nice is that I can just paste it in and the AI plugin, it's called AI plugin, will parse it for me and you'll see it pop up here where it's like, okay, you gave me a PDF, it's gonna read it. And so again, I kind of have to, I do like to kind of take it through the process and I give it pointers on where to look. So again, think of it like an internal a little bit. So for example, I wanna do the register map and sometimes the register map is in a table and sometimes it's not, but let's see. I think it's since in a table. They always are like, here's how you use I squared C and you're like, thanks, I know how to use I squared C and then eventually it gives you, okay. So I'm gonna tell it, I want it to do, oops, give me the pound defines for the register map. So I want all of these register acronyms, pound defined out, actually, sorry, that's part of my prompt. So I say define, chip name, register name, address with chip name is a chip. So that's part of my first prompt and then I'm gonna check it. So it starts at zero, zero, config one, config two. Device sensor and then device sensor, config one, config two, and then just make sure it catches the last few, oops, sorry. It did not, right, it ended at 17, which is the LSB results, I'm gonna say, you missed OX18 through OX, let's check the data sheet. So you see, it's like, it did get it correct. Well, I didn't check every register. I would normally check each one, but it did miss some things. And so it actually couldn't find it, which I thought was interesting, but the good news is that what you can just do is, go lazy and just copy and paste it and you say, is the remaining table ignore the word go. And then it was like, okay, cool, here you go. Thank you. So then, it does the registers and you can tell it, hey, I want you to generate my header file. One of the things that is always challenging again is doing the enum table. So let's do the enum table for mag cha n as part of sensor config. So I'll start typing just while it's, it does take a while to type everything out. Please create the enum, definition for register, CHS, sensor config one, subfield and addoxygen-styled comments for each entry. So now again, I'm telling it, here's where I want you to look and it's gonna try to find it in the documentation and what field. And ideally it'll find these enums in the description for these bits and give them to me. Okay, looks looking pretty good. Okay, cool. So far so good. And yes, I like that it does the doctrine comments. I'm gonna say, please prefix each name with mag cha and also type def it as TMAG5273 mag cha in settings. So yeah, now it adds, I just wanted to add like a little bit more ahead because it's like there could be some other area where I want to use like X enable that was like too short of a, I don't know what to do with that. So I'm gonna go ahead and type in too short of a constant name and then I type def it for me. So that's good to go. So do I want to do a setter and getter? Not yet. Let's do one, we'll do a register setter and getter. So I think that there was a device manufacturer ID. Oh, sorry. Yeah, okay. So let's do this one. Now, please write a getter for register manufacturer ID is two bytes wide use, yeah, I've done this before. And then one thing I added just to make things faster is I, I say, hey, don't give me the function prototype. I'll do that last because I don't care. Like otherwise it spends all this time typing it and I don't want to switch on the code and don't forget the Doxygen header. So let's see if it can do this. This is register manufacturer ID. So we want to use the LSB and it's LSB order which is actually kind of the default. So it should make a bus IO register that's two bytes wide and then read the value back. Oh, interesting. So it's like, okay, I'm gonna do it as two separate registers, which by the way is like kind of technically correct but make one register that is two bytes wide instead. Shit, how can I run this? It's like, because I use slightly different wording the output's a little bit different. Okay, so let's see if this time. Okay, great. So now it's identified that, yes, this is a two byte wide register. So last thing we say, you can just return read value directly. Interesting, I have to tell it every time even though that's not usually my style. Like my style is always to return directly not to necessarily assign it but I think it got trained on some of my libraries that do that or it's not a bad style. Like if you wanna print the debug data or something. All right, so here's my first function. Oh, you know what? Past I squared C device, I squared C. Oh, you know why? Usually I tell it to make the class first. Like I just kind of skip the head. Usually I'm like, oh, make the class header for this. And so instead of having it be passing in the argument it uses the class function. This is a function that is part of, actually, no, let me, I had this little piece where I was like, I had this little thing. Okay, so it's going, I usually do that first where I have it to create the, oh, interesting. It didn't know that it's the chip name. Oops. The last command chip name is team and five, two, seven, three. Yeah, I'm kind of skipping ahead but because I had a previous, do I mis-type it? Oh, interesting. It actually like made a typo here, but not weird. Only in this, the definition of the file. Okay, so let's see, let's get it to finish and then we'll have it rewrite that register getter. I'll say you don't, like I'm kind of like jumping all over the place. Usually I do this in order and like it builds upon the previous instructions. And so it doesn't matter what order you tell it to do stuff. So like, I kind of like to start slow and easy and then I get to the more complicated stuff. And by then it's remembered all the previous commands. All right, so let me, yes, please make me be the fruit. Team ag 5273 class definition. Okay, what's nice is that it skips like some parts of it and then it like does remember like, oh, usually you have a begin and then you know, you let that get manufacturer ID. You remember that we had that function that it got earlier. So please give me the updated function code. So hopefully now it knows it's a member of that class. It'll give me the object name here, colon, colon, and it will use the built-in I2C dev device that's like the class member variable. It's kind of interesting. I mean, like, you know, again, it seems like it's kind of slow, but like once you kind of get the hang of it and like you get it started, it does go much, much faster. So I'm still learning and if anybody out there is like writing this kind of code with ChatGPT, like absolutely please post the comments and give me hints. I've only been using this for a couple of days and it's like, I'm still, again, you know, it's like, okay, like remove this watermark and it like, I totally failed at doing it and I tried to have it do some translation stuff and it wasn't good at that either, but this so far is okay. And what's nice is that, you know, less typing and also it can be a little bit more tired more in this code. So interesting stuff ahead and you'll see many more libraries coming out and then maybe next week I'll try a circuit Python. I also think it's like, why should only like the extremes be the voices and the stuff? Like, if you use it, you're the worst person in the world. If you don't use it, you're a dinosaur and you know, we're gonna be living in space. So there seems to be an opening for reasonable people who like to get stuff done to try out some of these tools to figure out if that makes sense for them. Yeah, and it like doesn't like, I've got a lot of comments people like, oh my God, I mean, I'm out of a job and it's like, no, you still need an engineer with skills to run the prompts but it's much, much faster. And it is error prone in some ways. You saw it made multiple mistakes but it's less like at least, you know, like here's the thing if I was writing this code, I'd have to review it at the end anyways. So it's like, if I'm gonna do a code review I might as well code review, you know, this, the chat GBT output. Anyway, so I thought it was kind of interesting but like, you know, it's kind of surprising. It's like, oh, it like remembered that like we wrote this function it made it a member function. And then it's like, okay, now I'm going to update it to use the class member variable. Like it has memory within the chat. Again, one of the things that I'm doing now but I don't know if I will do forever is starting a new chat per chip. I should probably actually just have like one long chat where it's like, okay, switching gears now we're gonna do a different chip but learn the stylistic things that you did before. So I have like one chat for all the register style, chips and one for like the command style chips. All right, so definitely chat enough it's time for the great search. Where? The great search brought to you by Digikey and Adafruit every single week. Lady Adafruit shows you using your powers of engineering to help you, yes, you find things on digikey.com. Thank you so much Digikey for making this segment possible. Lady Adafruit's on the great search this week. Okay, so we were talking about earlier in the show the driver that I wrote for the VCNL 4020 which is a proximity and ambient light sensor with a, you can actually see here, like that's a really zoom in. There's an IR emitter here. This is like a little, oh, thank you, IR emitter. And then this is a reflectance detector. And so this chip has a pulse of infrared light that goes out, hits something, bounces back. And then the amount of light that is reflected back is measured by this chip and you can read it over I squared C. Maybe you go to the overhead, this might, you can see I have a little demo code running here that pulses, that's it doing a measurement. So every time you see that pulse, it's a measurement from that IR LED. Okay, so you go back to the computer. I guess that would be fun to turn it off. And these are really great for doing distance measurement. And it kind of reminded me that, you know, one of the first sensors that I ever used as like a youngling engineer was one of these sharp GP2Y0821SYKIZOF. This is like a classic early, I think it's like a late 80s design sensor, very simple. You don't even know if, I mean, it has a chip in it somewhere, I guess, but you know, it's very, it's clearly quite old. And what this does is it has an emitter LED, I think this one, maybe this one, and it sends out again infrared through this five millimeter LED and then the light bounces back and then you get an analog voltage output. So power, red, three to five volts, ground, maybe it's just five volts, ground black, and then the analog signal back is white. And this was like a very popular sensor. It's pretty expensive and it's not as used as often. But in the beginning, when you didn't even have a microcontroller, like you could hook this up to a comparator. And so when the analog voltage went above or below a certain value, you could detect, oh, somebody is within this distance or you could change the brightness by having the analog voltage feed into some other, you know, like current amplifier, whatever. So these were very, very popular. And the VCNL 4020 is kind of the next generation of that. I wanted to find a chip that could be a replacement for this. One of the nice things about this particular chip is it can go up to 80 centimeters. So it's like, you know, almost a meter. You might be saying like, oh, you know, why don't I just use TemmaFlight chips? And you can use TemmaFlight chips. We have various TOF, I will say this is not, by the way, this is not TemmaFlight. One thing you can, the reason you can tell it's not TemmaFlight is whenever you see these two lenses, it's usually infrared, not TemmaFlight. But the VL53 and VL61 family are true TemmaFlight, but they're also a little bit more expensive. They're about, you know, 15 bucks for a breakout board from us. The chip itself is like, you know, $3, $4, which is not a lot, but it is more than an infrared sensor. Infrared sensors are gonna be like on the order of a dollar. If that two bucks is important for your bill of materials and you don't need the precision, you might be happy with an infrared sensor. So let's go ahead and dig a key. And then here is one thing you should not do. I was like, oh, I want a distance sensor. I'm gonna type in distance sensor. And what's interesting is that there's two kinds of sensors, there's distance sensors and there's proximity sensors. And they're classified differently. Of course, these are the expensive automation ones, but let's look at the, well, 6,000, the less expensive ones. Actually, let's look at the normally stocking ones so we don't look at the ones that are unavailable. So these are the time of flights, they, you know, VL53s and 61s. These sensors, and even the TMF88s, these sensors actually will give you, I believe like actual true distance, they'll tell you like millimeter and centimeter, at least the VL series will. The TMF, I don't know, I think this is also time of flight, even though it has a lens there, I think that's just a lens for the laser, but then you've got this like that GP2Y, right? That familiar family appears here under distance. So there's proximity and there's distance. And technically the distance sensor category should just be sensors that give you like literal distance, like ultrasonic or time of flight or like calibrated infrared, but it's kind of gets mixed up a little bit with the category because it also has, the category is old enough that it probably started with this GP2Y series chips I showed you the analog outputs and then start getting like the digital sensors mixed in with it. But what we really want is a proximity sensor, which is gonna be less expensive because it's not gonna give you, it doesn't give you like true millimeter output, it's gonna just tell you like, is something closer or farther, near or far as it were. So let's look at, I think it's under, we don't want industrial, we're just gonna go for simple, so proximity sensor. And let's go for active and we'll do infrared ambient light. And actually, let me go to the proximity sensors section. Okay, so these have, again, it's like they're kind of mixed together. There is the inductive sensors and there's also piezoelectric style or like there's this infrared proximity that's like panel mounted, PIR sensors. So everything kind of got mixed in together. Which I'm already did. So I actually looked for the 4020 because I was like, okay, the 4020 is good but I want it to be a larger distance. And it turned out that this was actually an ambient lighter IR sensors, which is tough. So if you're looking for these sensors, they might be split across three different categories. You might have to look in distance sensors where you saw that analog sharp distance sensor, proximity sensors, which seems to be more true to either on or off, either it's there or not. And then ambient lighter IR sensors. The reason probably these sensors are in this category, the infrared SMT ones, is because they tend to not only do proximity sensor, but they also do ambient light sensing or like IR, like in general, how much IR light is in the area. So let's go for active with proximity detection. And then I want I squared C output. SPI is fine too. And let's see what's available. So there's a couple of options here. So this one, for example, is ambient IR. Oh, I want surface mount. Hold on, get surface mount only. Okay. And then I'll do normally stocking. Some of these here are not, there's a mix. So the Venom 77, I happen to know this chip, it doesn't do proximity, it just does optical, but it is I squared C. So I'm not actually sure like why it ended up coming in to proximity detection. I think it can do basic like infrared detection, but it doesn't have an emitter. You want chips like this. This is the APDS9930. This actually has a couple of things. There's ambient, I think there's RGB. And it has proximity. And then the 9960 also does some basic gesture recognition. And you'll see that the prices are less expensive. So you can get these for about a dollar, a lot less than you have to spend for the time of flight sensors, which are easily like three, four bucks a piece, because you have this like laser dyed inside. So a lot of the VCNLs and APDS, Sylobs has a couple of chips, but they're a little bit more expensive, to get more detailed into like which one of this family, you go to the Vishay website, which you'll have, you can search in more specifics for like the length that you use to search it. One fun tip is the wider apart, the LED and the detector, usually the farther the distance. So I checked that, I just actually kind of like looked at a couple of these and these are like, okay, the sensor detector, and the emitter and detector are very close together. But I went to this one, the 4200, and what I like about this is first off, there's a lot of it in stock, 50,000 pieces. It's inexpensive, it's a dollar, and it can do up to 1.5 meters, which is kind of nice. And you can change, you know, you can do settings and stuff. And it's very simple, it's just power ground, interrupt, and then data and clock. So, you know, good for and amazingly, up to 800 milliamps pulse current, that's the trade-off. If you're doing the high, the wide distance, sorry, the large distance sensing, the IR LED has to be very powerful in order to reach and bounce off of something about a meter, meter and a half away. So this does use a very short pulse, but a very strong pulse of current. So you'll need to make sure that you have a huge ass capacitor on the board where you're using the sensor because your power supply can't necessarily supply 800 milliamps, but, you know, maybe for that microsecond or less than it is, if your capacitor is like 100 or 200 microfarads, you may be able to buffer that current to get the data out and back. So this is a very interesting chip. I think this is, again, inexpensive. We'll do the job for basic distance proximity measurements. It has a very similar design style. It's so interesting you have to have an external transistor for it, a very similar interface for writing, for getting the data as the VCNL 4020, which is really nice. And it will get you like the output in 16-bit, light level, white LED light and proximity sensing detection. And then you can do threshold detection as well. And the drivers are, while it's a non-trivial chip, you know, there's a lot of registers, it's definitely gonna be easier than trying to write registers for the time of flight sensors because all those VC53, sorry, not the, it's a call, I forgot the VL, the VL53 series, the drivers, you can't really write them from scratch. They are like very complicated and they have a big state machine inside of them because there's like a little chip running the whole thing. It's not like a solid state solution. So if you're trying to like write a driver from scratch from a new platform because you can't get the time of flight sensor software for your platform or whatever, it's not ported over, it might be faster to go with an infrared sensor. So this is my pick, the VCL 4200, lots in stock. How's your church? And that's our show for tonight. Thank you so much everyone, lots of fun things in store ahead. We will see you very soon. And don't forget to check out our previous thoughts and posters and more, make a robot friend, not robot enemy. That's right. Make a robot friend, not robot enemy. And that was said to me, by a senior engineer at Sony who worked on humanoid robotics and he told me to her own son, make a robot friend, not robot enemy. When I was asking about some of the philosophies behind Ibo and Curio for those who know about some of the Sony robotics, so it hit hard. And he was right for all sorts of different reasons. So we'll see everybody. Next week. Bye everybody. So we'll see everybody next week. Bye everybody.