 Hello, Happy Circuit by Hyundai. So this is a project build I'm doing. It's a message board that uses these 16 by 32 panels. I'm going to be using four of them and also the Matrix Portal S3 here. I have actually done a project that was similar to this. It had used some of those pixel purses from a few years ago. And it had six of those. They were about the same size as this. And I had powered by a Raspberry Pi. And I wanted to redo it with CircaPython. So I kind of rewrote all the code so I was all deported with that. So I'm going to go ahead and start with building the message board here. For the first part of the stream. And then I'm going to kind of go over that code and show that here. I'm going to start by laying four of these out. And let's start with laying these out so that the text on this is upside down. And the input is all the way to the right here. So then I have these kind of connector things here. And I just make sure this part comes up. And I'm going to go ahead and use just these nylon screws here. All right, those are going to be six of these connectors and 12 screws. So this will take just a bit here to go ahead and attach all of these. I have a couple different, well, three different sizes of screws here. I have these ones that I'm attaching. They're 10 millimeters long. I have a couple that are 15 or 16, I'm not sure. And then I have some M2.5 ones for attaching the board. So I'm going to go ahead and separate all those. Now, one of the things about the timing on creating this message board was because the new Matrix Portal S3 came out and it had enough memory and processing speed to be able to handle it really well. And so once that came out, I immediately was like, OK, let's go ahead and make a project. Now, on this last one, I'm only going to attach one screw on each of these connectors because the mount for the Matrix Portal S3 will be using some of the longer screws and going in through the same holes. And I'll show you that when we get to that step. And David Gludd said the Apple Blending wouldn't work on the old Matrix Portal. That's correct. You just, well, a bit of map tools wasn't available for it, but I don't think it would have had enough processing speed or memory for it to work. Arrows, yeah, that does definitely help. The ones on these particular panels, you can't really see very well, but it does say input next to one side and output next to the other. So that definitely helps. If you're going to stack them on top, I'm actually not sure what direction they come. OK, so the next thing I'm going to start doing is attaching these little side panels on. Those just have a little bit of a dovetail. So they just slide right into the connectors here. And then we have one special one with the, for the, so you can press the buttons or access the USB port. And that one is going to connect right here. OK, now here's the mounting bracket for the Matrix Portal, just a little square thing to help with the orientation. And then it only attaches with two screws. Yeah, let's just attach this here. These have these little inserts. So we just go right into the screw holes there and I use the longer screws for those. OK, now I'm going to go ahead and tighten up all the screws along here. Otherwise, it flexes a little bit. It might be better with some metal screws, but I went with the nylon ones because I knew that was available in the Adafruit store. I have these side panels here. I'm going to go ahead and attach one on this side. This part, I'm just going to slide all the panels to the right and that winds up much better with the buttons and everything. But for this next part, I have this LED acrylic here. It's actually left over from my previous panel. Yeah, I got an extra one and I cut this down. I actually cut this one a little bit on the short side, but it should work in this project anyways. And just go ahead and insert it in here with the mat side facing up. That's right to this. It's catching on that. There we go. Let's get the last panel right on. There we go. Oh, all the plastic parts here are 3D printed. I am writing up a guide and I will be having that all those included in the guide. As for the LED acrylic, there are some sold in the Adafruit store. They are this size here, like 12 by 6 inches, and they could be cut down. And you could put three or four of them in there. And that should work. Here's what it looks like. I'm going to go ahead and plug in the USB cable. I already have it programmed though. Just going to get going, but I'll go over the code here in just a bit. USB cable is not working. I'm doing it in my wiring. That's fine. That makes sense. OK, let's go ahead and click all that. Thanks, DJ Devin. Let's see, on the diffuser. But you were asking what size, screw size, and pitch for the mounting holes. I don't have any mounting hole. Or you mean on the back of the panel? Those are M3. And I think they're like 8 or 10 millimeters deep. I can't remember. Now for attaching these wires, I like to kind of take the two of these forks and then put them so they end up kind of closer, so that they end up more like that when they're touching. Maybe get good content, surface content. Let's see. This is the positive. Yeah, just standard in three sizes. And we'll just plug in these to each of the panels. OK, and then one of the things that I did on this design is I made it so you could get all this wiring kind of tied down with just some zip ties. I just insert right in one of these holes and poke it right out the other side. And it makes it a lot easier to secure everything. I will cover the power on here. Yeah, I tested it and it powers on the computer. It's about the same power requirements as a 64 by 32 panel because it's the same number. They're slightly larger, but I think that's more about the pitch spacing on that. So I had no problem powering off the USB, but I think if you did all white, it would have some power issues based on my experience with the Matrix Portal M4. Running this, if you don't want to connect to do a computer, there are some adapters. So you could just use an external power adapter like this. And we do have this power adapter that goes from the 2.1 millimeter to the USB-C so that can plug right into the top of that. So now one thing I can do to neaten this up a little bit is by creating some little loops here. I'll take some longer zip ties here and feed them through here. Tuck this up here, feed it through this one. And I'm just going to hold everything in place there. OK, now I'm going to go and put all these off. And if you have some, it's a little sticking up around here, you can use them out to secure it. Let's go ahead and plug that in and there it goes. And that's just running off of, I think it's 900 milliamps that comes out of the USB-C. OK, so I'm going to go over the code here. Let me just add my screen here and refresh this and put the blink on it for circuit path on it. Yeah, I think for, like I said, if it's all white or whatever, then I think it would require the external power and it may run into something where it does, then it'll kind of brown out and reset as what will happen. Let's see, code here. This is just a little demo that runs it. Oh, yeah, I was going, originally it was going to go ahead and try and do some complicated thing where I split off power and I powered the matrix portal with half of it and then I powered the LEDs with part of it and it was just getting very complicated. And when I realized it was able to power through here, I just wanted to kind of keep the circuit somewhat simple. So you didn't have to buy like 15 different adapters or whatever. Anyway, so on here, I'm actually importing the matrix part from the matrix portal library to start with and I just initialize it. I found the bit depth of five actually looks pretty good on here and then I have a message board library. I'll go over that in just a little bit, but that was a library written specifically for this guide. So the message board is kind of like the overall library that controls things. The font pool library, it was just basically a way of kind of storing or loading a font in there and then being able to retrieve it without having to have duplicates of the same fonts. And then the message is just kind of like, you could do different messages scrolling across here into my animations. So I just create, I'm loading the font or the aerial font into the font pool and then when I create a message, I say that's the font I'm gonna use. I have a mask color for the image. I found the mixing the different bit depths of the images just doesn't work very well. So I would suggest going with keeping it consistent like 24 bit seems to work really well. You can set the opacity in the message. And this one, I'm adding the masked star bitmap and that already has the same mask color in there and I'm saying hello world. And then I just tell it to scroll in from the right and then out to the left and it sleeps for one second and then out to the left. I'm gonna go ahead and show a different one here. Name this to do for now because I can't think of a better name. I'll rename this to code. But this one has a lot more messages here and examples. So I'm having it sort of changes the message in the middle of it. That way you can kind of do some things like going out to the internet and getting the time. It might have just browned up. So I can actually, yeah, I think it browned up. So probably one of these, it was just showing too many graphics or something. I'm gonna actually stop the from running right now because then I can show you the code without having to interfere. Let's see. Okay, so you can do a bunch of different animations. So a lot of it involves loading. You can load different messages. I have it so you can change the text in there. So you go to the internet, get some kind of a value and then like display it. So it just kind of goes in the loop here and then there's different animations. Go over those in more detail here. Let's see. So I have the message board here and then what I did is I took the different animations and I put them into these different categories. I just put them into four different categories. So the scroll animation, which you've seen, I'll start again. Scroll animation, what you've seen is you can scroll, well, you can scroll from to any direction which allows you to actually do some diagonal scrolling if you wanted to, but all of these functions just use that same one. And so you can go out to the left, in from the left, in from the right, out to the top and bottom and in from the top and bottom. So basically in or out in four different directions. And then you have a loop one, which is similar to the scrolling one, but it will actually appear to loop from one side of the screen to the other and it'll go in four different directions on that one. You have a split one, which will, it can split out in and then out up or in vertically. So that's four different animations there. And then the static one is just kind of like the miscellaneous one. So it'll keep the text in place, but you can show it, hide it. You can cause it to blink and cause it to flash, which is more about fade in and fade out, a certain number of times, and then there's fade in and fade out. Now I'm gonna go ahead and plug this in using that adapter I was showing you. And then I can show you the little demo I have on here. Okay, so that's the scrolling in, changing the message and then scrolling it out. I had to do the join in and that's the loop one there. So you can see how it kind of goes in from the side of the screen and it flashing there, splitting out. And it was just fading in and the fading out, scrolling up, down, the more scrolling on there, but it'll change your backgrounds and so showing you that and then it kind of starts over again. Let's see, and plug that in. So I'll show you that code of the demo that I just showed you. Okay, so basically I start off by adding any of the fonts I need into the font pool. And let's see. And then I start by creating the first message. I actually, I didn't even use this one, so I should remove that from the demo. So I'm just have message one. I'm just reading it. I'm not even putting any content in that one because I do it down below. What is it? Message two, I guess I could have some private stuff in there for debugging. I'm setting it to the comic font and then putting a mask color in there. And I'm adding the masked Blinka image and just showing secret Python. In message three, I have it set to a, what was that? Oh yeah, and you can do some offsets on there as well. So I had some spacing between the image and the text that way. Message three uses the deja vu font and it's just saying certifyfund.com and the fourth one, it's just saying violet pranks and showing it in white color there. So in the main loop here, I go and I start by adding all the stuff I need to into message one because I know it's gonna change on each iteration of the loop. And I just have it, oh, I should show you the animate function, which is kinda cool. So I have it scrolling in from the left, clearing the message, which basically clears all the contents from the buffer of the message. And then you're starting with the clean slate and then you just add your text and you tell it to animate. See. This one is just from the, basically from the static animations and saying to go, to show it, scroll out to the right. I'm clearing the message again here and then adding or more effects like with couple of spaces and then doing those animations. I was trying to make it as easy as possible to use Python to be able to control the animation so that it's really easy to create these. Oh, and then stuff like the flash one where you can do extra parameters. I'm telling it to flash three times. It's basically more of the same there that I kind of went over already. So let's go and show you the animate function, which is in the message board. So the animate function is pretty cool because what it does is it'll actually automatically load the correct class so that it doesn't have to load everything all at once. Start by loading the, it finds what the name of the folder is, which in this case is message board. Message board. And then it does message board.animations. And then the name of the file, the file needs to match the class name but it just the lower name thing. And then it kind of just dives down a little deeper and deeper until it gets the animation class. And then it can get the function name that you specify and then it'll add any of the keyword arguments. And it'll just call that way. So it kind of does dynamic loading and calling the function. That makes it really easy to add animations because you could add another category of animations if you wanted to and then just create all those. So I had actually ported those from the code I'd written for the Raspberry Pi powered one and this is how I would have actually preferred for when I wrote that code. And so I'm really happy with how this ended up. So this, oh, so this just does basic things like setting the background in there and then the draw function is all in here and it actually makes use of the bitmap tools and it uses the blip function a lot which is the function in order to really quickly draw bitmap and it makes use of the awful blend at the end to kind of blend the message with the background there. And I think, oh, let me show you the message class. Actually, I'll show you some of these other ones. The double buffer one's actually pretty cool. Seems like every time I select another file, it resets a, don't know if it's a bug in here. Okay. The double buffer, all that does is it sets up a couple groups, a couple bitmaps and then it sets up a couple tile grids in those groups and in order when it's swapped buffers, all it does is it will basically set the current group to the correct one and just show that group. And it works really well, a circuit file that I made everything a lot smoother. So this is a pretty basic class and it allowed me to read the, or set the shader if I wanted to or read the act, which is the active buffer. And that seemed to be everything I needed from that. And then the font pool here is just a really 20 line one that I kind of described that already. And the message class is one of the things it does is it'll kind of enlarge the buffer dynamically as you add content to it. And that way you can kind of stick with just the smallest amount. And the buffer just consists of a display IO bitmap. That's at the maximum size and it just will recalculate and blit the existing content onto the new bitmap and then set that as the active one. So the only things that it has on here is adding text, adding an image and clearing and then you can read some of the different properties like the mass color and the blend mode and stuff. And I think that about covers all the code. Does anybody have any questions in particular? You can add them to the Discord chat. Here, let's see. Oh, is my audio though? I just noticed a comment on the streamer that said my audio is low. I can turn it up a little. Is that any better? Oh, okay, good. Let's see here. See if any comments I might have missed. Okay. Oh. Okay, well, I'm glad the audio is good. I think I just turned it up just a little bit in OBS. What pitch size is the matrix? This is a P6 for the pitch, which means they're six millimeters apart. And yeah, I got this larger piece from TAP Plastics. At the time I got it, I was living near Portland and I just drove there, but they don't have anywhere I'm at now. I think they only have them in California and Oregon and maybe Washington and they do ship, I believe. Let's see. Let's see. Oh, yeah, the Matrix Poros 3 has the extra address bin, yes. One of the things I did when it was being developed was I went and tested it on all of the projects for the learn guides and most of them worked fine, including some that needed the 64 by 64. So yeah, it's, there's like the only thing I've found that the Matrix Portal S3 didn't do was the PWM audio and just has I2S audio, which is actually a really good quality. So it was good. And yeah, it does require soldering up a lot in the two contexts. Let's see, any other questions? If you think I answered everything, if not, then I think I have finished. And I will be putting out a guide here probably in the next week or so to that kind of goes over the whole build and everything. So that should be, that's why I'm wanting to know some of the questions because I can include that information in the guide. Oh, thank you. Yeah, I really like how this ended up. I wanted to use the strength of the frames that came with these LED panels but really makes use of that. It's a lot less printing than my previous one, which was one of my goals in redesigning this. I think that's it. So happy circuit Python day and thank you for joining me. And let's see, let me just move that. Okay, there, now you can see me. So happy circuit Python day. Let's see, I'm not sure who we are picking up next. I think it was a circuit Python day chat, if I recall. And that starts in about 15 minutes. Anyway, thanks for joining me.