 Hello and welcome to the show. It's me, John Park, and it's time for John Park's workshop. Here we are. We are ready to go. I've got some cool stuff I wanna show you today, some stuff we can work on. We'll take a look at last week's project a little, kind of finish that up, wrap that up, put a bow on it, and do a little demo of some fun synth midi action on a Game Boy. You may have seen a little preview of that last night if you tuned in for our show and tell. But I've got some extra special fun surprises up my sleeve in regards to that. Hello to everyone over in our YouTube chat and our Discord chat. If you wanna join in those chats, particularly if you are watching on Twitch or another place where we're not monitoring the chat, then head on over to the Adafruit Discord, which you can get to by going to adafruit.it slash discord. I think there's some other address. Is it discord.bb slash adafruit, something like that. I heard Noah and Pedro mention that. Let's see. Oh, hey, thanks, Mike P, cool shirt. Top pot yet. When I worked at Disney Feature Animation, this was a shirt we got. And this one's kind of fun historically because it showed what productions were happening at the time. This was Chicken Little. This was Meet the Robinsons. I was working on that at the time. This was called American Dog, which later became Bolt. That's Rapunzel. And that right there was gonna be Toy Story 3, done by Disney down here. There was a sequel studio that was being opened down here in Southern California before Disney had purchased Pixar. Disney used to just distribute for Pixar, but didn't own Pixar. And so they were going ahead and making a Toy Story 3 without them. Somewhat thankfully, that isn't what happened in the rest of this history. And actually the reason that I think subconsciously, the reason I wore this shirt today is that I was just talking with Katnien and Noah and Pedro about the Toy Story Zoetrope that they have on display at the Academy Museum here in LA. The Academy of Motion Pictures has a museum that's fantastic. If you're ever in LA, I recommend it. And the Toy Story Zoetrope used to be at Disney California Adventure in the animation exhibit, sort of fake animation building there. They moved it, but it's great. If you've never seen it, it was inspired by the Totoro one or the Ghibli one at the Studio Ghibli Museum. Anyway, I digress. I'm also hot, so I'm gonna take off my sweatshirt here and let's get rolling. So first thing I will mention is our Help Wanted board. If you want to post your resume and have it be seen by Adafruit types of companies and people in this community, then I recommend you head on over to thejobs.adafruit.com site. And if you click on the available for hire, you just need to be logged in with your Adafruit login. Otherwise this page doesn't show up. But if you're logged in, this will show up. It doesn't cost anything to look at the available postings and people show their skills here, as well as where they are. And you can click on those to find out more, see resumes and CVs and things like that. But if you're looking for people to do, we've got some 3D and CAD people, electrical engineers, people who do both, embedded development, web development, all kinds of people posting their services there and it's free to post, it's free to go and browse. So go check out jobs.adafruit.com. If you are in the market for a person to do stuff, you can't, you can't buy people there, but you can hire them, hire them to do stuff. Right? I also have a show on Tuesdays that you may have seen. I know some of you tune in. It's this right here, JP's product pick of the week. And every week I show a product, either a new product or something from our vault or our archives and show you how to use whatever it is. This one was a new one, a really cool one, one that we're actually gonna talk about a little more today. In fact, this is a bit of a preview of something we'll be working on today that was the KB2040 keyboard. And the show is about 15 minutes. You can get a humongous discount. It was 50% off during the show. You can watch the show inside the product page. And I also like to do this little one minute recap, which is this right here. It's the KB2040 keyboard. This is the board you've been looking for if you've been wanting to do custom keyboard kits. This is the Gherkin, just the smallest of the smallest usable keyboards. I realized last night, and then Lady Aida texted me the exact same idea, which is this is now the world's ultimate wordal keyboard. If you know the game wordal, all we need is alphabetical. So I won't type any answers in here because I don't want to ruin this is today's game. But I'll show you that this is just a working keyboard. I can even try to press enter and it'll say that's not in the word list because that's not a word. And I'll delete here, pull this little bottom plate. This one's made all of PCB for four materials. So we have a key plate on top to hold the keys steady. You have the PCB itself. And then we have our KB2040. There it is. It's the KB2040 keyboard. Yes, the keyboard. And you can of course use it also for any kind of pro micro sized thing. If you have a project that used the footprint of a pro micro Arduino, which originally by the way was a SparkFun creation. I think it was, I wanna say the pro mini was an Arduino one. The pro micro was a form factor developed by SparkFun. Became super popular for keyboard builds, among other things. And now we have a board that's been compatible with it. We have the itsy bitsy, which is I think the same size, roughly, maybe exactly, but is not the same pin out as a pro micro. So you had to do some bodging and things or make a little carrier plate or something. But now with the KB2040, just use that instead. What does that get you? It gets the RP2040 chip. It gets you the use of circuit Python if you want, as well as Arduino. And probably micro Python maybe a few other things, I don't know. All right, well, let's see. I think this is a good time to dive into our circuit Python Parsec. I'm really excited about this one, both the content and the demo. So I don't wanna sort of over hype it, but it's gonna be good. Yes, circuit Python. Okay, here we go. For the circuit Python Parsec today, I wanted to show how you can use user input from the USB serial REPL to control code on your microcontrollers. So right here, I have a Feather RP2040 and I've attached to it or kind of held close to it a little Macintosh, sort of classic Macintosh key cap that my daughter gave me for Christmas. So that's a key cap and has a little light pipe running through it. So we're gonna see LED lights showing up. Now for the actual code part of this, you can see in my REPL, it's given me a list of colors and then it says type a color name from the above list. So I will go ahead and type in how about pink and you can see I've just changed the color of the NeoPixel on the microcontroller. I'm just piping it through this cute little key cap here and I can type in other names in here. I can type off, I can set it to white. I can even type something that it doesn't understand and it's gonna say, hey, I don't know that one. It's not from the list, so give me something from the list. So how does this work? Well, the key component here, if you look in my code, I've got some libraries I'm importing, I'm setting up NeoPixel, I've created a little dictionary of color names and color values and then when we're running this, we're gonna print out the little instruction to help people to type in something and then this is the key element. User input equals input and that's it, input in parentheses. So the next thing that happens is it waits for you to type something in. It just sits there and watches the REPL, waits for you to type something. Then it proceeds. In this case, it echoes back the color you picked and then it sets the color of that NeoPixel or doesn't if you've picked something invalid. And so that is how you can use user input from the serial REPL over USB inside of CircuitPython. And that is your CircuitPython Parsec. Yes, over in our Discord chat, Todd Bot said that the lit up Mac key cap is adorable, it is too adorable. I'll take it off of here, you can see I just have it. One second. I just have it resting on top of the status NeoPixel that's sitting on top of the feather there. So that's all that was changing. But look at that, it's even got, you're not ready for this. No one's ready for this. Are you ready for this? We're not ready for this. It's got to matter. No one's ready for this. Are you ready for this? We're not ready for this. It's got a magnetic front and it came with some little different screen messages you could put on there. This one that's like a little happy Mac. I forget what the other ones are, but too cute. It's meant to go on an escape key that has underlit. So there you go. That's so cute, I can't stand it. All right, so let's see. Paul Cutler says, I want to use in the REPL for user input. Yeah, it's kind of cool. I think it would also be maybe confusing, but maybe just kind of awesome to use one of the microcontrollers that has a board built onto it, like a pie portal, let's say, because without doing much setup, you can have the REPL show up there. And so even though you're sort of cheating and using a computer and USB to do it, you could have what looks like a little display that you're typing into right on the microcontroller, which is so great. HotBots is going to get 101 of them. This actually came with a printer as well. There's a big honkin, I don't know, laser writer or something, Apple writer style printer and a little magnetic, there's a keyboard, tiny little keyboard that sets on top. I think I showed this before or I posted a photo of it. I don't know where she got it, but it was a Christmas present and I'm so pleased about it. Jim says I should add a mini TFT to the Mac, to the key cap, that would rock. All right, so we've got a couple cool things here. So much stuff, in fact. So last week we were building the joystick and arcade button controller. This is my latest iteration of the case. I wanted to refine the design after last week. Someone, and I forget who someone in the comments mentioned that it really should have had some more finger joints, especially on these long panels. And I absolutely did. So I added these side ones on the long and short ends. So now there's just more of this that grips into the top. I still have my sort of double layer design there. This is a sort of quick eat prototype that I did in medium density fiberboard, which is pretty good. It cuts fast. I also like doing cardboard, but I didn't have any, but this cuts pretty fast and is inexpensive about probably $4 for this entire construction of this material, because I got, I think, what two foot by two foot sheets of it at the hardware store and then cut them on the table saw. So this design has just a few other refinements to it, but otherwise I'm happy with it. I haven't yet cut it out of acrylic, but these are the same thickness. These are three millimeter or roughly eighth of an inch. So I am publishing that design with the guide that I'm writing and end of last week's show got it all put together and then it wouldn't run. And this is because I forgot to solder one pin, one key pin. It was I think the SDA pin, the serial or the data pin of I squared C. It had never been soldered in all the time. I'd been prototyping this on the bottom of the feather tripler. It was just coincidentally touching most of the time, but after moving around enough, it lost that connection. So it wouldn't restart the I squared C bus properly. So I got that fixed. And then I went to town on the software and my collaborator Todd Kurt had written a an arpeggio library called ARPY. So I was able to incorporate that. And I was able to add both MIDI over USB, MIDI over classic DIN5 MIDI, as well as the onboard audio library synthesis. So I wanted to show some stuff related to that. The nice thing about the arpeggiator library ARPY is that it has some helper functions that allow you to have MIDI values for notes in your code, which are nice and neat. They start at zero, they end at 127. And it has a little helper function that converts those to the frequencies of actual waveforms in Hertz. So I'll show some of that code. I think it's kind of interesting to look at. One other thing I added was a thing that's sometimes called MIDI panic. And that's really useful when you have a lot of MIDI gear connected. Sometimes a MIDI note on will get sent and then the MIDI note off will not or won't get received. And then you have a held note on a synthesizer. So MIDI panic usually just sends the off signal for zero through 127. So I added that, I'll show you how that works. But first let's do a bit of a demo. So what I've got going on here, I'll show this while I talk about it actually. This is, and I'm gonna turn off this fan so we don't move the camera around. All right, so this is, you can see the arcade synth controller with the joystick and all the lighted LED arcade buttons. It's connected via a little MIDI hub to that Game Boy there. And the reason that's possible is that Game Boy has a special cartridge that Scott Shawcroft created. He created the hardware design and made a few of the actual boards, gave me one, it runs Circuit Python. And it can talk directly to the sound subsystems of the original Game Boy. So it uses the, it sort of pokes the addresses of asking for square waves and pulses and noise, changing things like glides and portamentos and sweeps and stuff. So those are all the sort of sounds that you're so used to from the Game Boy games. So we can talk to those over MIDI. And since some of those require MIDI CC values, which are usually knobs, I've got that little fader box there called a 16N. And that is also sending some MIDI through that little hub off to the side so that I can change parameters. So let's do a demo. Let me pop up a top view there and this is, I'm gonna power cycle this actually. Oh, and I'm also gonna try to open up my Discord on this iPad so I can watch the chat. It's gonna require a login. Let's see if I can do that real quick. No, it's not, all right. Sorry about that, but we'll use that later for something. So this cartridge is now waiting to receive MIDI notes. It is, I have an output running to a little amplifier over here, but otherwise it's the straight audio signal coming out of the Game Boy. So this is gonna send note information and I can pick the root note, but it's gonna send an arpeggio. And let's see, it's to happen. Okay, and what I'm gonna do is I'm gonna power cycle other things as well. All right, so that's sort of a standard square wave on this. Let me pause it and try to change some of those settings. I'm gonna slow this down a little bit. So now you can see it's doing this sort of sweep thing. That's all happening on the Game Boy via MIDI. MIDI told it to do that for the octaves on these. I'm sending some signals that are out of a range of what it wants to do, I think. So, okay, so let's get on this one that's kind of stable and you can actually hear the notes. So now I can change the arpeggio pattern. This is kind of this major triad. Now it's a minor. Now this pattern, we can speed it up. Can also expand the range that it plays within that arpeggio, even more expansion. So it plays that in three octaves. Go back to the original. And this is just changing the root notes again. Can also adjust the octaves with the joystick. And we got other patterns. And this is a good one just to leave while I just try to get some different sounds here. I'll slow it down, I'm gonna pause it. Oh, I've angered it. The Game Boy's confused, so we'll power cycle it. And that might've just been it got that, actually my MIDI panic may be causing a problem because it sends those very rapidly. And I'm not sure if this can handle the note messages coming that fast. I hadn't tested that on here before. There we go. Hey, that's fun. All right, we'll turn it off there. So, let's see. Let me check and see if there's any questions on that. And then we can take a look at some of those code things that were happening. Oh, sorry, Dexter asked if I could boost the Game Boy's sound a bit. Sure, let's boost that a little bit and just get that cooking again for a second. And then we'll dive into the code, turn that on. Yeah, sorry, I'm just picking it up on my lav mic here and not piping it directly in. All right, so this will be a lot louder. So I got a little sweeps in there. So that's hopefully a little louder and you can hear what was going on there. I'll turn this one off now. So one thing I'm gonna do is actually take the cartridge out and bring it over to the workbench to show this because I've talked about it before in the show, but I don't think I've ever shown it up close. I don't think I'll dig it apart because I've only got one. So I wanna be gentle with it. But let's jump to this little down cam here. So you can see Scott dug a Daffy Duck cartridge out of the thrift store and pulled out the existing circuit and put in his circuit Python microcontroller custom build in there. And what I'll do is plug it into my computer over USB and I think on this one, I do have to press reset for it to be recognized, let me grab something to press that with. Probably the end of the screwdriver will work. Okay, so if we go back to there and I'm gonna close this up and open the circuit Python drive. So this game cartridge shows up as a circuit Python drive here and I've got the code.py, which is what it's running. And you can see here, there's some MIDI setup. So just some, the clock control change, which is the CC knob stuff, node off, node on and MIDI message are on here. This is running circuit Python five, I think. So this is a little bit older. It's a couple of years ago that Scott made this. And then we're setting up, oh, I didn't realize this but we're reading on channels zero, one, two and three. And now if I remember, we might have been doing different voices inside of because there's four voices. We might have been controlling those when Scott and I demoed this with four different MIDI out channels. The elements that I was changing there with the CC sliders that were obviously really touchy were these sweep time, sweep direction, sweep shift and set sweep. So those were coming in over, let's see, MIDI channels. Here we go. So I set those to be MIDI channels 32, 33, 34 and 35, which happened to be the first four rows of that 16N fader box. So those were what we're sending the different messages to change those, say pulse change, sweep time, sweep direction, sweep shift. And I'd love to explore that more. It might actually be useful to try using, there's a MIDI command line MIDI messaging program written in Python. And I can't remember its name now. It might just be called sendMiddy that you can just send very explicit values from the keyboard or from an interface that you make, which might be a nice way to test out some of those different voices and different parameters for sweep and things like that. So that's the cartridge in a nutshell. You can, I think, get, I think circuitpython.org has this board listed so you can go and check that out. I'll go ahead and unplug that now. And you can also see on here there's a MIDI out and a MIDI in channel. And so I think one idea Scott had was, and I think he may have demoed this at one point is having a little orchestra of them where MIDI messages are being sent, sort of piggybacked from one to the next, which is great. So let's see, other stuff about this guy here, the arcade synth and controller. In fact, let me go over here and try to demo a different thing real quick. So what I'll do is, I'm gonna remove the Game Boy from the mix. So this has been the sound source we've been hearing and I don't need this guy around for this either and I'm not gonna output any MIDI so we can unplug that. So now the only thing we have right now going on is power and then I'm gonna plug the audio output, jack into my amplifier I have over here to the side. And now this is going to use the Feather M4 with the audio library as the synthesizer. So this is changing the range of that arpeggio and this is the pattern. It'd be nice to have some reverb on there so it doesn't just die when you stop it. So that's all audio library stuff and one of the reasons I wanna show you that is I wanted to dive into this part of the code a little bit. So let's jump over to about this Adam's screen here. Yeah, that'll work and close this. So what you're seeing here at the top of my code window, I've got four tabs here and so to answer Dexter Starbird's question, the arcade controller is an Arduino sketch, that's right. And so it's actually an Arduino sketch, this arcade synth controller.ino.ino. By the way, I just committed this yesterday morning to the Adafruit Learn guide repository on GitHub so you can go and check it out right now. It's under the arcade synth controller directory and then I have these three supporting files here, kind of like libraries or what you'd call them, helpers. So one is here, it's called ADT.H and this is the audio library that I'll show you in a second. The audio library has us create little nodes of synthesizer parts, kind of modules and patch them together. So this is what defines the parts and how they're patched together. So you can change that and make a very different sounding synthesizer. The RP.H, I mentioned this is the code that does the arpeggiation. And so you can take a look at this and see how Todd set this up. One thing that's notable at the bottom here is the set of patterns. So you see there's this little array or I guess array matrix that is the different arpeggio patterns. So these are the notes that get played. The major one is 0, 4, 7, and 12. So those are sort of relative intervals which are then mapped onto whatever your root note is. So your root note might be 32 or something and it's gonna then add four, add seven, add 12 to that to play that major scale arpeggio. The minor is a 1, 3, 7, 10. There's a diminished, a suspended fourth. There's just octaves, just jumps up and down octaves. There's one that goes up an octave, up two octaves and drops down an octave and so on. The root one is that last one I was playing that's just tapping the root note there. So you could go in here and make some different patterns if you want. So the other helper I mentioned is this MIDI to frequency. And this is the helper that just takes our 0 to 127, which is the possible MIDI notes that can be sent and translates those into hertz. And pretty accurately, by the way, this thing is tuned pretty well when I've played it alongside of a synthesizer, like a software synthesizer or hardware synthesizer, they're in tune, so that's great. And then in the code for the main Arduino sketch here that I'm running, here's what I've got going on. Let me point out some highlights. So we're using tiny USB, so we import that. We're using the bounce to library, which is the debouncer that I'm using for the joystick so that that will not get multiple hits when we tap it. Joysticks switches can be kind of noisy. And also you don't wanna hold it for, you don't have to worry about being really quick on the draw with it. CSAW is how we're communicating over I squared C to all of those four different arcade LED button boards which in turn each control four sets of LEDs and buttons. And then here we're importing those helpers, so include ADT, include MIDI to frequency and include RP. The rest of this, I've gone over some of this before, so I'm setting up switches, I won't go over into too much detail. I have four different I squared C addresses starting at three A, B, C, and D, and those are the four boards that we are talking to. And then I have some setup for the digital pins that we're reading the joystick on, setting those up as debouncers, setting up my MIDI instances so that we can speak both USB MIDI, which is how you talk to a software synthesizer on your computer, as well as that classic MIDI that I was using to talk to the Game Boy. And then this is some of the audio library synth setup. So this is a four voice synth, that one you were hearing there is four waveforms that are just detuned from each other slightly. So it gives it a nice sort of thick sound. Sets up a variable here for filters. You can adjust some filtering parameters, especially if you want to extend this and add a knob to it or a fader, you could use the little I squared C stem QT fader board and give yourself a filter sweep knob on this, which would be pretty cool. And then some arpeggio offsets for octaves and root notes are set up as variables. We create the arpeggiator, set the beats per minute, set our offsets, and then I have a variable here for whether the arpeggio is on or off. The main thing I'm using that for, I'll skip some of this setup stuff, which is pretty typical, and we'll look at what happens when we press buttons. So here's arpeggio getting set up, the synth library getting set up, which we'll come back to. We have some little functions for note on and note off. And let me see, am I doing it in there? No, I'm doing it in arcade button. So if you look at, this is the section of the code where arcade buttons are getting pressed. Arcade button check. So this is its own function, it gets called in the main loop. When a button gets pressed, if it's the first 14 buttons, those are the piano keys. So I'm doing one thing with those, which is pretty straightforward, just calling the arpeggiator to change the root note. If we hit that first button on the panel, on the left, on the front panel, the first white button, that is the, sorry, I misspoke before, it's the top 12, zero through, yeah, zero through 12, this is button 13. So button 13 here, or the 14th physical button, is when we turn it on, it starts the arpeggiator. And I also have this variable that says the ARP state is on, it's true. Otherwise, when that value changes, one of the things besides telling the arpeggiator to be off with this ARP off, is I'm running MIDI Panic. And MIDI Panic, I mentioned before, is that function, let me find it up here, that sends every note. So for M, it's a variable I made just for like MIDI note, M, starts at zero, until it gets up to 127, loops adding one each time. And what it does is it sends whatever that note value is, with a velocity of zero, which is the same as sending a note off, a note on with velocity zero is pretty common. And over MIDI channel one, same for classic MIDI. So both USB MIDI and the classic MIDI get that. This little yield here, prevented it, at least on my software synth, from flooding and sending the messages so quickly over USB in particular that it didn't get read. So not sure if I need to add a little time for the Game Boy or what's going on there. So that's the MIDI Panic button, and that's all it does. Sometimes I see people asking about how MIDI Panic works. Is it just a particular MIDI message that's part of the MIDI standard? And it is not. Maybe in MIDI too it's changed, but in regular old MIDI, classic 1983 specified MIDI, sending MIDI Panic is just whatever piece of hardware or software you have, running through and setting every, it's playing every note off that it can across the whole keyboard and then some. So let's see. Anything else that people have questions about in code? Let me know. But otherwise, that's gonna wrap that up and you can go and build one. I'm writing the guide for it. The code is up already. I'll be putting up, like I said, the files for that. And now what I wanted to do is kind of switch gears into keyboard land, so different kind of keyboard. And that's this guy. Let me switch full view here for a second. So this is what I'm now calling the Wordle keyboard. This is a PB Gherkin, which is a 30%, what's called 30% keyboard, it has 30 keys. And actually, as a point of reference, I was thinking about this. It's not 30% in terms of, there's a really dusty keyboard under my workbench here. Let me blow this off. It's definitely not 30% in terms of size because here's a full, full keyboard. This was a, gosh, I forget the brand of this one now, but it's an old, old keyboard, like 1982, 83 with Alps switches in it. And I'm totally blanking on the name, but you can see we can fit a lot more than three of these guys on there. So it's 30% is sort of like seven of these would fit in there. I think that's 104 key on that one. Super duper battle tank. If there's any super keyboard fans in the chat, you probably know what that one is and can remind me. So, but this colloquially called 30% keyboard. It's a ortho linear. So that means there's no stagger to the keys. They're stacked on top of each other. There's a PCB kit and you saw me mention it during the product pick of the week. I'll show you the site for that again. It's open source projects. A lot of people will sell boards for it and you can modify them if you want, but it is pretty straightforward. It's, it doesn't look a lot different than this other macro pad kit. And I got these from Key Hive. So you can find these on Key Hive, I think.io. But there you have some spots to solder in keyswitches, some spots to solder in diodes, because it's a diode matrix. And then the spot to solder in your either pro micro or now the KB2040, if you wanna use that board. So that's what's going on under there. A bunch of diodes and a KB2040. And then what I showed the other day was that this is actually, now that I've rearranged it a little, this is pretty much exactly the keyboard that you were faced with in Wordle. So if you're not familiar with Wordle, let's pop open. Okay, so I haven't done today's Wordle on this browser. So nothing's gonna show up. It won't spoil it for anyone, but that's what Wordle looks like. It just gives this little page of instructions here. You guess a word and then mastermind style, it either tells you that you got a letter correct and in their correct spot by making it green, correct letter in the wrong spot by making it yellow. And you have five guesses or six guesses total to hone in on the word. And as you can see, the way you interact with this is same on the phone or on an iPad. It's with that little touch screen keyboard there, which on the, actually I've never even tried yet. You can use your regular keyboard on the computer, which means you can also plug in this and have a highly focused distraction-free Wordle keyboard. And in fact, I'll plug this in and we'll use it. So this is USB-C is what we've got on the side of the KB2040 there. So I'll plug that in. And this has a little more up its sleeve than just typing these alphabet characters that you see there. So let me adjust the view here a little bit. Oh, wow, my little camera's broken. You'll be able to see it, but it's really floppy now. I don't know what happened to it. Let's see, let's do a down shooter of that. Chrome capture there, let me end the corner. So you can see here, sort of, I can get it to stay. Yeah, it's also, the camera's like, boop, I'll hold it out there, let's focus. The camera has a little joint in it that had some sort of friction lock in it that just gave up the ghost. You know what, I have a little, I'm gonna use this to try to prop it at the right height. Sorry for the camera work there. Okay, that'll sort of stay. So, let's move that over a little bit. Okay, there you go. So again, I won't spoil today's. I'm not gonna type, I won't hit enter or I won't type real words. So let's say, let's, is that really plugged in? Reway, okay, so if I hit enter on that, which is the little enter key right there. Oh, sorry, that's the, that's the delete. So you can see the way they've got their keyboard arranged, I've got it about the same way. So I can, and then over here is my enter. That's not in the word list. And so that's how that's gonna work. So I won't get any further with that. The, oh, someone said that they, over on YouTube, Roy Kozitski put the link for the Gherkin PCB GitHub on the Discord. Thank you. Thanks, Duane says the keyboard's cool enough to make up for the camera glitch. I don't know how it just suddenly died. That's why there's got, gotta be like a little friction lock or a spring in there. And it's like a arm, articulated arm that just went boom. So now what I wanna do is show you some of the kind of functionality that this keyboard has beyond just doing Wordle. So let's, in fact, let's switch over to this view. And I will, whoop, open up the code.py running on that. So again, this is a circuit Python and KMK keyboard here. So I can just treat the drive, treat the microcontroller like it's a USB drive, so I don't have to compile code in something like Arduino or create a firmware like you do with QMK and flash it to the drive. Instead, we just use it like it's a USB drive. So if I open up code.py here, you'll see this is where the imports for KMK are happening. KMK, by the way, is like QMK. It's a architecture for creating mechanical keyboards or don't have to be mechanical, but for creating keyboard layouts, functionality, extras like knobs and screens. And very importantly for a keyboard this small, it allows us to do layers. And so you can think of layers, you're actually, we're all used to layers from things like the shift key, right? There is not a set of 27 uppercase and 26, not a set of 26 uppercase English letters on a keyboard and another set of lowercase ones. We use the shift key to change the meaning of a key. So layers work a lot like that, but they're just more, they're utilized more heavily because in this case, you'll see if I create a little, let's put a little comment block there. So if I type in here, right, I can type fairly normally except I got to come over here with my thumb for space. If I want a exclamation point or I want a number one, then I will hold one of these keys and now you can see this top row becomes the number row. If I hold this one, I think those become, yeah, the punctuation. So you just need to memorize them. That's the idea with these. And by the way, I'm not here to try to convince you that this is right for you. I'm just trying to show you what it is. This is probably not right for me, but it is interesting. So there are some other things missing from this, let's say a number pad. And I'll show you how this all is set up and how this works in a second. But if I want to use those, I'm going to use my third layer. So I'm going to hold the button that allows me to go to my third layer, which is the C key. And now I can do down, up, left, and right, or I can do them over here, I think also. Oh, that wasn't it. So left, up, down, right. Yeah, it's these four originally. So let's take a look at how this all works. The sort of key thing is some keys have multiple functions. And using these, both mod tap and layers, allows us to set up using, you can see there's these two modules, layers extension and mod tap. Allows us to set up things that are layered keys, so they can do multiple things. The, let's say, shift, or rather space key. Where did that guy go? It's the first one here. So space is also layer one. So things kind of start on layer zero. So that means in layer zero, we have this key map that you see before you, where they're arranged the same as the keyboard. So Q, W, E, R, T, Y, and so on. The, instead of it just being KC space, this is function one space. And so function one is the, that calling up a layer. Whatever next set of key mappings you see is what function layer one does. So this is number one, number two, number three, number four, so those are the numericals, all the way up through zero. And then this is your function row, up to ten. And then there's a delete key over here. Where you see X, these don't do anything. And some people will set those up as, instead of a no operation, they'll set it up as a transparent layer, which means it does whatever is under that layer. So that would, in this case, use the enter, or the control Z, or the alt text, it would use all of those. If we need to move to layer two, that's the backspace key. So holding backspace gives us this next set here, which is exclamation point, at symbol, hashtag, and so on dollar sign. So you can see here KMK, if you look it up, and thank you, some people put it into our chat over on Discord, so you can go check out KMK. Dexter Starboard said, my other keyboard is a digikeer. Yeah, not too far off from it. Some people would probably be way faster using a Morse code keer than this. But it's all what you learn. I know people get good at this. And so on. So you can see I set up a little bit of a customization on this map. Originally, this mapping was made by our own Ava. Thank you so much for that. Here's the case where I wanted my number, or my arrow keys to look sort of like, I'm used to them, which is left, down, right, and then go up one for the up. So that's how I was able to get that little section there. So I hope that is helpful as far as wanting to use, or knowing how you can use these layers. I'm a real noob with this, so I've basically exhausted my knowledge of it just in doing this. So head to the internet to find out more. Ava knows a lot more about it. We have a guide on the Navi keyboard, which also uses KMK. So you can go and check out that guide that Ava did. I may put one up that just piggybacks off of that, but shows a little bit more of this layer stuff just to get you started, and then you can go to town and learn a lot more. Useful for Plunk or Plank keyboards, which also don't have a number row, but at least have a lot more keys and spacebars, sort of where you expect them and so on. So there's a world of keyboard layer stuff you can do there. Let's see. Any questions over in the chat? Rooksits guess, have you got RGB to work in KMK? You know what, this is not a lighted keyboard, so I think there's a version of the Gherkin that uses single color LEDs. I don't know that there's one for RGB LEDs. I believe you can still use Neopixel stuff on a different pin. There are some pins available, I think, still. The part of the nature of that question is QMK is way, way, way, way ahead of KMK. So there are lots of features that people are used to in QMK that you won't find in KMK yet, but I think people are working on those. And again, I'm not an expert on it, so I could be wrong, but head over to some of the mechanical keyboard reddits and other places to find out more about that. I'll show you actually real quick this is. Make this bigger. This is just a search for Gherkin keyboard in Google Images, so you can see there's a lot of really snazzy designs for it, including laser cut layered cases, printed cases, wooden cases for it. Here's someone who has decided they really wanted a big enter or backspace here. They've added a big honking button underneath the thing, which is great. Some people call this a meme board because it's fun for memes about joking about how ridiculously small some keyboards get. There's people who use 40% and actually use them for real. I don't know if there's anyone using 30% Gherkin's for real use, but they are pretty cool for macro keyboards and like I showed, if you just need alphabetical stuff as in Wordle or the crossword puzzle with a couple of keys for arrows for maybe changing, I think Tab will change your crossing on the app. And I showed, you saw this before, you can use something like the famous lightning camera adapter for iOS, which is really a USB on the go sort of dongle. You can use that with iOS devices. USB cable to that and now this will plug right into the phone and you can use that to type your novel on the train on your phone if you want. All right, let's see. Have we missed anything? I think that's what we had prepared for today. Thank you so much for stopping by and hanging out and hanging out over in the YouTube chat and the Discord. Let's see if there's any other comments or questions. I think that's it. JP Constantino says KMK is really easy to set up, got it working on my Pi Key 60. I'm typing on right now. Oh, cool. I want to see the Pi Key 60. Is that the one? No, that's not the one you posted. Let me look. Pi Key 60. Oh, and that has, yeah, that's got RGB it looks like, huh? This is Pi Key 60. Super cool. Ah, keyboards. All right, that's going to do it. That's the thing. Watch for the guide. I'm working on it as soon as I get out of here. I'm working on documenting that so you can build your own. Thanks, everyone, for stopping by for Adiford Industries. This has been John Parks Workshop, and I will see you next time. And don't forget to tune in tomorrow for a Deep Dive with Scott. Bye-bye.