1 00:00:03,820 --> 00:00:09,660 Welcome to the CircuitPython Show. I'm your host, Paul Cutler. This episode I welcome Aaron Pendley, 2 00:00:10,000 --> 00:00:15,100 also known as Squid.jpg in the Adafruit community. Aaron started his career as a game programmer, 3 00:00:15,480 --> 00:00:21,140 programming games for the Game Boy Advance, Nintendo DS, PlayStation 3, and Xbox 360 before 4 00:00:21,420 --> 00:00:28,440 transitioning to iOS development. Aaron, welcome to the show. Thanks, Paul. It's an honor to be here. 5 00:00:29,200 --> 00:00:32,599 I'm glad you could make it. How did you first get started with computers? 6 00:00:34,460 --> 00:00:38,960 I've always been interested in computers since I was a kid, but my first real experience was 7 00:00:39,120 --> 00:00:44,600 in the fourth grade. I had this fantastic teacher who once a week would take us to the computer lab 8 00:00:44,680 --> 00:00:49,500 where we had a bunch of Apple IIe computers, and he taught us how to program in BASIC. 9 00:00:50,300 --> 00:00:56,799 And for the most part, that's all I did for most of my teenage years. My grandma got me this KPro2 10 00:00:56,800 --> 00:01:03,660 computer at a garage sale for like $25 and it was basically like this this metal briefcase computer 11 00:01:03,840 --> 00:01:09,440 with a couple of floppy drives and like one of those green phosphor screens and it was already 12 00:01:09,560 --> 00:01:15,040 like old at the time you know but on one of the floppy disks was the basic programming language so 13 00:01:15,520 --> 00:01:19,460 I was still able to just take that and keep hacking on it you know all throughout kind of 14 00:01:19,500 --> 00:01:24,900 my teenage years and that was really like my main introduction to computers and programming. 15 00:01:25,280 --> 00:01:30,820 And I understand that you actually won a contest back in 1999 for Game Boy programming. 16 00:01:31,360 --> 00:01:39,060 Yeah, that's right. So at the time that the Game Boy Color came out, I was working as a bellman/shuttle 17 00:01:39,120 --> 00:01:44,500 driver at a Holiday Inn. Pretty great job for kind of just like a slacker, you know, a teenager who 18 00:01:44,520 --> 00:01:55,260 just graduated. But I got this Game Boy Color and I was just like floored by it. It was amazing. And 19 00:01:55,260 --> 00:02:11,180 And so I dug around a little bit and I found some kind of gray market Korean hardware. Basically, they sold like cartridges that you could put your own software on using a flash chip and then a little programmer devices to go along with it. 20 00:02:11,220 --> 00:02:17,040 So using that I was able to, you know, write code and actually see it run on the hardware itself, which was really exciting. 21 00:02:17,260 --> 00:02:47,240 And the main way that I was able to do it was I learned C because there was a tool set available called GBDK, Game Boy Developers Kit. Incidentally, that developer kit is still around now and is still maintained. And it's the basis for the popular GB Studio, which if you know, John Park on his show lately did a series on how to make games with it. So that's pretty cool. It's cool to get to kind of use those tools then and they're still around now and still kind of, you know, 22 00:02:47,260 --> 00:02:54,380 being actively developed and flourishing. So yeah, with that I then tried, I don't really have a lot 23 00:02:54,420 --> 00:02:59,900 of artistic capability, so I then tried to recruit basically everyone I knew to help me make a video 24 00:03:00,140 --> 00:03:04,560 game. Most people's responses were pretty tepid, you know, like, "Oh yeah, that would be cool," but 25 00:03:04,700 --> 00:03:10,520 they didn't really want to work very hard at it. So I had one friend I knew, he was a really great 26 00:03:10,600 --> 00:03:14,920 artist and he was studying animation at the time, so I went to him and was like, you know, "Hey, 27 00:03:14,920 --> 00:03:19,820 "Do you want to make a video game?" and he was just like, "Yeah, of course." Like, you know, it was a silly question. 28 00:03:20,980 --> 00:03:26,920 So yeah, around that same time, we had just kind of been goofing around with stuff and this competition was announced called Y2 Code. 29 00:03:27,000 --> 00:03:28,500 It was right at the end of 1999. 30 00:03:29,240 --> 00:03:32,320 And I think we had maybe like three or four months to get something together. 31 00:03:32,560 --> 00:03:37,060 So, you know, in between our day jobs and whatever we were doing, 32 00:03:37,140 --> 00:03:40,860 we basically spent all of our waking hours just like working on this game. 33 00:03:41,800 --> 00:03:48,460 The idea was kind of like a platforming game and you had a sword and you ran around and killed a bunch of bad guys or whatever. 34 00:03:49,020 --> 00:03:56,620 It was our first game that we ever made so it wasn't particularly well designed gameplay wise and we weren't able to get sound effects into it. 35 00:03:57,060 --> 00:04:03,120 But the art style was really cool and we had a couple of really cool technically impressive tricks that we did in the game. 36 00:04:03,800 --> 00:04:08,460 And that ended up getting a second place in the competition which was basically the start of my career. 37 00:04:08,800 --> 00:04:13,100 I was then able to use that to get a job working on Game Boy Advance games a little while later. 38 00:04:13,540 --> 00:04:16,880 Incidentally, with that same friend, we both got a job at the same studio. 39 00:04:17,760 --> 00:04:20,880 And yeah, that was the start of my career, really. 40 00:04:21,620 --> 00:04:22,280 That's pretty cool. 41 00:04:22,620 --> 00:04:22,960 Thanks. 42 00:04:23,480 --> 00:04:27,000 Adafruit community members might know you by your nickname, Squid.jpg. 43 00:04:27,340 --> 00:04:28,200 How did you pick that out? 44 00:04:29,120 --> 00:04:34,760 So I have been a fan of this video game, this Nintendo video game named Splatoon, probably 45 00:04:34,840 --> 00:04:35,760 since 2017. 46 00:04:37,000 --> 00:04:39,980 And originally that was my name that I used whenever I played Splatoon. 47 00:04:40,520 --> 00:04:45,960 And after a while I joined Twitch with the hopes of finding other people to play Splatoon 48 00:04:46,040 --> 00:04:49,980 with and eventually ended up streaming a little bit as well. 49 00:04:50,160 --> 00:04:55,680 So that's kind of like the name I became known by and it's the name of my Discord. 50 00:04:56,060 --> 00:04:58,520 And so it just kind of stuck even now. 51 00:04:59,700 --> 00:05:04,940 What's kind of funny is that a game that I made on iPhone is my avatar for a lot of things 52 00:05:05,060 --> 00:05:05,460 as well. 53 00:05:05,880 --> 00:05:10,140 I made this game called Cow Trouble after I was kind of done with the industry at large. 54 00:05:10,820 --> 00:05:14,740 And if you go to the Adafruit Playground page right now, you'll still see the little icon 55 00:05:14,920 --> 00:05:17,360 of the farmer guy who's the main character in our game. 56 00:05:18,000 --> 00:05:19,360 How did you discover CircuitPython? 57 00:05:20,240 --> 00:05:23,680 Probably it was around 2020, early pandemic days. 58 00:05:23,840 --> 00:05:25,060 I was bored out of my mind. 59 00:05:25,660 --> 00:05:30,860 And I wanted to do something that reminded me of some work that I had done at a job previously 60 00:05:31,000 --> 00:05:32,680 where I worked with vending machines. 61 00:05:32,880 --> 00:05:37,480 And basically at that job, I wrote iPad apps that would interface with vending machines 62 00:05:37,520 --> 00:05:42,120 in various ways that our customers who were vending machine companies, like their technicians 63 00:05:42,280 --> 00:05:43,980 would use them and their drivers and stuff like that. 64 00:05:44,060 --> 00:05:46,560 But that was my first experience using an Arduino. 65 00:05:47,280 --> 00:05:51,380 We would sometimes use them to simulate the vending machine so that I could write my software 66 00:05:51,640 --> 00:05:53,940 when I didn't have access to like an actual vending machine. 67 00:05:54,420 --> 00:05:58,840 And so yeah, so when the pandemic came around, I was very bored and I had a lot of fun doing 68 00:05:58,920 --> 00:05:59,040 that. 69 00:06:00,040 --> 00:06:01,740 "Oh, I'll buy the Arduino student kit, 70 00:06:02,200 --> 00:06:04,580 and I'll learn a little bit more about this Arduino stuff." 71 00:06:05,000 --> 00:06:08,340 And so I did all the basic things everyone does, 72 00:06:08,620 --> 00:06:12,760 like LEDs and potentiometers and seven segment displays 73 00:06:13,000 --> 00:06:13,660 and all that stuff. 74 00:06:13,720 --> 00:06:15,860 And eventually, it just got to the point 75 00:06:15,900 --> 00:06:17,500 where the programs I was writing 76 00:06:17,600 --> 00:06:19,640 were too big to fit on an Arduino. 77 00:06:20,520 --> 00:06:22,500 And at that time, I had already bought 78 00:06:22,960 --> 00:06:24,580 some basic components from Adafruit, 79 00:06:24,680 --> 00:06:26,640 so I had some kind of awareness of who they were. 80 00:06:26,740 --> 00:06:28,919 And plus, it's virtually impossible 81 00:06:28,920 --> 00:06:58,900 to work in the Arduino ecosystem without coming across Adafruit libraries. So I looked around on their page a little bit and they just started selling this really cool microcontroller called a CutiePie using the SanD21 chip. And they were $6 at the time, which, you know, the cost of an Arduino is multiple times that. So when I came across those, I was like, well, I'm gonna buy a bunch of those. I didn't know how to solder though, was kind of a problem. So I also bought a pack of 25 breadboard NeoPixels, and a soldering iron, and a 82 00:06:58,920 --> 00:07:04,700 and just kept soldering until all that was done, and I knew how to solder. So from there, yeah, 83 00:07:04,780 --> 00:07:09,720 I just did a lot of various NeoPixel projects. So where CircuitPython comes into it is one day, 84 00:07:09,820 --> 00:07:16,500 I wanted to build a kind of a macro pad using arcade buttons. And the idea was, now that I'm 85 00:07:16,660 --> 00:07:22,160 using several different development environments to program in, there's Xcode that I use for my job, 86 00:07:22,200 --> 00:07:26,599 and then Arduino at the time for doing Arduino development and other ones, I wanted a set of 87 00:07:26,600 --> 00:07:30,960 the buttons I could press that would be the same, you know, to like build my code or clean it no 88 00:07:31,140 --> 00:07:37,340 matter what environment I was in. So CircuitPython has the killer feature of just being able to plug 89 00:07:37,480 --> 00:07:42,400 into a computer, edit code, and the changes are instant. And that seemed perfect for that kind of 90 00:07:42,420 --> 00:07:48,940 a project. And it was. If I remember correctly, I also soldered one of the little flash chips onto 91 00:07:49,040 --> 00:07:53,799 the CutiePie at the time to make a CutiePie Express so that I had enough resources to do all 92 00:07:53,800 --> 00:07:59,380 of that. Yeah, that was my first real circuit Python project. Let's chat about some of the 93 00:07:59,580 --> 00:08:04,500 projects you've shared on your Adafruit LearnGuide Playground page. I think my favorite project of 94 00:08:04,560 --> 00:08:11,580 yours is the Top Secret Lunchbox. How did this project come about? So I'm a big video game player 95 00:08:12,280 --> 00:08:16,960 since I was a kid, obviously, and one of my favorite kinds of games are these survival 96 00:08:17,180 --> 00:08:22,679 horror games. And kind of a key feature of these games is they typically involve kind of like 97 00:08:22,680 --> 00:08:28,520 ham-fisted lock and key puzzles or brain teasers that you need to solve in order to progress 98 00:08:29,120 --> 00:08:33,560 throughout the game. A classic example would be Resident Evil or something like that. 99 00:08:34,880 --> 00:08:42,580 Kind of aside from that, I also in the last maybe 10 to 15 years, escape rooms have branched off of 100 00:08:42,620 --> 00:08:52,660 that same idea where you're in the game and you have to solve these puzzles to get out of the 101 00:08:52,660 --> 00:08:55,000 earlier this year called Lorelei and the Laser Eyes, 102 00:08:55,300 --> 00:08:59,220 which is kind of like those ideals distilled into, 103 00:08:59,560 --> 00:09:02,820 you know, what to me was like the perfect game of that type. 104 00:09:02,900 --> 00:09:03,780 You know, you're in a mansion 105 00:09:03,960 --> 00:09:05,200 and you have to solve all these puzzles 106 00:09:05,360 --> 00:09:08,080 and there's this like really cool kind of ghost story. 107 00:09:08,640 --> 00:09:10,520 And so what I wanted to do, 108 00:09:10,660 --> 00:09:12,100 like coming off of playing that game, 109 00:09:12,160 --> 00:09:15,060 I was really inspired to try and make my own escape room 110 00:09:15,260 --> 00:09:15,400 puzzle. 111 00:09:16,100 --> 00:09:18,720 And so I'll confess it wasn't my first attempt. 112 00:09:18,780 --> 00:09:20,959 It was actually my third attempt at doing something like 113 00:09:20,960 --> 00:09:31,180 My first two attempts, they were neat, but they were really, really too ambitious. Hardware-wise, software-wise, just conceptually, you know, the ideas were too broad. 114 00:09:31,960 --> 00:09:40,160 And so, kind of after playing Lorelei, it kind of clicked with me that actually what I needed to do was distill, like, my idea for this down to a single interaction. 115 00:09:40,960 --> 00:09:44,560 You know, like a core interaction that I could build puzzles off of and make, like, a game. 116 00:09:44,960 --> 00:09:56,260 I also had around that time watched an episode of John Park's workshop where he was doing this cool connect the wires type puzzle where you know you had to like connect the wires in a certain way to you know light the lights up and solve it. 117 00:09:56,760 --> 00:10:05,120 And so I kind of took those two ideas and meshed them together and I made that kind of switchboard idea the core mechanic for this for this lunchbox game. 118 00:10:05,120 --> 00:10:20,240 And yeah, from there I was able to start prototyping things. The idea that I had was that I didn't want to like, I didn't exactly know what I was going to do at the beginning of it. I had some rough ideas. And since I had attempted this a couple of times before, I could reuse some of my ideas from that. 119 00:10:20,240 --> 00:10:26,060 But going into it, I needed to still prototype to make sure my game idea would work and things like that. 120 00:10:26,160 --> 00:10:35,980 So I used these cool swirly board PCB things that Adafruit sells that lets you easily attach all kinds of various microcontrollers and breakout boards. 121 00:10:36,460 --> 00:10:42,620 So I was able to bring up this project before even considering the design and the case and everything, just the functionality. 122 00:10:43,120 --> 00:10:47,180 With just that and adding the functionality that I wanted and writing the program and the bring up code. 123 00:10:47,240 --> 00:10:53,940 And then from there, once I knew everything that I was going to use, I could build my panel and my enclosure that I could stick into the launch box. 124 00:10:54,260 --> 00:10:59,060 And since that was my third time doing this, this process at this point was a lot smoother. 125 00:10:59,280 --> 00:11:05,900 And so from starting to do the design work to actually having the full project built probably took about a week. 126 00:11:06,420 --> 00:11:10,800 The hard part, honestly, was writing the software for it because games are just kind of hard to write. 127 00:11:10,860 --> 00:11:13,280 So it took me about another three weeks to write the software for it. 128 00:11:14,240 --> 00:11:18,840 So for listeners at home, can you describe when you open the lunchbox, what's inside 129 00:11:18,900 --> 00:11:19,640 of the lunchbox? 130 00:11:20,080 --> 00:11:24,240 So when you open the lunchbox, one thing you'll notice is how you turn it on. 131 00:11:24,480 --> 00:11:26,860 There's a little slot for a key. 132 00:11:27,540 --> 00:11:29,260 And so you need a key to turn it on. 133 00:11:29,860 --> 00:11:32,860 And then once it's on, various lights and sounds and things happen. 134 00:11:33,040 --> 00:11:36,640 And so there's 10 headphone jacks, basically. 135 00:11:37,260 --> 00:11:38,660 And each one has its own LED. 136 00:11:39,160 --> 00:11:42,320 It's an RGB NeoPixel LED on the side of it. 137 00:11:42,980 --> 00:11:46,000 And so basically that's the core of the game. 138 00:11:46,140 --> 00:11:50,160 There's also a little compartment where I can hold all the little cables so that they 139 00:11:50,200 --> 00:11:51,320 can travel around with it. 140 00:11:52,160 --> 00:11:56,120 And I keep the key in there, but one thing that can be fun to do with this is to hide 141 00:11:56,180 --> 00:12:02,700 the key and present a clue to a player, so that just adds an external element to it. 142 00:12:03,140 --> 00:12:07,300 And then there's also an arcade button with a NeoPixel inside of it that I can use just 143 00:12:07,360 --> 00:12:08,660 for various interactions. 144 00:12:09,440 --> 00:12:09,820 Okay, cool. 145 00:12:11,060 --> 00:12:15,720 Tell me about the Zapper Light sound mod project where you reused an NES Zapper from Duck Hunt. 146 00:12:16,140 --> 00:12:21,480 Nintendo made this cool game, Duck Hunt, back in the 80s, and to go along with it they had 147 00:12:21,580 --> 00:12:23,600 this cool Zapper gun, this light gun. 148 00:12:24,360 --> 00:12:29,300 Fast forward to today, and these guns can still be found pretty cheaply. 149 00:12:30,000 --> 00:12:33,540 You can get them at game shops, on eBay, ranging from anywhere from $10 to $20. 150 00:12:34,000 --> 00:12:39,900 But unless you're a hardcore retro game enthusiast, they're probably not very useful to you because 151 00:12:39,900 --> 00:12:47,400 you need an old-school CRT TV to use them. So my thought was I wanted to take one of these and just 152 00:12:47,480 --> 00:12:51,420 kind of like take all the the parts out that didn't really that I didn't need and instead 153 00:12:51,520 --> 00:12:55,600 replace them with parts that would allow me to make sound effects and light effects or whatever. 154 00:12:56,360 --> 00:13:01,480 And so yeah a couple of years ago I took on this project and I um it was a very complicated 155 00:13:01,860 --> 00:13:06,700 project. It had several boards there was like an itsy bitsy microcontroller and a battery charging 156 00:13:06,700 --> 00:13:13,040 board and an i2s audio board and I had to take flush cutters to the inside of the shell and cut 157 00:13:13,120 --> 00:13:17,760 out all kinds of bits so that I could fit all of this in there and it was kind of a complicated 158 00:13:17,900 --> 00:13:22,760 build and for whatever reason a couple of months ago I decided I would go on Adafruit Show & Tell 159 00:13:22,820 --> 00:13:28,320 and finally show it off and so yeah I was showing it off and Liz Clark asked me if I was going to 160 00:13:28,320 --> 00:13:36,680 write about it and I was like well you know I hadn't really planned on it but yeah let's go 161 00:13:36,680 --> 00:13:39,640 and opened it up and it was a nightmare. (laughs) 162 00:13:40,480 --> 00:13:42,720 You know, as much of a nightmare as it was to build, 163 00:13:42,780 --> 00:13:44,800 it was even more of a nightmare to write about, 164 00:13:44,920 --> 00:13:46,280 and to try to like relate to somebody, 165 00:13:46,380 --> 00:13:48,040 how you might actually replicate this. 166 00:13:48,760 --> 00:13:51,500 So, you know, instead I decided to maybe take 167 00:13:51,580 --> 00:13:54,020 this opportunity to try and redesign my mod, 168 00:13:54,400 --> 00:13:55,440 to make it more approachable, 169 00:13:56,000 --> 00:13:57,300 and to take advantage of some things 170 00:13:57,340 --> 00:13:58,880 that I didn't have a couple years ago. 171 00:13:59,420 --> 00:14:01,060 And one of those was a 3D printer. 172 00:14:01,280 --> 00:14:02,720 Since then I've got a 3D printer, 173 00:14:02,860 --> 00:14:06,060 and I've learned how to do some basic CAD stuff. 174 00:14:06,640 --> 00:14:17,880 And another thing that happens, Adafruit released probably like my favorite microcontroller. It's the RP2040 PropMaker Feather. This board already had everything that I needed, all those other boards to do. 175 00:14:18,620 --> 00:14:30,980 So my idea was that I wanted to make a mod that was easy to do and was not destructive to the shell. So, you know, for whatever reason you regretted it and wanted to go back to having, you know, the original zapper, you could do that. 176 00:14:30,980 --> 00:14:39,960 And what I did was there's a little piece of geometry on the bottom of the grip where normally the cable strain relief is for the cable that plugs into the NES. 177 00:14:40,760 --> 00:14:49,900 If you take that out, you can 3D print a piece of geometry to put just slot right back in there and it makes like a great base or like fixture for anything you want to put there really. 178 00:14:49,980 --> 00:14:53,260 So I kind of extended that into a box-like enclosure. 179 00:14:53,960 --> 00:14:56,240 And from there, I was able to put a switch and a battery 180 00:14:56,660 --> 00:14:58,880 and the prop maker feather into, 181 00:14:59,560 --> 00:15:02,960 and wire all the rest of it into my speaker and my NeoPixel, 182 00:15:03,460 --> 00:15:05,380 and the trigger mechanism of the Zapier. 183 00:15:06,060 --> 00:15:08,740 And from there, that was much easier to write about. 184 00:15:09,760 --> 00:15:11,940 And yeah, I was able to write that guide and put it out. 185 00:15:12,000 --> 00:15:14,140 And it's probably been one of the most fun projects 186 00:15:14,180 --> 00:15:14,840 I've ever worked on. 187 00:15:14,920 --> 00:15:17,699 So I'm really glad Liz kind of gently prodded me 188 00:15:17,700 --> 00:15:23,600 revisit it and do that. So when you press the trigger what happens? So the trigger 189 00:15:23,700 --> 00:15:27,660 has a really neat actuator mechanism where when you pull the trigger all the 190 00:15:27,660 --> 00:15:32,360 way back it has like an auto release. So that's like the classic kind of you know 191 00:15:32,460 --> 00:15:36,400 click mechanism that everyone associates with these weapons. So what it actually 192 00:15:36,500 --> 00:15:41,100 is it's just a simple you know just a simple button really except for that 193 00:15:41,280 --> 00:15:45,220 mechanical thing. So when you barely pull the trigger a little bit that's when it 194 00:15:45,220 --> 00:15:50,020 actually makes the connection and closes the circuit and then if you pull it back the rest of 195 00:15:50,040 --> 00:15:54,860 the way it clicks back and opens the circuit again. So the way I actually programmed it is 196 00:15:55,180 --> 00:15:59,560 when it first detects that closed circuit is when it plays the sound effects and shows the lights 197 00:15:59,640 --> 00:16:04,660 because typically you're you're mashing it all the way but those mechanisms are pretty old by now and 198 00:16:04,680 --> 00:16:09,540 they don't always work so I wanted to also you know I did it rather rather than making it when 199 00:16:09,560 --> 00:16:15,200 the circuit opens again to play the sound effects I did it when it opens so that you could pull the 200 00:16:15,200 --> 00:16:18,920 it would catch it if you were having issues with that. I'll make sure that I 201 00:16:18,940 --> 00:16:23,960 link to all of these projects on the Adafruit Learn Guide system too. Great, thanks. I like 202 00:16:23,980 --> 00:16:27,580 on this next project that you confess that you don't love to play video games 203 00:16:27,640 --> 00:16:33,360 with a keyboard. What did you build to help with that? I was playing XCOM and 204 00:16:33,620 --> 00:16:39,140 using the keys to control the camera, and that uses the WASD keys like most PC 205 00:16:39,240 --> 00:16:43,720 games do that use keyboard, but I've never really been a fan of that because 206 00:16:43,720 --> 00:17:13,699 it hurts my hand really. It causes a lot of cramps and some of the configurations you have to put your hand into to hit some of the other keys too can be really uncomfortable. So as I was playing XCOM 2, it dawned on me that I could probably take a Wii Nunchuk and plug it into this cool little adapter that Adafruit makes, pair it with a simple microcontroller, and just reprogram it to remap it to those keys. And it worked out really well. I just slammed out a little bit of the controller, and it worked out really well. I just slammed out a little bit of the controller, and it worked out really well. I just 207 00:17:13,720 --> 00:17:18,160 little 3d printed case for it and put it all together and wrote the code and it 208 00:17:18,260 --> 00:17:23,040 worked so well that I figured I would write about it as well. I know this next project is 209 00:17:23,120 --> 00:17:26,620 done in Arduino but you mentioned it could be possible to do it in CircuitPython 2. 210 00:17:27,699 --> 00:17:32,200 What is the Wi-Fi matrix keypad remote? So the only reason that I 211 00:17:32,240 --> 00:17:35,180 actually did this project in Arduino is definitely possible to do this in 212 00:17:35,380 --> 00:17:39,480 CircuitPython but the main thing is that CircuitPython typically when you boot it 213 00:17:39,480 --> 00:17:46,300 up can have like a two to three second boot time. And so what I wanted to build was like, I have 214 00:17:46,540 --> 00:17:50,840 maybe a couple dozen or more various lighting devices around my house that I built with 215 00:17:51,000 --> 00:17:57,760 microcontrollers, a lot of them using WLED as well. And I have an MQTT network, like a local network 216 00:17:57,840 --> 00:18:03,220 that I've got all these plugged into, but no real great way to control them. I could bust out my 217 00:18:03,500 --> 00:18:07,480 phone and use WLED as interface or some other things. But you know, what I really wanted was 218 00:18:07,480 --> 00:18:11,300 just something I could pick up, press a button, and turn on a light or turn on 219 00:18:11,340 --> 00:18:15,440 all the lights in my office or change the theme of the lighting or whatever. So 220 00:18:15,540 --> 00:18:19,120 yeah, the main reason that I went with Arduino is just because it boots up much 221 00:18:19,200 --> 00:18:23,420 more quickly and given that I also had to like connect to a Wi-Fi network and 222 00:18:23,440 --> 00:18:27,540 then connect to the MQTT broker, I wanted you know to try to shorten that wake up 223 00:18:27,640 --> 00:18:32,100 time as much as I could. And so as it stands right now it only maybe takes two 224 00:18:32,220 --> 00:18:36,320 seconds tops for my devices from the time I pick them up to when you know 225 00:18:36,320 --> 00:19:06,300 they're ready to receive input. So I think that worked out pretty well and really just with CircuitPython it would have doubled that time. So that's kind of what I was trying to minimize. Sure. But yeah, this remote, you know, I'm not a big fan of touch screens and I'm not a really big fan of using my phone to control everything because you typically got to pull your phone out, find the app that you got to use it, wait for it to initialize. And then, you know, at some point between five and 10 seconds, you might be at a point where you're ready to like press a button to make something happen. And so yeah, I just I really 226 00:19:06,320 --> 00:19:11,440 just wanted like you know a remote like a TV remote that you could pick up and press a button and it 227 00:19:11,520 --> 00:19:15,760 would just work. And that was pretty much with this all but one thing that I don't possess yet 228 00:19:15,900 --> 00:19:23,160 is the skills to design a PCB. What I kind of had to do was find a good alternative for buttons you 229 00:19:23,160 --> 00:19:27,960 know what I mean it's not easy to find great like buttons that feel really good that are you know 230 00:19:28,120 --> 00:19:32,880 low profile that are easy to include into a project unless you're going to design your own PCB and 231 00:19:32,880 --> 00:20:00,740 and find your own buttons to put on there and stuff. So this keypad remote, the classic like 12 key keypad remote that you see in movies or you know anywhere you go, turned out to be kind of the perfect solution for this. And yeah, I just connected it to an ESP 32 QDPi, put a 500 milliamp battery on it, and a little bit of custom code. And I was able to make a few of these now. And I keep one in each room, each one is customized, you know, to change the settings in each room. 232 00:20:02,000 --> 00:20:31,980 I have a pair of the LED glasses from an Adafruit AdaBox. Tell me about the custom firmware you created for these. I love those glasses. I remember getting that getting that box too. And I just would devour every single demo that I could find, you know what I mean, trying to write my own. And so probably like the one thing about those glasses, those if you want to like take them out and show them off, you're kind of stuck on with one mode, you know what I mean? There's a lot of great examples out there. But there's nothing that kind of consolidates it into like one package. 233 00:20:32,000 --> 00:20:36,980 where you can go and change the mode on the fly, you know what I mean, or change it to react to 234 00:20:37,060 --> 00:20:41,980 whatever's going on in your situation. And so that was my main motivation for it, is it was around 235 00:20:42,300 --> 00:20:46,720 Halloween and I wanted to take these glasses out and I wanted to just show them off and all the 236 00:20:46,720 --> 00:20:51,960 stuff they could do. So I went and looked for all of my favorite examples and compiled them into 237 00:20:52,160 --> 00:20:56,860 this firmware and added a couple of my own and added a couple of features that, you know, are 238 00:20:57,020 --> 00:21:01,160 probably like over the top and ridiculous, but I think they really make it a lot more fun to use. 239 00:21:01,600 --> 00:21:08,980 And one of those is integration with the Adafruit Connect app on phones and computers. So you can 240 00:21:09,140 --> 00:21:13,680 connect to it with the app and you can change the modes, you can change the colors, and do all kinds 241 00:21:13,740 --> 00:21:19,720 of customization with that. And then kind of like as a further, you know, ridiculous stretch goal, 242 00:21:19,900 --> 00:21:26,960 I also integrated a Bluetooth nunchuck adapter with it so that you could use the nunchuck to 243 00:21:26,960 --> 00:21:28,820 to kind of puppet the eyes and the glasses, 244 00:21:28,960 --> 00:21:30,800 or do various things depending on the mode. 245 00:21:31,600 --> 00:21:33,660 And so kind of one thing that I didn't like about this project, 246 00:21:33,680 --> 00:21:37,740 kind of the downside a lot of times to using Arduino or something like Platform.io is, 247 00:21:38,220 --> 00:21:41,080 it's not always easy to just put this in somebody's hands 248 00:21:41,160 --> 00:21:43,700 who just wants to see something cool on their devices, right? 249 00:21:44,440 --> 00:21:48,000 So, yeah, if I'm someone and I bought these glasses and I'm looking around, 250 00:21:48,620 --> 00:21:51,360 I'm probably just going to want to take the things that I can drag and drop and put on there. 251 00:21:51,400 --> 00:21:55,220 I don't want to like download Platform.io and figure out how a compiler works and all this stuff. 252 00:21:55,600 --> 00:22:07,120 So this was a cool project too, because I figured out how to take that and bake it into a UF2 file, so that it works similar to like CircuitPython. You could just drag and drop a file onto your device and there it is. 253 00:22:07,880 --> 00:22:19,240 And I was really glad that I did that because probably like the perfect demo of this firmware came a couple weeks later when Noah Ruiz on his 3D printing show was kind of showing off a prototype that he was doing. 254 00:22:19,680 --> 00:22:22,940 And he basically just went through the whole firmware and showed off everything. 255 00:22:23,200 --> 00:22:26,100 And yeah, it was just, uh, I was just smiling the whole time. 256 00:22:26,140 --> 00:22:27,260 It was so cool to see that. 257 00:22:28,300 --> 00:22:28,700 I bet. 258 00:22:29,140 --> 00:22:33,320 I think my favorite effect is the Cylon from Battlestar Galactica, where you've 259 00:22:33,320 --> 00:22:35,400 got the red LEDs going back and forth. 260 00:22:35,540 --> 00:22:36,040 Yes. 261 00:22:36,200 --> 00:22:36,920 I love that one too. 262 00:22:36,980 --> 00:22:41,440 I think I've pretty much every, like every device that has LEDs on it, then I can. 263 00:22:41,500 --> 00:22:42,860 I ended up putting that on there. 264 00:22:44,080 --> 00:22:47,580 Last question I ask each guest, you're about to start a new project. 265 00:22:48,000 --> 00:22:49,480 Which microcontroller do you reach for? 266 00:22:49,620 --> 00:23:01,880 Definitely the PropMaker Feather. It's got most of the things that I typically want to do, which is audio support, NeoPixels, even servos if you want to use those. It's just kind of perfect for that kind of thing. 267 00:23:02,240 --> 00:23:10,880 There is like a runner up though, when I need Wi-Fi or something like that, I will also reach for an ESP32 S3 typically. 268 00:23:10,880 --> 00:23:15,180 They're great for CircuitPython, they're fast, they have tons of resources. 269 00:23:15,920 --> 00:23:20,780 Aside from Wi-Fi, you can use ESP-NOW to communicate with other ESP32 devices. 270 00:23:21,360 --> 00:23:22,680 They're just fantastic. 271 00:23:23,400 --> 00:23:26,820 I agree, I think the S3 is typically my go-to pick when I need Wi-Fi as well. 272 00:23:27,220 --> 00:23:27,380 Yeah. 273 00:23:28,400 --> 00:23:29,800 Aaron, thanks so much for being on the show. 274 00:23:30,380 --> 00:23:31,840 Thanks for having me, Paul. It's been great. 275 00:23:33,020 --> 00:23:34,660 Thank you to Aaron for coming on the show. 276 00:23:35,240 --> 00:23:38,300 To learn more, visit the show notes to see photos of Aaron's projects, 277 00:23:38,300 --> 00:23:47,140 links to his Adafruit Playground pages, and his BlueSky profile. For show notes and transcripts, visit www.circuitpythonshow.com. 278 00:23:47,900 --> 00:23:49,600 Until next time, stay positive.