 All right. Good evening. Happy Friday. Looks like I have sound going to OBS at least. I did click go live on YouTube. We should be live on YouTube. It says we're live here. Let me shuffle a few more of these windows around here so I can stop this preview. And see the chat windows. Okay. How's it going, Dave Odessa? Let's see. Do we need to scoot that up? Is that thing not active anymore? What happened to our chat? Let's see here. Oh, there we go. I see. Okay. So hello to everyone. My name is Tim. I go by PhomaGuy on GitHub and Discord. This is the deep dive program. This is a weekly program that occurs as a live stream here on YouTube and Twitch as well as I think a few other platforms. And in this program, we will be working on CircuitPython stuff. We'll be diving into CircuitPython code. Sometimes we work in the core, which is the C program that is the CircuitPython interpreter. Sometimes we work on libraries. Sometimes we work on projects. Let me take just a quick step back though for folks that might be new and might not have any idea what I'm talking about at all. CircuitPython is what we're going to be working on. This is an implementation of Python that runs on tiny computers called microcontrollers. There's a bunch of pictures of them, in fact, over here on the downloads page. So these are basically just little electronic widgets, little electronic devices. Essentially, each one of these has a full computer on it. This main chip in the middle here, this is essentially a full computer. This one has one as well, albeit a different one. All of these have a chip on them that is essentially a computer. That computer is running this C program called CircuitPython, and what that program allows you to do is actually write Python code, store it on the device, just in a normal text file, and then have that computer execute it. So we're able to just open up a Python file, write some code into there, save it, and that will cause the code to run on the device. So that's kind of the 50,000-foot view, the high-level look at what CircuitPython is, what it's all about. It's for quickly iterating when you are writing programs for these microcontroller devices. CircuitPython is an open-source project. There's 356 boards that support CircuitPython. Anyone is allowed to make CircuitPython support their board. Of course, if it's like a known chipset or whatever that we already have some support for, then people can just add their own board in here. They just need to declare pins and a few other things. If it's a brand-new port, then obviously that's going to be a lot more work if there's no other devices supporting it so far. So obviously that's a bigger workload. But we're happy to have members of the community, members of other companies and all sorts of folks producing their own devices and adding them, adding CircuitPython support such as Cduino, Citron. There's a couple other folks that are all, Pimeroni has got lots of different boards, a couple other folks that are all producing these boards. Ethernet Featherwing is already supported in CircuitPython, isn't it? Or perhaps only in Arduino. Good question. It is currently supported in CircuitPython, so we're not testing out the basic functionality of it. We are going to be testing out some more specific pull requests. Yeah, once we dive into that, that's what we'll be looking at, is trying out a couple pull requests that are on the library that allow that Ethernet featherwing to work. So let me just wrap up the intro here. So circuitpython.org, this is where you can go to learn more about the project. It is an open source project. All the development takes place out in the open on GitHub as well as Discord. If you're interested in getting involved, we definitely love to have you come join us over on the Discord. That's a great place to get started. If you don't know what you want to do, you just know you want to help out, head over there and just let us know. We have different ways for folks to help out at all different skill levels and experience levels as well. So don't be discouraged if you've never done anything like that before. If you think it sounds interesting, we're more than happy to get you spun up on contributing in a way that works for you. So I will also mention, while it is an open source project and it's free to use, it's free to put it on your device. It's free to add support to a new device to it. It is primarily financially supported by this company. This is their website, Adafruit. Adafruit.com, I should say. They are a hardware and software company based out of New York in the United States. They manufacture electronics as well as published software, published guides and other documentation and information. Can I share a link to the Discord? Yeah, is there one on... So, adafru.it-slash-discord down below there is it, but I'll put it in the chat here as well over on YouTube. Adafru.it-slash-discord should link you over to there. How's it going, Paul SK? Happy Friday. So yes, thank you to Adafruit for financially backing the Circuit Python project. They're paying the folks who work on the project quite literally. There's a team of folks who work on the project full-time. Adafruit pays them a salary to do so. There's a wider team of folks who work on the project part-time such as myself and Adafruit pays me to do that. So, of course, thank you to them for doing that and thank you to everybody else who wants to purchase hardware from them because that is one of the ways you can help us keep moving Circuit Python forward is by buying hardware from them so that they can continue paying all the folks working on it. So speaking of Ethernet Featherwing, which was mentioned just a little bit ago in the YouTube chat, I do have the Ethernet Featherwing here. That is exactly what we are going to be testing on. I also have little Robo Lego robot here, so everybody say hi to Lego Robot while we find the right USB cable and also push the button on it so that it will actually be plugged in. Should we lay him down that way you can see him? Oh, he doesn't want to sit. How's it going, David G? Big fan of Ethernet or wired rather than Wi-Fi? Yeah, it's definitely nice. Anything that you want to be sure is going to be on reliably all the time. Ethernet is definitely the way to go if you can. Now, it is tough like lots of places you just can't get Ethernet cable run to and so Wi-Fi is easier in some situations or just possible in some situations where Ethernet wouldn't. But yeah, I'm pretty much with you. I lean towards Ethernet anytime that it is available if my project cares at all about reliability. There are some projects which it may not matter at all. If it doesn't need to do very much very often, maybe it's okay if it falls offline for a while and comes back, but if you're constantly collecting data and sending it or listening for data or fetching stuff from the Internet and you want to make sure you're always up-to-date, Ethernet is definitely the way to go. Ethernet adapter. To the best of my knowledge, it does support HTTPS. We will test that out when I jump into it. Yeah, it's a good question to the best of my knowledge it does. But I could be wrong. I wonder if TLS code that made the PicoW could be used. It's a good question. If it didn't turn out to support it, then yeah, that'd be interesting to see if it's possible to do it that way. How's it going, Biata? Happy Friday. So we are looking at the WisNet... I think it's WisNet 5K, is it? WisNet 5K library. There's a couple of requests open. I'm going to start with global constants because I think it's probably the easiest, lowest-like amount of actual changes. This one is basically all about just renaming a bunch of these variables to have leading underscores. Because MPY cross, the tool that we compile... I don't know if compile is technically correct, but I'm going to call it compile. The tool that we compile the Python code into MPY files with, it has a special case for leading underscores. It will actually cut out the name and save space. Whereas if you don't have a leading underscore, this literal string is actually stored inside the MPY file, where if you do it this way with a leading underscore, it actually gets cut out and replaced with some other unique thing that's small. So that's pretty much all this PR is. We just need to try it out, get it pulled, make sure that all the examples still work, the ones that I can try with my hardware, take a quick peek through it, scroll through like I am here, just make sure nothing else changed, and then that's pretty much it on this one. But there's a couple others open by the same person. Let me also say, shout out Hug Report to... Is it... I want to say, is it Biffo Bear? Yeah, yeah, Biffo Bear. Shout out to Biffo Bear. Hug Report, I should say, for Biffo Bear has put in a bunch of fixes lately to the WisNet 5K library for Ethernet support. I'm good, I have Rainbow Gummies nice, preparing to grumble, a friend with a riddle or pun, nice, preparing to grumble. Okay, there's another big one here, we'll look through. I did see that. Yeah, we did run across that change when I was working on this last time. And I do think it's fine, but basically this is the byte string representation of the same number. I'm not sure if there's a reason one way or another, why it might be better to have a number versus a byte string or not, or maybe it's really the same, I don't know. But I think those values are the same. That part we did figure out when I looked at this last. And then some of these, I think, this difference here, I think is actually... I think that's actually just showing that it was merged in, or the other PR maybe. I want to say in main right now, it actually is a newer one. Yeah, because there was a couple of these spots where it was off by one errors like this. I'm pretty sure those are actually in. I think this get difference here on GitHub I think might be getting a bit confused because of the way the merges were put in in certain times and stuff. This one does look a bit different here though, right? Is this another difference? Oh, we got the try except else. Yeah, that's an interesting one. Don't run across those as much personally. It seemed like maybe a bit different logic, I don't know. Or it just expanded, I guess. Yeah, it's just expanded. This bit was one line here and now it's like five. My test? I was about to say, do we have any tests? Yeah, there's tests right here. This person added a test as well. Yeah, we could try that as well. I don't, I mean personally, I don't know the intricacies really of DHCP, so probably not going to be able to tell you one way or another if that's like working as intended or not, but I can run it and see if it runs. Let's go back to main, update for files, updated. And then I'm actually going to delete this one because we're going to want to check it, check it back out. The way I can just make sure I'm starting from the current time, replacing time in the timeline without having to update it or anything different. I'm just going to be able to go GHPR list. That's going to show us all our PRs. 86 is the one I want right there. GHPR check out 86. Wow, Ethernet, what hardware is this? Good question. Yeah, I did not say much about the hardware, did I? So this is a, specifically this is a Feather ESP32S2 TFT. That's a feather device with the TFT built in. This one is the Ethernet feather wing, and then they both happen to be connected through this feather tripler. Those are actually Etherfruit manufactured parts. So that feather wing, though, this one works with lots of different feathers. I just happened to, this is the one that was handy that I grabbed a test with. Scoot this over a bit. Oh, wow, the chat. Sorry about that. Yeah, the chat was not scrolling. I just noticed that Palette Slice finally made it to community bundled nice. Yeah, sorry. I'm a couple of minutes behind on the chat. We're going to catch up, though, here. So great, if it does, easy to test with the hardware. That's about HTTPS, I think. Package, oh, make an MPY. Yeah, compile, maybe. CirclePython works with HTTPS. There's code for a mag tag. Yeah, I think, so mag tag will be slightly different because it's got its own built-in Wi-Fi chip. The Ethernet is just a different way to access the connection. MPYs are a binary container format with code objects, byte code, and native machine code. They're stored internally in a nested hierarchy. That's the MicroPython description, nice. Let me read that one more time. MPY files are a binary container format with code objects, which are byte code and native machine code. Those are stored internally in a nested hierarchy. Nice. Feather soon. Sweet. I hope you have fun with it. Do you know, like, which one you're getting already or you're just planning on getting one? So I'm going to take the version... That's interesting. It actually does have the remote. So maybe if you have the right remote, when you do GHPR check out, it will allow you to push, maybe. It looks like it would allow me to push if I needed to, whereas ordinarily it doesn't. Interesting. In a blue fruit, maybe. Nice. Yeah, that one's especially good if you're interested in BLE, Bluetooth Low Energy type stuff, for sure. There's a couple of, like, Feather NRF 52840. That's one that has Circuit Python support, as well, with Bluetooth. Yeah, there's a lot of those different Feather devices out there. So we're going to take the current version of the library from the PR, we're going to copy that over, put it on the device. Mine is plugged in here. Lead this one. Latest ESP32 variants are nice to work with, having built-in Wi-Fi and Bluetooth. Yeah, ESP32 S2, I would say, is the bulk of my usage right now. I use a lot of ESP32 S2 devices. I have an S3. We busted that out for some specific testing recently, but the S2 is kind of my go-to right now for just what I reach to for any random thing I need to do. Or a Pico W. I have several of those lying around as well that I'll use for testing stuff. Native USB-C and StemAQT, yep. MIDI device. You're going to make a Bluetooth keyboard soon and maybe a MIDI device. Nice. Pico W. Pico W is really nice. For the price point, it's like, it's difficult to get a more versatile thing for that much money for sure. For that little money, I should say. I think we probably don't have TO open. Let's get that running. What is our actual code right now? This is the Ethernet stuff, okay. Yeah, you could be right. This one is doing HTTP. I guess we'll find out here. I think it's... It'd be good to test with that one. Got our IP filter result. That happens sometimes. That one, I think, is just a retry. If you have robust Wi-Fi code, you would actually build in some retries to it. In my case, it's just a one-shot and it has no retries, so I just CTRL-C, CTRL-D to get it to go again. We did get our success. So let's try, I guess, something HTTPS, maybe. We want to be a little meta. Maybe we can fetch a file that's in the repo that's not too big, like the requirements file. This one's HTTPS. Let me duplicate this. Let's see. Yeah, less mode now. Yeah, I guess you might be right. It's looking like you're probably right. Let it try again. I assume that's not a retry type of an error, though. Happy Friday, Tim. I have an ESP32 S3 with a LiPo battery. The battery lasts a little compared to the Internet 52840. Any ideas? I do not really. Personally, I don't have any real experience with low-power battery stuff, honestly. Definitely checking into whether the Wi-Fi is on. Obviously, if the Wi-Fi is on, I would assume that that's going to eat the battery quite a bit quicker. The only other thing that I know of that might factor in is try to figure out if either of your devices have a sleep mode. There's, I think, a light sleep and a deep sleep, and it has slightly different behaviors. But if your device supports that, that's a way to save some power as well, potentially. Just wanted to say hi. Super new to coding in Python. I'm loving that I just found your podcast. That's awesome. Yeah, thanks for tuning in. Glad you're liking it. If there will be a Feather RP2040 with the wireless chip, like a Pico W, that'd be swell. Might be hard to justify the effort just to have the Feather pin out at USB-C on the Pico W. I imagine there will be at some... I mean, there definitely are Feather RP2040s. I would not be surprised if there are some Wi-Fi-capable ones at some point. Yeah. I don't have any kind of insight information or knowledge or anything like that, but I would not be surprised if that came to be. Some RP2040-based Feathers with Wi-Fi access would not be shocked. Okay. Yeah, so we do actually... It does seem like we cannot do HTTPS, which I did not realize. And I mean, I suppose there's some chance that technically this one might just work anyway. We think Microsoft would return that to us if we do HTTP. Or is it just going to redirect? It didn't just fail instantly. But this is dependent on the server, right? This is not going to work with every URL. Some servers might allow you to fetch the same resource without the S, but lots of servers are not. Lots of servers, they're just going to redirect you. It may have happened, honestly. It seems it's feeling like we got stuck here, honestly. Let it try again. Can't really get the Wi-Fi chip outside the PicoW. Yeah, I don't know too much about the actual specific PicoW, so that it's own... It's not like a thing that they're selling also or something. I assume they plan to eventually, right? Or no. Maybe they made it just for that. Yeah, I haven't really followed too much at all the actual specifics of the Raspberry Pi stuff. I just have used them a bit. Yes, code. I hear lots of folks like VS Code. Personally, I'm stuck into PyCharm. I've been using PyCharm for quite a while, and so that's definitely just the tool that I reach to by default, but we do have lots of folks who come around that talk very highly of VS Code, so it sounds like lots of folks do like it. Yeah, it doesn't look like sending requests failed. It didn't give us a specific error, but it does not look like that's going to succeed. Yeah, it is interesting. But I wonder how it works. I don't really know anything about the TLS implementation at all, but I'm pretty sure... Can the Pi Portal? Can the Airlift stuff do... A Wi-Fi and a Feather? You should go Airlift, I see. Oh, they made a deal with the Wi-Fi Trip Fender. I got you. Can the Pi Portal? The Pi Portal can do HTTPS, can it? But I guess in that case... In that case, the ESP32 chip has it built into there. And then the Feather S2 can, I believe as well, but that would be built into the core socket, and then Pico W is basically the same, built into the core. So yeah, I guess you would need, like... I think you would need inside of socket in here. I have no idea exactly what it would be, but I think something inside of socket here you'd have to implement it so that it can handle TLS. It would be... I wonder if there's a Python implementation anywhere. So my guess would be the ESP32 S2 and the Pico W, both of those are going to be C implementations. I really wonder if slash where there is a Python implementation was net that from inside requests where it said wrap socket had no attribute TLS mode, really have any mode, does it? Oh, TCP mode it does. It doesn't have any usages, interesting. Like the port too, I wonder if that's coincidence or not, probably not, right? ESP32... The PyPortl can't ESP32 has it, the airlift as well, but the 866, the original ESP doesn't support the latest TLS or hold the root certificate. Good to be circuit Python uses open SSL code. Yeah, can I get VS code to build? Can I get VS code to build? Oh, interesting. I didn't know they released the source to VS code. I thought it was just released as a binary. Is it possible to make a video about the WizFi 360? I'm not familiar with that device. I mean, if you are asking if it's like literally possible, I suppose it's definitely possible for someone to do. I don't have one, I don't think, so it's not possible for me specifically to do. What is this thing? This is a Pico with a different Wi-Fi chip, interesting. I've never seen this one. Yeah, I mean, generally speaking, it seems like it should be possible to make a video about it, but it's not a device that I have, so it wouldn't be one that I could make a video about personally. I don't know for sure if that thing would support circuit Python either. Like, it would probably run circuit Python, but I don't know, my suspicion would be that the networking probably does not work, but I don't know for sure. My guess would be there needs to be some work to implement the networking on that device. It's a new Pico for its free software, much in the way that Chrome is. Oh, nice. Not sure if Pico W with Raspberry Pi, CSDK or MicroPython does HTTPS. Not sure either. Let's try the couple of the other examples. So the basic example, a simple test, was working fine. We fetched Adafruit's website, we fetched Bitcoin price, turned off the printing of the Bitcoin price, but I'm not sure that was working as well. I'm doing so hot these days, I think, right? 19,000? It's nothing to scoff at, I guess. There's a few guides for circuit Python Ethernet that work with that WisNet. I used it for a short time, nice. Basically, the WisNet is a network co-processor. It does not support TLS. Maybe possible to do something with the main processor. Oh, that's true. That probably would slow it down a fair amount too. I guess, yeah, I don't even know what is the actual... I think we actually zoom in enough to see it. Not really. I don't really have any idea what that... Yeah, I don't know if that chip is capable or not. Does the product page say anything about that? It doesn't really specify anything about HTTPS or HTTPS. However, Ethernet is its own section, but nothing else really. I am curious about Arduino. I wonder if that would tell us if it's possible. If the Arduino one would this? Well, server? Oh, they're saying change it though. TLS? Oh, boy. Yeah, it's definitely a bit over my head. But it seems like maybe this is C code that interacts with the same main chip on that board. And this may possibly support HTTPS. If all of that is true, then that means the hardware itself is capable of it. And if that is true, then maybe someday we could get access to it from CircuitPython. But it's definitely not just immediately there, for sure. There's STM stuff in there as well, which I don't just chip in it. It's very small though. There's like nothing in that. Interesting. So it could be interesting to see the board compatible with other software like Tasmota or ESP Home. I'm not familiar with those. Are those like IoT hub type things you connect devices to? And then you can use it to control them, send signals to do stuff on them? I feel like maybe I've heard the name Tasmota, but I don't know. I don't have it associated with anything. I'm not sure what it is. Go single page then search? Ah, interesting. Yeah, that's a good tip. Yeah, thank you. So we did not come up with anything on this page, but that's actually really good to know. There's been times where I've wanted to do that before and did not think to do it. I will definitely use that at some point again, I'm sure. Single page. But for the other examples, simple test is what we're running currently. We'll do simple server next. Basically just, oh, we don't want to use that IP. We wanted to just keep the IP it has ideally. Do we have to put that on the server? Let's just hard code it to the IP we got, I guess. Or anything, let's copy it to our device. We're not just changing it inside the repo. I had gotten 1.147. Theoretically that's going to run a server on port 50,007. And it's just going to send back. I don't know what that's going to do with a get request, but I suppose we're about to find out a CK in use. You know, we should change this. I should make a script to go through the library bundle and find all instances where bus.io.spy is used and change it to board.spy after I ask the rest of the team if that's something we actually want. At the top of my head, I feel like we should. But maybe there's cases where it's not as good. Some devices don't have spy, but some devices don't have pins named that either. Maybe we could add a commented one, like we have this. I don't know if it's worth it. Theoretically, that's running. It's going to return weird stuff, I think. Oh, 7. Why not even work, to be honest? 007. Oh, you know what, though? One thing it does do by default is it actually does HTTPS. Surely will not work from the server, I assume, if it doesn't work from the client. So we actually need to... Oh, actually, that does say HTTP. Maybe not. Print the data if we got anything. Connection data. I don't know if this actually works. I feel like maybe this can't accept HTTP requests. I feel like we need to... This is like wanting us to connect more bare bones than that, maybe like this more so. Internet server client. Import socket. This is 6, 8, 1, 1, 4, 7. Port 5007 with socket as SS bind listen connection address accept with connection print connected while true data. Whoa, whoa, whoa, whoa, whoa. Data receive if not data break. Not data break. Breakout of the... Well, loop. But we don't even need the loop. Right here. This is like listening. This is a server, I guess. Where's the client? Send all? I don't want to do any of this, actually. We create the socket. I guess we just call connect. I need like none of this. Action refused. Still just hanging out. We have not used that IP? Maybe that IP is like taken by the fact that we had connected to the server under that IP. Okay. Let me catch up here on the chat, sorry, but... How's it going, DJ Devon? Good evening. PicoW has no board.spy. Yeah, but I feel like it's 50-50, right? Like all the boards that don't have board.spy will fail if we do it this way, but all the boards that have a display will fail if we do it the other way with bus.io. So there's going to be some devices failing either way. I wonder, could we not go inside of here and like, if the bus is already in use, just return it? Could this not like allow being called again, but just return the existing bus? Note to self. Look into that. I want to go down that rabbit hole quite right now, but that's something to look into, I wonder. Because that would solve it, because then... Well, no, it wouldn't. That would not solve it, never mind. That doesn't solve it, actually. Because we're not calling board.spy twice. In the other case, we're calling bus.io.spy. Yeah, a comment might be the best thing to have both Telnet on the port. I could try Telnet. Maybe. Does Telnet just exist in Linux? I don't know how to use it. That's not very helpful. Wow. Very unhelpful help. That might be the most unhelpful help flag I think I've ever had. Does it want man? Telnet? Is that the thing? Is it mad I didn't do this way? Okay. Yeah, that's a little better. I'm going to look somewhere else, though. Telnet terminal. Telnet, for example. I would use putty for this back in my Windows days, which I guess I don't actually have putty. I've been Telnet IP port. Okay, that's easy enough. I'll show that. Oh, now we're in here, though, with Telnet space. I don't know if it's like... Oh, boy. I don't know if those seem to be coming through. Maybe it's because I'm not sending enough data? Because this says, read 1024 bytes. If we don't send exactly 1024 bytes, would it not work? Or would it hang or something? Oh, do we get to here? No, we're just inside there. I have one wisdom hat for the RPiPico. Interesting. Examples are using HTTP, no S. It would be nice to bring over some TLS for Ethernet. Agreed. We were talking about that a bit earlier. I don't know if the hardware supports it, for sure. Can we, like, receive... Is there a different way to receive conduct? Can we read line? I mean, we are inside this, right? Okay, it's socketed. Uh-oh. I don't know. Reset button? All of a sudden, we are out of socket somehow? It doesn't make any sense. I mean, this did not actually... Yeah, we failed before that. Does this break it? What does this mean? Do I break out of this? Oh, okay, yeah. Control, I guess, is the carrot thing. Oops. Weird choice. Control? Right bracket. It didn't actually take me out, though. Oh, close. We have to type close. This.close is missing in the client. Oh, so this is too. Did this, like, maybe this consumed it or something? Did this one succeed before? Remember if that actually succeeded before? I mean, to run. I don't... We never did see the response. Like, we never saw it inside of here, but... Oh, like, it crashed before, didn't it? Like, it said it couldn't connect? How do we get this one to have its sockets back? I'm going to unplug and replug, I guess. Thank you for the heads up, by the way, on the close. That closes you talking to your Telnet client after doing the escape sequence. The width should close it. Now we're still not seeing it in there. Oh, this time now we get it. So we did connect before. First, I commented this back out so we didn't actually get to see it. Now let me guess the socket's new, so whatever. Okay, now I'm confused. We're not even getting to receive river.accept. Wait for a connection from the client. Oh, that didn't work. I don't know. I don't know how this one works. Accept needs to be inside the loop. I don't think it's ever getting past accept. I don't think it will matter where I put it at this point, because it's never getting past it. Maybe I should not use this IP. Let's try a different IP. Is anything using that one? Everything responds anyway, though. Well, maybe this is to do with which network it's plugged into. Let's skip this example for now, because I've never done this example. I don't really know anything about Telnet or how this is supposed to work, honestly. Let's do WSGI example. I've actually done that one before. I'm a little bit more familiar with what it's supposed to do. If this one doesn't work, then I think we can conclude the other one is not going to be able to potentially either. If this one does work, then we know, at least on some level, that our library is okay. It could just be that I'm failing miserably to understand how to use Telnet or something. I'm wondering, too, though, and what this is also potentially going to help rule out is if this fails also, it might be the case that my computer can't actually see this thing on the network. Maybe because it's plugged into different AP and they're all part of the same big network, so it should be able to see it, but I don't know if all the HCPing and masking and subnetting, I don't know if all that stuff's set up right. Maybe it's possible that it's not that my computer just can't see it because of the way it's plugged into a different thing. This will hopefully rule it out, because if this succeeds, then that means that my computer can see it. This doesn't say what IP it's going to take, so that's one difference here is this one is... Oh, shoot. I just put that in the wrong place entirely. Module WSGI. Guess without, I think I accept it's just waiting for connection. That is my guess too, but I don't understand why it's not seeing that connection. Maybe that is because my devices can't actually see each other on the network, SDK and US. Didn't I change that? Try this, connection.close in the server. We never got a connection though, because we never got to after... I should have kept this, actually. Because we never got to here. We never printed going to loop, so we never came back from this. We called server accept and then we just hung. But no matter, like we could put con.anything, I think it's never going to make a difference until we figure out how to get this to actually return, which I'm thinking is probably, at this point probably because they can't see each other. So we got to troubleshoot that, or we got to try to figure out if they can actually see each other in a different way, I think. Server accept inside the while. I mean, I will move it. I don't think it's going to matter though, because it's not returning. It's just going to go to the while loop the first time and then not return. But it's still not returning, which is the crux. Ethernet, simple server. So if we put this in here, I think my hypothesis is we never see after accept. This time we'll see this now, because we'll go inside, but we'll never see this. So nothing that comes after will matter is how I think it will go. So we got going to loop, but we never saw this one. So if I run, and then which we're on, 148, it's also unclear to me, am I supposed to pick a used IP? Am I supposed to pick the IP that I connected to before? Or am I supposed to pick a totally unused IP? That part's a little bit unclear to me as well, truthfully. 148. This one at least is the same though. So we'll run that back to here. And we still never got past accept. It doesn't matter if it's inside while loop or outside while loop, because we're never, this is never returning right now. Server knows its own IP. Pretty IP. Okay, that time it did get 148. I wonder if it got that, because I put the, I mean this comes before? To say is, should this be true? I feel like this should be true probably. Could that not be true? Well, this one just doesn't pass it. It does default to true. Maybe we should try true. 147 this time. Back to 17 here. Why is close this thing? Oh, but this still says 147 here. Shoot. Why do you have to declare a server? Why do you have to declare? I don't understand why this works this way. I also don't, I cannot worry the parts of it I don't understand, which is not very helpful. I don't understand though, like if this is connecting, and this is DHCP, why does this have an IP? The server doesn't really have its own IP, does it? The ethernet is connected to an IP. The server is connected to the ethernet. I don't really follow why this needs to be declared. We're just broken. But this feels back to the old problem, which I really, really, really, really hope it's not, because I really wanted to be done with this problem. I don't understand also why this is now just failing over and over, when we did the simple test a ton of times. Networking, networking is always like this, isn't it? Networking just never is like, let's do it and you're done. Server waits for a client to initiate a connection because there are no incoming connections. The method will block you. You know your IP. Usually the server has a static IP, you don't want a random IP. I mean, in the real use case, yes. But I mean, for testing this, I don't think it, I feel like DHCP is easier, because that's what, none of my real devices, real devices, none of my real devices use static IPs. Everything, all my computers, all my phones, microcontrollers, when I get a choice, I'll use DHCP. So for me, it's easier to just test with DHCP than be static, because I don't know how to set up the static the right way. And then if I try to set it up, then I'm always wondering like, is the thing I'm testing not working because it doesn't work, or is the thing I'm testing not working because I set up static IP wrong? So ideally, I'd rather, I'd totally rather just get DHCP and then have it listen on whatever IP it's on, and then I can find out that IP and connect to it, understanding that obviously in the real world, you would never want it to just choose its own IP and change from day to day. That's, that does make sense to me, but in this case, I just want it, it's easier to test it that way for me. Server needs to bind to an IP and port it and listen. You go host equals that. Resr does have, yeah, there's some way that I can set up the reservations and stuff, but I don't know how and I haven't done it before. I mean, I think I did it once at some point for something, but I don't know, don't know for sure what it was, and I don't remember how I did it. At this point, though, we're stuck even further back. At this point, we're not even, we're not even on the same problem anymore. Now we're back to last week's problem, unfortunately. So I'm really, really hoping that that's just a matter of, but we saw those differences, but I didn't fetch. Could this have not giving me the updated one? Okay, delete this. Delete this. So I don't trust that that was current. Get, no, clear. This is on main. Get remote dash V. Get remote. Remove. Biffle bear. I don't want this anymore. We're not going to push, hopefully. So I'm taking main now, main only not the PR, just main copy this. Delete this. I'm going to trash this file. Copy this here. Fingers crossed. Please, please, please. I don't understand how we succeeded a bunch of times before. That's a bummer. I feel like something I did broke this, right? Like we succeeded a million times. We never actually succeeded what I was trying to do, but we got DHCP resolved a bunch, a bunch, a bunch, a bunch of times in a row. And then all of a sudden I just cannot anymore. It's just fail no matter what. Go to configure. Not inside of here, isn't it? At the DHCP. I don't know. I may not be destined to be the one to test this Ethernet stuff, honestly. I feel like I have not, I keep running into the same problems. I don't really trust my network to be working with this. We might, I might be giving up on being the one to test this. Server and clients not using the same. I mean, right now we don't even have a server, right? Right now we're back to simple test, which is client only. The server is the internet. And we're failing before we ever reach out. At this point, we're failing to get an IP address. We're failing to even connect to my local network. It has kind of a strange wording, but it's basically failing. Well, maybe it's connecting, but then not getting an IP. You could argue, I don't know the semantics if that means technically that it connected but then failed afterwards or turn is minus one. We're not using any ports right now though. We're failing before we even get the ports. This is all just DHCP. No port has been specified to the best of my knowledge. No, I don't know how DHCP works in the actual specifics. Static IP didn't used to work on Wisnet. It can't be as simple as that because I used a static IP more than three weeks ago somehow. But again, my environment is weird. My environment has always been weird for this. I tried to work through it a few times. I think I'm about at my wit's end truthfully though. DHCP is easier, but it changed IP on you. I don't feel like it did. I feel like I had 147 every time that it succeeded. I hard-coded 148 at one point because I thought maybe I needed to do that. As far as I know though, it gave me 147 every time that it succeeded today. Static IP needs to be unique to the device and the device you want to connect to needs a different IP, but on the same subnet. Static IP didn't used to work. I've done C-socket programming about this 30 years. It's on what, if any, firewalls or subnet rules you have going on. I mean, at this point though, but they didn't change, right? My firewall rules are the exact same as they were 30 minutes ago when this script was succeeding over and over again. I mean, all of those things do come into play, but don't really explain like we were succeeding over and over again and now we're not. I can't say for sure, I guess, that nothing firewall rules. I certainly did not intentionally change anything. For the best of my knowledge, nobody on my network intentionally changed anything. I powered off and then powered back on and then it successfully did get this IP. It did get a failed to resolve hostname, which does happen with requests. That one is a normal failure that we expect. We did get an IP again. We got Adafruit's IP. We did not successfully fetch. Let's try again. That one succeeded. There's our Bitcoin. Okay. It needed to reboot, apparently. I don't know why I did not try to reboot it sooner. It needed to reboot, seemingly. Let's assume every subnet or ethernet is on the same. I honestly don't really know how my subnets are set up or anything like that. Like the cable. It's definitely a good idea to look at the lights. I'll check the lights next time. The port would be assigned along with the IP. The configure could be recovered with retry. I retried a bunch of times. At least a dozen times I feel like I retried. I don't know exactly how many it was. We could scroll through here. I did eventually unplug, replug, essentially, and it went back to working. But I got the sense it was going to fail indefinitely. If I kept just retrying with Ctrl C, Ctrl D, it failed enough times that it convinced me it was not going to succeed. It must respond to ARP requests. So even if ping fail, you can see you're on the same cable. Rivercode needs to get an IP either with DHCP or by static assignment. Then it needs to also provide a port to use. Thought it changed on you. I think it's given me 147. I hard-coded 148 at one point because I was am-still, if we're going to be honest about it, confused about what's going on with the IP that is in the server code. I did try that one at one point as 148. My device will connect just the beginning of the stream. Okay, it was working to resolve. Yeah. Okay. We've succeeded a bunch of times. Well, not a bunch. We've succeeded once, I guess. Let's say once or twice. We've succeeded fetching. So I am not... I'm skipping server test. I don't know how server test works. I don't trust that I know... In fact, it's not even that I don't trust that I know enough about it. It's that I know for a fact I don't know enough about Telnet or how to do that stuff or how it's expected to work. I just don't... I can't test it effectively right now with the knowledge I have. We're going to delete this again because this was main. So we're going to delete this again. We're going to go back to PR1. I'm going to slowly start peeling back through the layers that we have come through so far. I'm cheating. Put the server code in the server code, the IP that you received. So that's what I tried when I first started. That is the exact thing I tried when I very first started trying to use the server. I knew that 147 was the IP that it got the last time it succeeded fetching. So I hard-coded 147 as the IP for the server. But I mean like... I still don't... Like, how could this work though? Let's say hypothetically, like how could this even work? Because this says, is DHCP false? But it doesn't supply an IP. So like... The way this is written initially, like what does this mean? What does this do? It will connect. It will not use DHCP and it doesn't specify an IP. So... I don't get what would happen, I guess. Down here it specifies an IP. But this one is tied to the server object, which is a socket object. But with Ethernet up here... I don't even understand what this would do, I guess. Playing with telnet ports is bad. I definitely do not know what I'm doing. As long as it's not localhost. It's across the network. It's from the computer to the microcontroller. Make sure telnet... I don't think it is. IP is a few lines below, but this is for the server. I guess the part I'm confused about is... In this code, which is, this is the fetch code. In this code here, as soon as this method returns, as soon as we get to here, we have an IP address. As soon as we get to here, we have an IP. This is immediately after Wisnet constructor. So, if we now change back over to this example here, let's assume... Let's pretend all the rest of this stuff is gone. Let's pretend none of this even exists. And let's say this is the only code right here. We're immediately after the constructor here, but we did isDHCP false, but what state are we in here? Do we have an IP? Is there a default somewhere? This is a server demo. You don't have an IP. Do that after a reboot to roll out a cached IP. So we could print, I guess, right? We could do the same print, I suppose. Can we double up those? That was weird. Did I copy them already? I'll learn together. So this currently right now, it still has the same IP as the previous one, but I do think do that after a reboot. Yeah, that we definitely want to do. So unplug, re-plug. Unfortunately, we probably can't see the first one. Oh, we actually did. I'm really surprised. Usually I don't see the first print out. Kind of yes. We think we have an IP. I think it's 0.0.0.0. Obviously, that's not a real IP, so to speak, on the network or whatever, but that's what it thinks it has. And so how do you do... And that's one of the other examples, I think, right? How do you set the static IP? That's how you're doing it. These are not examples. I don't know why these... Man, this is what I'm supposed to be looking at. I have config. I do still want to test WSGI server. I still don't... I still don't believe, personally, I know enough about Telnet and what's going on to be able to say, like, if stuff is... should be doing anything different than it is or not. WSGI have more experience with those, so we're going to try that first. Well, not first, because I already did the other thing, but next. And that one does not say... Do we have to do this? What? What is this doing? What is Git, Mac? I don't think we have that, do we? I'm not connected to I2C for anything with Ethernet. Can we just not do Mac? I want to just not do Mac. Yeah, these ones just don't have it. Pick that out. Don't Mac. That would mess up our IPs, potentially, too, I think, so we don't want that. What is this mad about? Effected interface, gotWizNet. And this does not have an IP in it anywhere, right? LED stuff, CSPIN, SpyBus, Mac stuff, we're not actually doing. You set up Ethernet requests.setSocket, WSGI app, and go inside that. Set interface, Ethernet, Port80 web app, open this IP, and then it just prints. It'll print the IP it's running on, but it does not specify an IP. And then just root. I think the code is... Let me catch up here. WizNets do not have a Mac make one up. I don't... It probably did. I'm sure it has default somewhere, I think. I don't want to necessarily have this code make one up. I wanted to use whatever it was using before, ideally, hopefully, to try to keep as much stuff the same as we can. Did you do a listen? I'm not sure, honestly, if config. Okay, so that's back to when I asked about how to set the IP. I'll just put a two-second delay. Oh, interesting. Oh, I see, just in your code pie so that you don't print anything before TEO showing. I gotcha. That's pretty smart. I did... There's times where I do a print, like a sleep at the beginning of the script. Usually it's if I'm testing anything that can hard-fault. That way I have time to change the code until I'm not involved. I could try. Is there a socket client? There's a socket client in the examples. I could try that. That code is looking at a separate board for a unique Mac. Yeah, okay. Has the default built-in. WSGI is a web server, not a... Yeah, no, I know. I do know that. And the... You would think the simple server would be easier than the web server, but the truth is, like, I've done WSGI a bunch of times. I've done Telnet as far as I know once earlier today during this stream, and I failed miserably. So I just personally have more experience with WSGI. I know what to expect. I know what does work, doesn't work, and I know what it looks like when it fails in different ways, whereas with simple server and Telnet and sockets, I don't know all of that stuff. So I don't know if what we're seeing is what we expect or not, really. And I don't know how to troubleshoot it. I've never done it before. But WSGI I have a little bit. And this works fine. Yeah, root document. Large pattern. Ooh, this will return a big page to us. That's pretty. I like that. It's like a molecule. Never used WSGI. It's like an HTTP server, right? I'm probably butchering the technicality. It's probably not technically an HTTP server or something, but basically you specify your URLs. So, like, this URL here, slash large says whenever the user requests slash large, this function will get called, and then it will return data based on what's here. And these can be HTML as well. None of this is actual HTML. This is just raw stuff, but it could be, like, HTML to allocate socket. Go to configure DHCP server. So did we just accidentally figure out how to get to the broken state? You might have just accidentally figured out how to get to the broken state. It seems like if you run the WSGI server and then save the code file, is there like a start update? Is there a stop or something? Is there a thing we need to... That's weird. We need that? I mean, right now I assume we just fail the same way. I'm kind of assuming if I do the unplug, we can get back to working. Hopefully, fingers crossed. It feels like something didn't clean up properly or whatever, like I saved CodePy and that caused it to rerun, it needs to catch that and close or like shut down or something. Yeah, there's our H1. So then in your server, you basically declare all these different URLs that you want to use and then just return whatever data you want from each one. Like there's a slash code that'll give you the contents of CodePy, slash BTC, large and root and then LED. I have an LED. What's this doing? Neopixel? Board Neopixel? Yeah, I guess, right? So LED slash RGB, LED slash, let's say, 255, 0, 0. LED set, yeah, and that turned it to red. It's down there, is where it's at. Here I'll go this one there, over there, so you can see the LED a bit better. That's on yellow. That's working fine. WSGI server is good. AIoPost, I can do this. I will test this one. And then I think those are it for me. I will maybe try the simple server one more time. But even if I don't get it working, I'm kind of willing to say that I think this PR is not the cause, right? My issues with not being able to make that work are my own issues, not really to do with the PR. That's kind of how I feel, I think, at this point. So if we get this to work, we got the other two simple test client and then WSGI server. All three of these work. I think I will go approve that and call it good for now. If anybody else wants to test simple server, that's how simple server is supposed to work. Or especially, double especially anybody who's ever successfully used simple server before, I have not personally ever used that simple server before, I don't think. But if anybody has and wants to try it out, that would be awesome. AIoFruit.io, so we'll go AIoFruit.io. If you ignore the negotiation, let me catch it up here. Details are hidden in the WSGI module. Ever used? Yeah, I'll see, so I was there. It is similar to that, I think. If that's the thing I'm thinking of. I used a thing on Java that was named to that, I think. Which to ampule. You can learn by telling that to that IP import and then type get slash. That will actually has a browser sort of. We go 147, but then in our case it would be a port 80. I'd get space slash browser. I think I'm not sending properly or something. I don't know. I think my new lines maybe don't work right. I don't know. Days ago. I did relay interesting. Where's the delete? Disable. New feed. 15 seconds. I counter value data. Two values. I don't know if that came from when I did the thing in Telnet or if that came from something in the LEDs. Maybe we did actually tell that something, but not enough stuff for it to handle or something. Posting data. Nice. There's our zero. So after 15 seconds it should run again. And then input one I think. Yeah. Let it do that. And it should show up there. Let me catch back up here. Well, we do that. HTTP server has a lot of recent improvements. That's true. HTTP server is a different library that is kind of an alternative to WSGI that works in a similar way. So if they're doing lately with the updates it should be great versus when I first used it last year. Well, this time we posted a lot of data. Maybe we just didn't see the response last time. Oh, I don't know. That's still zero though. Uh oh. Oh, it fetches data and then posts data. I see. Maybe. That's true. This time it failed anyway with hostname thing. It did post a second one, but it posted at zero. But I guess that could be just right now What does it actually do? Let's look. So data. So it goes while true, posting data. Data equals counter. Counter is a number. Feed equals that. Payload equals value data. Response equals post. Secrets, feed, feed, data. Payload is value data. It prints the response from that. It closes it. It increments. It prints okay. It sets response to none. Oops. So the next time around it would be here. Posting data again. Setting data equal to counter, which will be on one this time. Second time. So now I've been 15 seconds. Alright, there's our one right there. We got the one in there. Theoretically, this will just keep incrementing every 15 seconds. However, there is no error handling. So at some point when it works being networks, this will fail and then, since it doesn't have retry logic or anything, it will just stop after that. Telnet, if you ignore the negotiation, is just about opening the socket and connection, socket slash connection and connecting your keyboard slash screen to the server on the other side. I haven't used the simple server other than to show that it isn't CPython compatible. But I could take a stab at it. That'd be awesome. I've seen the PR code with it. Oh, the fact that it's... And so I think one of the other PRs gets us closer to compatible. Oh wait, this is a different thing. Okay, right, TCP server would be then on top, I guess, of the regular socket server, which are two. Perfect timing. What's all of this stuff? I guess that's just like... API returns to us when you do it. Need the Wisnet. Interferred, we're talking, was it... 86 is what it is, although 87 is on the list. Like, ultimately, my aim is to check all of these. 86 is the one I started with because it seemed easier. 87 seems more complex, but yeah, I am intending to test that one out as well. I was hoping 86... I was hoping to get 86 done a little bit quicker and to do a few more than one tonight, but it's not looking so good for that. I think simple server is lower in complexity than web server demo. I would agree that simple server seems like it should be lower in complexity than web server demo, but personally, for me, it ends up being the opposite way around from just my personal experiences. Like, the simple server is harder for me to know how to test, or it's just harder for me to test, because I don't know how to do it, but the web server, I do, and so even though it's more complex, it's easier for me to test. Sometimes 15 seconds is more like 30. So yeah, and it will also, I'm sure it's not counting the time it takes to do the actual request. Like, however long this actually takes, will add to that. So if that request took 20 seconds by itself, then our actual loop would be 35 seconds. We did eventually fail. What did we get up to? We get a 3? No. Failed on 2. Failed after 2. We failed on 3, I suppose. But we did succeed up to there. Okay. We got about 15 minutes left. I don't think I could probably let's just say I'm not very confident about starting a different PR review. What I will do though is I will spend the next 15 minutes trying to do simple server again. You not personally think that I'm likely to be successful, but I will try and hopefully we will be surprised. Just double checking to make sure, yeah, this is the one with the leading underscore. So I definitely have the PR code on my device currently. So we're going to take that simple server, put it back into there. I'm going to change it up to do this through. I'm going to leave that there. And I put all this stuff back. But instead of hard coding this here, we're actually just going to take this one again. I do like, I think, AnikData, you said you do it this way. And I think this is probably Honestly, I think the example should be this way, just because I feel like the example is a bit simpler this way, but maybe not. 5007 bind after bind after listen loop receive ride. Save that. This is for our PRs are the same person. I assume they're compatible. Maybe the strategy would be to test with the for applied if it works. Um, yeah, I tend to try to do one at a time, but this could be a case maybe where doing all four might be an idea, maybe info overload, but they're more interoperable second examples for comparison. Simple server, it waits for 1024 characters. I don't see a timeout yet. Doesn't seem to have a timeout. But we don't even get to waiting to 1024 characters though, because we don't even ever get past except I mean, we weren't before I should say when I say we don't even what I really mean is when we were doing this earlier, we didn't because we got oops, we got after bind after listen. So that printed this printed and then this has not completed yet. So we haven't even made it down to here where we're doing the 1024 bytes. Um, so I'll try with this first. No, not this one. This one. No, not that one either. This one here. Yeah. The host is that port is that copy pasted just to make sure it's the same. Okay. Oh, well, we can't do the IP now. That's fine. It's the same when 1.147 not just says send all hello world would we need would we need a new line or something that I put a new line on this that matter if so does it need to be our in or in our so after listen we still never got after except or what is called in this one is just as going to loop but it comes after the except you should take a simple client code one of your Wi-Fi boards type 1024 characters. It's just bytes doesn't matter what you send. Okay. I test each independently. Um, I mean for one reason just because I'm having a world of trouble even just trying to do what I thought was the simplest one like this is already the second time I sat down to test the same one had a bunch of issues last time I had a bunch of issues this time. I don't trust myself to like inner operate all of them and understand if something goes wrong which one could be at fault or not or troubleshoot with all of them in the mix so I kind of just feel overwhelmed trying to test for things at once when I'm when I have been trying to test what I thought was the simplest one and failing miserably I could be quite blunt about it that DHCP did true and watch it knock from a guy offline yikes be pretty funny I'm sure you did but the fixed IP must match your network not the default in the code network not the default in the code I'm not sure what you mean so right now I have I have DHCP when we connect and then we printed the IP it printed as 147 that's the IP that we put on the server which is the one that we called bind and then waited on accept and then that is also the host that I put when I connected here should this be different is this the right thing I don't know what AF is I got a lot of them though I wonder if that should be something else okay I'll try telnet so this was the python code that's supposed to connect and send something we did not see it come through we did not see it get done with accept I'll try telnet this one 5000 no 50,000 0007 unable to connect so that's interesting we did I think we did get connected before I wonder if we wreck it by running this if this connects now it does so somehow when we ran this one that stopped our telnet from working afterwards oh this time we failed here after listen failed to allocate socket I think we need to reboot again because this is what we were getting when it stopped working and I had to reboot to get it to work reboot microcontroller telnet to port 5000 see if you send 1024 characters or more that should be listening okay this time we did get accept we got going to loop we got starting receive so theoretically if we could send it 1024 data how am I going to get 1024 bytes though like how am I going to get exactly 1024 bytes I mean or does it need to be exact one character is one byte is that true 1023 or 1024 not do a okay there we go we failed after Mr. Suck finish wait inside exit we successfully received we successfully received we printed and then we failed when we tried to send back I guess made it farther than we had before that's the first time I actually managed to get data to come in and actually see it that's good I don't have my teas anymore so now the question becomes does that fail because of this PR or does that just fail so we're going to go back to main copy this back to the device delete that you should take oh yeah this is from before it's just bytes doesn't matter this computer is on 192.168.1 network I believe so I'll double check here in a second I believe so buddy I don't have putty unfortunately unfortunate or unfortunate I could try and selling it be okay but your development machine needs to be on the same network I believe it's on the same network possibly if you use the same DHCP the client is running on the PC server is running on the microcontroller server except failed I think this is from a little bit ago so I'm still catching up sorry except I think it succeeded the time that we finally got it to go looks like your server code only accepts once outside of the well true loop it's inside of well true but I don't I don't know why it didn't wait to receive again type anything type something this is from before start typing print X yep thank you DJ Devin that's what I ended up with just type it'll be 1024 2048 if I now refers to a family a is part of the family no macaature I that part I don't know about if Biffle bears aware of the live streams it's a good question try exiting the loop and doing conduct close before we exit so have a close doesn't seem to have a close after condo it's and I mean at least the because it's with con that's kind of odd isn't it with con I mean shouldn't with be calling I think with is supposed to call close isn't it yeah okay it'd be super interesting for the PR author to drive you an answer to the live that would be yeah if they were around them become fun okay so we are where we deleted that so let's go back to main now that I actually managed to get simple server to go a few times let's try the main one see if it fails the same way or not thing I will say is this says it was edited I guess that's because I changed yeah I changed conduct close that's right after listen let's go here tell that our T's our sort T's daughter eyes all those T's interesting on the currently released version after you do that it's looping faster as a loop faster is like the first time we got to hear it felt like it just waited to receive so I was kind of assuming that this was blocking but now it's calling over real fast over and over so does not feel quite as blocking or else it's returning somehow action got closed one thing is for sure it does not fail the same way currently released one does succeed new one fails possibly one of those constants is misnamed or something so that succeeded again and then just to like triple extra absolutely check for sure I'm going to delete that again I'm going to go back to the PR one not only verify that it fails again but so that we can get the trace back be that to there be timing out with no data why is it different after the first time though we can move except we can move except down except once per connections until not exist the socket will close actions probably closed I guess it's maybe it's failing maybe it's trying to read but failing because the connections closed because except is outside that could be I will say that's kind of independent of this PR too though so I would say like maybe there is opportunity to change the example it sounds like honestly it sounds like maybe the example should be modified to where this goes down inside of here I would assume this con block is what they mean it falls out of the con block usually so like indention this indention level is typically referred to as a block of code so I would guess when they say con block they're basically talking about all this code here essentially all the code that's indented under that when we show the client again I can yeah this client I did not I never did get this client to work but this was the client that I was trying to do maybe if it sent 1024 maybe this way it could work I'm going to do the teas first but I'll try this one afterwards I just want to test it the same way we just did it a couple of times yeah we totally do fail with this and this is on one of those constants I'm guessing we might actually there might just be one of these that is that is misnamed that calls whiznet which makes it a constant of 18 it fails at 46 and then inside whiznet socket exit which is at 184 the client is a one off let's see the client is a one off use of a connection so the server needs to have except in the loop the client server are compatible either new connections every time or reusing the same connection okay so they could reuse the connection if they wanted eventually I think it won't run exactly the same on a Wi-Fi board it'll have to be modified this one's written for cpython so it doesn't on a microcontroller it wouldn't be on the it wouldn't get to the network it will need some kind of network setup or something 84 failed to disconnect I wonder if these ones should have got leading underscores I'm not sure why it thinks it didn't exist though because it does seem to be there module object has no attribute 184 mmm does being protected doesn't actually exist though right this doesn't actually prevent access to it does it yeah this one does send once and then close yeah understanding of the current server code yeah no I agree I agree I'm not I don't disagree with that and that's what I was saying too like I would say feel free somebody if somebody wants to make an issue or a PR like to change the example because it sounds like the example is not the example should be this like please feel free anybody who knows like what they're talking about here more than I do because that's pretty much everybody I think please feel free to make an issue or a PR to kind of point out in that repo that this is not ideal the way that it was before I am following you yes and I'm gonna change this here but not like I'm we're not gonna change that in that PR that's gotta be like a separate change to that example this this testing is really trying to test that that PR is good or not not so much that the example that exists also makes sense but yeah I would say somebody if somebody who understands this part of it which it sounds like and Jay maybe you do if you're on GitHub if you want to please please make an issue or a PR and document your understanding of that I think that'd be super helpful for sure that's really weird that it doesn't think it has don't think it has that it's also weird that it's got the wrong line to but I guess I entered it at this point I also don't know on the device I suppose here speaking also to the point of I think David said earlier somebody if it wasn't David I apologize somebody mentioned using a Wi-Fi board to test speaking of I would also be totally on board if looking the examples I don't think there is one right now yeah if anybody wanted to make an issue or even better a PR with a bit of Python code that connects to this server and sends data successfully I would be more than happy to see that as a contribution as well from anybody that runs on a Wi-Fi device like it'd be awesome I think if we had the client code to go along with the server code and you could run both and they would actually work together I think that'd be awesome okay for now I think what we leave this with is just this is our stack trace and it does behave differently than the released version and it is a crash compared to the released version so like realistically we probably want to figure out why this crashes this way and get it fixed I think that is and the conclusion of our current round of testing here other ESP32S2 we've served on the 100% sure with the long message to see if other folks in the chat see a problem with my understanding you want to share a github link with the repo oh I can definitely do that or somebody probably did huh yeah okay there it is try moving the with statement above the loop I mean I can at this point I don't think this ties back to like this bit with this thing this is what I'm most focused on the loop being wrong here I agree that it's probably wrong I agree it could be better we definitely could fix it this though is really the bit I want to get this documented into here and then I'm probably wrapping up for the night I don't necessarily want to try to troubleshoot the loop right now and make it better let's say partially successfully successfully with a this is the simple test the wizzy WSGI server simple test isn't that 5k simple test control D does not do that is this just stuck popped up hello hello oh wait what is this okay never mind just stay there that's fine wiznet WSGI server WSGI server one word and then AIO post AIO post wiznet 5k AIO post then simple server simple server example wiznet 5k simple server the main branch of this library does execute the same example without raising an exception I think we'll want to figure out why this one behaves different and ideally better make it not raise the exception so that it'll behave the same as current be released library behavior just currently release library let's see simple server assumes one and only one but unfortunately there's no yeah empower both the feather and the feather wing I did see something about POE in there I've never used POE I don't think personally that would be really convenient for an IOT device though I must admit being able to just run one wire and have it be power and data that would be super convenient after you're done developing since it eats the USB port okay we're gonna post this we made it further hoping it would go a bit smoother but such as life sometimes with ethernet networks generally microcontrollers generally right it's easy to lose sight of the fact that the stuff we're doing is actually really really complex like circuit python makes really complex stuff really easy sometimes it's easy to lose sight of the fact of how complex the things we're doing actually are it's always good I think probably to just get stumbled every once in a while when you go to test something and have it just not work at all how you're expecting we worked through it we got there we did find a difference I'll probably dig a bit more but just not tonight it's weird to me I mean the first thing that I my first inclination is like it almost feels like somehow this being protected is actually being functional but everything I think I know about python is that that is a suggestion only that it doesn't actually make anything protected or private so it doesn't really make sense as a hypothesis but I'm not really seeing anything else that would make sense because this does exist seems to and it's still there so probably when I get back to it I'll print the dir of that object and get it to list some stuff out and see if that's amongst it and then start chasing from there to figure out if it is or isn't in there and if it's not then try to figure out why but testing how well it does as DHCP server sounds interesting not expecting much from the single fight chip and you have dual network with web web workflow okay we post that yes alright so thank you everybody for watching thank you everybody who helped out in the chat I do appreciate all of your help I would not have made it as far as I did without all of your help I'm sure if anybody is interested like I said definitely please feel free and and hug reports to anybody who wants to make an issue and or a PR talking about that example code and how it could be changed to have the acceptance side also anyone's interested in working on client that runs on microcontroller that would be super cool as well that's another way you could definitely earn a hug report for me for sure I do hope everybody has a good night and a good weekend and all that stuff I will be back tomorrow morning at 10 am central time on my own channel to stream some more I don't know exactly what we'll be working on yet maybe this maybe something else I'll have to decide in the morning but that's the next time I'll be on and so yeah have a good night everybody I will see you then if you're interested in tuning in otherwise I'll see you next time we'll be back next week as well for deep so thanks again for what for everyone who helped out in the chat appreciate all of you and yeah I'll see you next time