 How many of you have heard of ESP8266? Everyone in the room? Almost everyone in the room. So I'm from the company that makes that. And we also do something with ESP32, which is the bigger brother to ESP8266. And my talk today is going to be a little different from what we've been hearing so far because I'm going to be showing a lot more code and demoing on stage. But more importantly, it's going to be about what happens after your prototype phase is done. Because when you say ESP8266, the first thing that comes to your mind is the maker community, the DIY community, the hacker community. And this particular presentation is for what happens after that. So this is a little bit about the expressive. So I realized this. So this was not in my slide deck. So this is a standard about the company slide deck. I thought everyone would know the expressive system. But everyone knows ESP8266, right? A lot of people have like, they ask me what is expressive system, but they knew about ESP8266. So that was funny. But yeah, so we are a 10-year-old company, and we have been in the chip making business for that long. And 8266 is our most popular one. But the 32 one is the latest flagship one. And what we've added is Bluetooth, both Bluetooth classic and Bluetooth low energy to that chip. Yeah, that number is actually a little old. We are now at the solid 260 employees all over the world. I'm from the India office here. And that's about the company. So expressive loves open source, everything that we've been doing. We have been releasing to the public for the last four or five years, starting with the ESP8266, which became a very popular chip courtesy of Hackaday and the Hacker community. And yeah, I mean, after that, most of the people that have joined expressive have joined expressive because they were working on tools to do things with ESP8266 or ESP32. And then expressive was like, you know what, just join the company and work from there. So that's a very nice culture because we have people working at expressive from all over the world. One of my colleagues works from Australia and other works from Vietnam. And all of those people were initially contributors and then they were employed. So that's a very great culture that we have at expressive. So these are our two most popular projects, the ESP idea, which is SDK for ESP32, and the ESP RTOS SDK, which is for the RTOS team. So today, what we're going to be talking about is how to take these and add some software components on top of that and then go to production. Okay, so about me, I have some production experience myself. So I was part of the team that did a crowdfunding project based out of Pune, India. This is back in 2014. And yeah, I mean, it wasn't exactly an internet of connected things because it was based on Bluetooth low energy, but it had a lot of production related things because we had to mass manufacture a thousand units. So yeah, I learned a lot about that there. So I'm going to be talking a bit about that. There's one more product that I did after that in 2017, 2016, 2017, which was a Wi-Fi development board. I was not using the ESP32 because that had just been launched. It was using something known as the Marvel 88 MW300. So I have some experience with production. So I'm going to be sharing a bit about that today. So how many of you were there for the first session where Mitch and Bunny and everyone were talking about, yeah, so production is a pain. And as Mitch rightly said, everyone thinks, yeah, I will just go to production after that. And so that's like one line, that's the end of them all. Because it's a very different experience from what we are used to. So I'm not very well eloquent kind of a person, but there's a hardware hacker called Bollport who went on a rank one day on Twitter, right? And he was like, you know, why your Kickstarter's failed and then he did like 30 tweets after that. So I just took those tweets and I put it in a table in an Excel sheet and I'm going to present that as part of this because honestly, yeah, and that's the tweet that started it all, right? So Bollport was like, you know, why are Kickstarter's are failing this? It was a beautiful tweet and everyone from the hacker community was like, this is amazing stuff. So let's start. So the first thing is coding, right? So I don't want to call maker coding sloppy because that's rude, but Bollport said it. So I don't want to, yeah, yeah. So just let's just leave it at that. But yeah, and this is really important, right? Because inefficient coding means you'll probably require two megabyte flash. But if you're doing things efficiently, you are freeing your mallocs, that means you'll probably get done in one megabyte, right? And when I'm prototyping, I don't care about my fees. I just care about my mallocs and mallocs, right? So that's a C job given the number of laps I got. Mostly there are Python programmers in the house. Yeah, or JavaScript, worse. Anyway, not too big size. Yeah, so essentially when you're building products, when you're prototyping, your issues are issues that you can solve on Stack Overflow. But when you're talking about stuff like, how do I do customs, how do I do certification? You're going to have to hire consultants which costs money and which you don't typically force. The next thing is sourcing, right? Because you can order five components of Iraqi, you can order 10 components of Spark, and you'll be well on your way. You could do that with PCDs too, because OSH Spark is doing great. There are a bunch of other services, right? But when you're doing a thousand units, you can't do that because you have to talk to the distributor and you have to figure out some deal. That guy's going to send you some mail, you're going to reply to it. It's going to be a long thread. Then you have to wire him money, not your typical credit card experience. A bunch of differentiated things are going to happen there. And after that, you're going to get your components. And all of this has to be in time before you go to production. Even a single component missing means that your production can't happen on that day and everything has to be by Spark. So that's a very different experience. Yeah, I mean, this is kind of overlapping with what I just said. In free next day delivery, I had a free PDX AP, or USPS 202, but you can't do that. Yeah, testing is again something. So Bunny isn't here actually, but Bunny and Jobs have been job setting mostly. I've been working on a project called Exclave, which is great, right? Jobs has a top, I think, I'm not sure. I think it was from 35 CE3. Yeah, it was from 36 CE3 or something like that, where they're building a great framework for testing. And that's because as makers, we don't test our prototype so much, but when you go to production, you have to catch each and every bug, otherwise you're going to have returns and that's going to be very expensive. Again, when you're prototyping, what's support? Yeah, you've never heard of that, but you're going to have angry customers writing very shitty things about you on Amazon if you don't give them the right kind of support, right? And that's what you go into production means. No? Yeah, sorry. Oh, I think I went too right side, but anyway, circuit design, you look at different components, you look at some open source schematics, just put stuff together. But when you're going to production, you have to think about a lot of things because just things like certifications are going to matter. Some components are not going to be as easy or available as others. Some are going to be easily available, but they're going to be expensive. So you're going to look for Chinese counterparts, right? Which are cheaper. And in that case, it's going to move things around. So again, that's something that you have to do. Again, the next part is something which I kind of disagree with the bold part here because Ticad is doing great, right? Ticad is doing amazing. And that's really for the community, man. Like, kudos to the community because everyone just rallied behind that. It's enclosure. Again, this is something that people usually three different people would see and see laser cut, everything, it works great. Early developers are happy with it. Early adopters are happy with it. The minute you start thinking big, the minute you start thinking about more than 500 or 1,000 units, those numbers don't add up. Then you have to do injection holding and that's a very different thing. Jobs has a good video. I think Chin may have recommended that. So, again, shipping. So this is something that I made a mistake on when we were doing the crowdfunding campaign that I talked about earlier. We should have explored a lot more options, but by the time that we shipped, we were quite late. So we had to go with FedEx, which was exorbitant, right? And you don't realize that unless you're doing huge volumes, it doesn't make sense to do FedEx. Yeah, again, this is one of those what syndrome is that? Embossed syndrome, things that kind of happens when you're going to production. Yeah, again, this is something that we did not foresee. When you have boxes, you need to hold them, keep them and they stack up like crazy. And you don't really have that kind of realistic if you're doing this as a small company. Compliance is again something because this can incur heavy legal fees, right? Everything from the bar code that you put on your device, on the packaging, right? To the certifications in case you are a wireless device, right? It's all crazy. Plus, you've got power certifications for some countries and yeah, you have to, you can't control where your customers are. If you start doing that, that gets bad price. So again, you have to think about those things. Yeah, and this also happened with me. So yeah, pricing is a pain. Typically people suggest that, you know, if your bomb cost is $5, you should be selling it for at least 12 and a half. That's 2.5. But anyways, that is something that we don't figure out. Yeah, and this is like the final thought, right? Like before you go to production, you're like, how hard could this be? And that's how you end up. Yeah, again, this is also something that happens. Yeah, this is the last point. So again, this is something that happens with typically all Kickstarter projects, right? I don't know a single project that has delivered on time. I think Bunny's book delivered on time, sorry. Yeah. Yeah, it was a crowd-supply, it was a crowd-supply. Yeah, but we were on crowd-supply and we didn't deliver on time. But yeah, I mean, this sucks and this is a genuine concern, but that's where the, you know, there's a gap in knowledge, there's a gap in community knowledge when it comes to production. Okay, so the next part that I'm going to start is, so far it's all been about hardware, right, primarily. And the next thing that I'm going to do is I'm going to take a seat and I'm going to walk through a lot of code for connected devices. So the idea is that when you're building a project using Arduino, you're not typically thinking about things like over there updates. You're not thinking about how this is going to be in manufacturing. You're not going to think about provisioning. Provisioning is putting your SSID and Wi-Fi password in there, right? So now this part of my presentation is all going to be about the things that we can do in software. Why? Because software easily shares, right? I can easily give him a software piece, which is like, you know what? This will take care of your manufacturing thing, just use it, right? And that's how it spreads way better than hardware because hardware is a lot of customization. So this is actually a new project from Expressive. Again, like all things Expressive, it's completely open source. I think we have an Apache 2 or an MIT license. I think Apache 2. So you can use it, you can put it to whatever hardware you want, but I'll be talking about it in the context of ESP32 and 8266, but as you'll realize, it's not at all specific to either of those things. So this is the thing, this is the documentation if you want to follow along. Okay, so of course. Yeah, so far the presentation that I have been giving has been mostly verbal, but now it's all going to be cold. So indulge me. Okay. Yeah, I think it would be better if I just mirror. Yeah, I know. So this is going to go on YouTube and I'm going to invalidate for a skee. But I can explain why it does not matter. Is this visible enough for everyone or should I adjust? It's okay. Okay. Okay, so if you go to github.com slash expressive slash ESP jumpstart, you'll find this nice repository there. The first thing that we are going to do is we are going to do a hello world. So just to ensure that, we are starting from the bare basics. Before this, what I've done is I've installed a tool chain and I've installed our software development framework. So if you remember, I showed you to github SDKs, one for 32 and one for eight to six. So I'm using the 32 one right now. So what I'm going to do is I'm going to say make it as flash. And the next thing I'm going to say is make flash monitor. So what this is going to do is I have a board connected here. It's going to erase whatever is there on its flash and I'm going to start with the hello world. Why I want to do this is because in this presentation, what I'm going to do is incrementally add a feature and we are going to have seven such steps. In the first step, we are going to do a hello world. In the next step, we are going to do drivers for a push button and an LED. In the next step, we are going to do Wi-Fi configuration connecting to Wi-Fi. Then in the next step, we are going to scratch the third part and going to do something known as provisioning. Provisioning means you're going to use your phone to share your network credentials to the USB that you do. So right now, okay, so this is the hello world and everything's fine. It's just your basic hello world. I'll just show you guys the code before I, that's all there is, okay? Good enough. Why do print dance? There, so now that's your typical ritual out of the way. Now I'm going to do a make it as flash and I'm going to do make flash monitor again. So now I'm in a different folder. I'm in the driver's folder, so I've already written down some code. I'll get to the code in a bit, but it's essentially, I have a push button, I have an LED. Right now I haven't connected the LED, but it's pretty straightforward. So I have a push button on the development board that I'm using when I press a button, it turns on, something like that, right? Nothing very fancy to your typical getting started with our new time start. Oh yes, and essentially what we're trying to build is, we're trying to build a smart power outlet. One of those smart switches thing, which is because it's a pretty straightforward thing, right? So what we want to do is we want to have, okay. Oh yes, so yeah, essentially now I press the button. Didn't this happen before? Okay, I might have to skip this one because I'm not sure if this is the right place for debugging this. But I'll come back to this in a bit. Actually, let's just take a look at the code. If you look at the main folder here, I have an app driver.g and a board file for board specific things. And if you look at this, you'll basically have some code for a button and some code for LED. Now let's come to the Wi-Fi connection bit. So, yeah, so in this case, I'm going to put the Wi-Fi as LLI guest. Is that right? Are you sure? It's good. Okay, and the password is LR408, so let's see. 406, okay, so these are the two things that I'm going to add to this particular thing. The next thing that we're going to do is I'm just going to say make. This is the awkward silence part of the presentation. But are there any doubts about what I'm trying to do here? What I'm trying to do here is show what are the missing pieces which are common to all applications that want to connect to the internet. So, be it a smart fridge, be it a light bulb, be it a 3D printer, there are some things that you will have to do regardless of what you are. So typically when you are working with Arduino, what we do is we put our Wi-Fi credentials in the code and flash that code. That's what we are doing right now, okay? So, but when you go to production, you can't do that because you want the user to put in their own Wi-Fi credentials. That's why you need some other way because this is a headless device, right? Unlike your phone, which has a display and a keyboard, you need some other method to do this. Luckily for the ESP32, we have Bluetooth on board, but for ESP8266, we do that through Wi-Fi. We could do that through Wi-Fi in the case of ESP32 as well. How many of you have used an Echo device, Alexa device, something like that? A bunch of you, how many of you have used a smart device at all, like a light bulb? Some, sorry? Some pump. Some pump? Yeah. Okay. Okay, so now what happened is we put in those credentials in our firmware and now it connected, right? So I got an IP, it's still doing its hello world because it's in a separate thread, but this is the end of it in part, right? This is the part where it got connected, it got its IP. Great, but this doesn't work for us when it goes to production and right now we care only about production and not about prototype. So what we are going to do is we are going to go back and we are going to go to something known as network concept. So what we did was, now while this happened, let me just open a GitHub. So we realized that this is a common problem, right? And what we did was we created Android and iOS applications and we are like, you know what, use these to build your application. Again, these applications are open source because that's the right way forward and what you do is you decide what kind of variant you want to build with this and you say that, okay, I want to do provisioning over Bluetooth or Wi-Fi and then you just build this application. When it starts, it will start looking for devices in your vicinity which have a name with some prefix that you have, right? So if I'm from a company called, I don't know, Whirlpool, I want my devices to advertise themselves as under provisioning with the name WPL underscore some unit state, right? So I can ask my application to be like, you know what, just show me devices from this particular. So, this is the part where I need my phones. Again, a very interesting realization today was the Wi-Fi here blocks certain ports. So I was trying to do secure communication with the cloud on MQTT's PLS port and it wasn't working for quite a while before I realized that maybe the Wi-Fi is being constructed. Okay, so now if you have really on your phone, you could scan for this device and this will show up in your list of devices. Please don't connect because that will stop me from provisioning the device, but essentially this is what can happen, right? And again, from an architecture point of view, we have taken some decisions for you. Again, all of this is an open source. So if you want to change it, you can change it. But what we are doing is we are neglecting the transport level security. You can use it, but we are not enforcing that. Instead, we are doing public key exchange on top of that because we don't really control transports, right? Tomorrow a new vulnerability comes down in BLE, which it did apparently a few weeks ago. And then it could be that, you know, this is not secure. That's why we have certain mechanisms wherein we exchange public keys and we use that to send the provisioning information. This is provisioning information, not just for your network, but this is also for your cloud connectivity or anything else. Right now they're just going to do network because I'm going to be talking about cloud in my next. Okay, so this is going to be my phone. This is my phone, I'm just running the screen here. And what we do is you hit start provisioning and you see these devices near you. So think about this. So if you're a 3D printer manufacturer, right? And there are quite a few of them. And you want to send this printer to someone, but you want to fund them to connect it to their internet so that, you know, they can give remote cloud commands for starting and stopping the printer if there is a new firmware available. The firmware thing is especially important because that allows you to ship faster. As long as your firmware works, you can say that, you know what, boss, right now the features aren't all exactly there, but take this firmware and I'll give you a better firmware tomorrow. Okay, so right now what I did is I clicked on that thing and I am going to give it my phone's access point because that one, so yeah. So now what's going to happen is I sent the credentials over Wi-Fi. So this is my SSID and password. Everyone feels free to join to my mobile hotspot, but yeah, so I sent this over Bluetooth law and energy. So this is an inside joke for Indians in the house because Panipuri is one of our delicacies back home. But anyways, what happened was this was a headless device that had no provisioning and what I did was a scan for Bluetooth devices near me and I gave it the SSID and Wi-Fi that I wanted to connect. Right, after that it connected, it got some IP, that's it. Right, so this is one of the first things that your user has to do. So it has to be a very seamless experience and this is where most people go wrong right now when you buy an Alexa or a Google Assistant or something. The device experience is not all that great. Coming back to the good stuff. Okay, so now cloud connectivity. Okay, so this is a little, so this is something that I actually work on at my role in Espresso. So this is something that I think about a lot. But the, and I come from the maker community. So I'm a computer scientist who got into electronics and all of that was DIY stuff, right? The thing is we are at a very interesting place when it comes to hardware because we have so many amazing, okay, so someone dosed off. So this is a sign of a great presentation. Okay, then it's okay. But yeah, so the thing is we are at a point where people are doing amazing things with hardware, right? And everything's democratized. 3D printing has made cases democratized, open source software, Arduino has done great work. Kite as we were talking about, right? So everything is being democratized except a bit about internet connectivity and updates and all of those things. So because what happens is then you have to download some firmware, connect, install USB drivers, upload that firmware similar with Raspberry Pi. We have to like sudo update and all of those things. But it is connected to the internet. Shouldn't it be able to do it by itself? Why do I have to do that manually? And that's great because if you're a developer, you're used to those kinds of things in your day job, right? But if you are not, if you want to reach bigger audiences and that's what I think we at Espresso want as well is that there are so many awesome makers and makers have made Espresso what it is today to a big part, right? We became popular because of makers and community members. Not communists, I meant makers and community members. So yeah, so that's what made Espresso great and that's one of our ways of giving it back because we want to kind of make it very easy to connect to cloud. So what we have done, again, this is the first time that anyone from Espresso is showing this because this literally just launched yesterday is if you go to espresso.datab.io slash ESP jumpstart, you can download cloud credentials and start using it. Just get started, right? You don't have to sign up to AWS or Microsoft or anyone and be like, you know, I want to create credentials, here's my credit card. The credit card is especially something that I hate because I was a student once and that hurts, right? You don't know what's happening. You have to ask your dad for his credit card, all of those things. You don't want that. But we want people to enjoy the benefits of cloud communication. So what we are doing is we are like saying, you know what, take these credentials, do your project and these will be valid for 14 days. Come back after 14 days, ask for something again. We'll give you again, no issue. You can use multiple email addresses. That's not an issue. We are not going to stop you from doing that. But yeah, here are some certificates. Here's how you securely connect to the internet, right? Because that's when you start opening doors like crazy. I think I've completely ignored my slides so far, okay? Yeah, so we did drivers. We did VISA configuration, network console, now we're doing a cloud. Okay, so and the reason, one of the reasons I am only showing Amazon is because, you know, we have support for that. Plus Google and Microsoft are here, so I don't want to offend anyone. So let's just stick to using who someone was not there. Okay, so this is an important URL. If you guys, what will happen is when you sign up there, you'll get an email looking like this, where you'll be like, you'll get five files. These are the device certificates that you can flash on your ESP8266 or ESP32. Honestly, ESP Jumpstart is open source. If you want, you could make it work with something else as well. And that's fine with us too. We want people to be using it more and giving it back. Okay, so in this case now, again, what I'm going to do is, I'm going to say make it as flash. And I'm going to say make flash monitor. What I've done is I've downloaded the certificates that I made myself, right? You can put in your email address, you'll get the certificates yourself. And I'm just going to put them in the device. Now, again, this is important because this is something that happens at the manufacturing level. When your device is being manufactured, the certificates are put inside of it during that particular process. And each device has to have unique certificates, right? Because that's security 101. I've seen devices which have been reverse engineered and hacked, which did not do that. And that's honestly terrible. But what we want to do, one of the other motives here with this open source project is to have the best security defaults as possible. If you go to production with this, we want to be able to tell you confidently that what you are not missing out on any security. So I'm going to be talking about security again. But while this uploads, yeah. And at the same time, what we do have is we have instructions on our documentation and how to make changes to this cloud from a basic command. 10 minutes, that's it. Okay. Shh. I'm going to fall short. Okay, anyways. You did? Yeah, okay. Okay, so yeah, I'm probably going to have to rush through things. Man, this is the time. This is the place which is taking up the worst time. Okay. So now, again, what I've done is, I've resetted to the provisioning mode, but this time I have added my certificates again. So what I'm going to do is, I'm going to do the same thing that I did before. Where is that? Yeah. I'm going to start provisioning. It's going to start looking for Bluetooth devices. I'm going to say, you know what? Take this, okay. And then I'm going to say provision. Now what's going to happen is the device is going to get those credentials. Next thing that is going to try is, it's going to start connecting to AWS. It's connected. So the provisioning has stopped now because it got whatever it wanted correctly. And what it's going to say is that the output is false right now. That means the light bulb or the smart switch is off right now. And that's it. The update has been accepted on the cloud. Now what you want to enable is for you to go to your command line and be like, you know what? Oh, sorry. So to do this, even my laptop has to be connected to my iPhone because like I said, the port's been blocked. So again, now what happened is I set the output variable to true, right? So that means that if this was a smart plug, I would have received an event saying that, you know what? Turn on the light or turn off the switch. Something like this. So I don't want people, like I personally think that if you're a student, something someone who's in a used to Arduino and wants to get started with cloud, don't get started with all of those big fancy, heavy clouds which have, you know, which expect you to understand resource-based access control and functions and all of those things, right? Cloud functions. Instead, this is pretty straightforward because what you had to do was you just had to do their existing device firmware. Plus you had to do a simple curl call, which is as simple as it gets when it comes to HTTP, right? And that's it. You turn it on, turn it off. You can write an Android application if you're a mobile developer, if you're a web developer, you could do that. And what we did was we used the same device certificates that I gave you in the mail, right? So in the cert, so this is the file and that is the key file that we mailed to you. So those are the things that you use again. So again, this is extremely secure and it's not going to be the case that, you know, you can access somebody else's device or something like that. This is as security conscious as possible because this is mutually authenticated in this. Okay. Now this is the part where I wanted to spend the most time but that's going to be difficult. Okay, so so far, so a partition.csv is how your application gets divided when it goes to microcontroller, right? When it goes on the flash, the partition file is how it gets divided. You're familiar with this because you do that with the operating system on a laptop, right? You have a BIOS then you have a C drive or whatever, right? Similarly, we have a similar structure on ESP32 and what this means here, there are two data partitions and one app partition. The data partition is something where, you know, you keep user-related information that you want to access, that you want to erase in the case of a reset because let's say I'm using this device and I don't want it anymore and I want to give it to him. I'm going to remove those details from that because that's my personal SSID and password. And then I'm going to do that. So then there are, that's the envious part that we're talking about. The finite part is related to the OSI. But when you go to production, actually, what you have to do is you have to have a partition for OTA updates, right? So what happens is, now this is the important part because the OTA updates, you have to solve before you go to production for the first stage because if it's not in place, all of those devices are just running the firmware that they're running by default. So this is the part that you really have to get it right during production and that's what we are helping you with. Again, production, like what's the best way to do an OTA update is the equivalent of asking what is your favorite editor, right? Because there are so many answers and no one is wrong, luckily. But you could be sending encrypted packages over MQTT, TLS, block by block and then I could be reassembling those on my device side. You could be giving TLS and HTTPS URL from, which is pre-signed and then I have some certificates and then I use that to download that. So we are doing something like that here. Okay, so I have five more minutes, great. So I'm doing something like that here where in, we are assuming that you're posting your update binary on GitHub. That's why we have put GitHub server search in the firmware because then all you have to do is send the URL, right? Over MQTT or however way you prefer and then it will download it, install it. What happens is there is an OTA 0 and OTA 1 so it keeps on switching. So by default you'll start with OTA 0 then you'll install the new firmware in OTA 1 then you'll switch to OTA 1. The next time you're updating you'll put the new downloaded firmware in OTA 0. Again, all of this has to be verified. So all the images that come are signed and the sign, the keys that are used for signing are in the firmware by default. I want to actually get to that so I'm going to skip that. Now this is, so I'm not going to show that particular demo because I'm running short of time. The next thing that we have is again, we have a similar structure here, right? But if you notice, yeah, there are two data partition. There's one new data partition in this final app that we have. So this is called a factory data. Now think of this. So if I'm a manufacturer, I create certificates to connect to my cloud, right? And I give it to you and I'm using it but then I give this guy this device. He doesn't need to download the certificates again because it's still a valid device, right? But he can't be using my SSID and pass phase because that's data personal to me, right? So what we have here is we store the personal user data like SSID credentials, all of those things in one NBS partition and then we have another which is called a factory which can be used to keep all of those things, right? There is another thing that we do here is those, the manufacturing partition, we kind of, you can encrypt it in a different way if you want. But essentially what you do is, so far, okay, yeah. So what we do is we create a manufacturing.bin partition which we give you a Python script to essentially, you give it a CSV file, an Excel sheet and tell the Python file that, you know, what I want to keep these things in the manufacturing bin and then you create a .bin file and then flash it to the ASP. And that will give you the factory partition and then what you just do is just write this. So this happens at the manufacturing stage. So typically the production provider that you have, the factory that you are getting this manufactured from will do this for you. So you have to give him a bunch of certificates and he will sign, basically, he will create these binaries and fast. Along with some other things, for example, like the device serial number and the endpoint, the URL that it wants to connect the cloud. So yeah, so this is the last example here but actually that's not where all of this ends. So there are some more security considerations. For example, how do you sign the application binary? Where do you keep the keys for that? So this is where eFuses come. So this is a hardware feature, right? And what we have to do is we have to establish a chain of trust, right? The eFuses are where you have kept the first set of keys. Then that validates your bootloader and that goes to the application firmware, that validates that. So all of this has to be done in a stepwise sequence. So that you're building a secure thing. Again, we want to make this as easy as possible for everyone. So we have given some steps here. Why I can't show that is because that can end up with me breaking this particular device, right? Breaking in the sense that if I lose those keys that I used to sign this particular board, I won't be able to flash on this device again, which is exactly what should be happening but for the sake of demo purposes, I'm not going to do that. But again, these are instructions on how you can go forward in this. So, I know I'm done, but just to summarize, like we started with the hello world, we put in Wi-Fi, we first wrote the drivers, whatever logic that you're doing, it could be different for a 3D printer, for a smart fix, or a connected one. So the second part is where your custom logic works. Everything after that is more or less standard. The provisioning bit is there for all connected products. The cloud bit is going to be there for all connected products. The OTA thing is going to be there for all connected products and the manufacturing thing is going to be there for all products, not just connected products. So again, this is the first time that we're showing this. So again, all of this is open source including the documentation. So if you guys have any feedback, you are more than happy to come to it. And one last thing, I've skipped plenty of my slides, but earlier today, while discussing with Mitch and Bunny and everyone at the panel, we realized that there aren't enough resources for people to go to production, from a hardware point of view, from a lot of point of views actually. So I think Saini or Chinmay, one of them said we should do an awesome list kind of a thing. So what we created earlier today was, we actually created a GitHub repo. We have put in some stuff there. Mitch, I've sent you an email, so please feel free to contribute back to that. And essentially what it does is, where is that? Yeah, so essentially it's a list of blocks of books, tools, videos, and even tell-it-owns because that's how you learn, right? You learn from taking apart, right? Don't, like, watch that Dave Jones quote, don't turn it on, tell it apart. Yeah, yeah. So yeah, so a couple of us will be working on this. I've posted a link. Please feel free to contribute because, okay, yeah, please feel free to contribute because the point of ESP jumpstart or the point of this particular GitHub repo or the point of any of the talks that folks like Mitch and Bunny do is to spread knowledge. And this, we need a common space for this particular aspect of making and production and product. So yeah, I wish I had some more time, but I don't want to delay the next speakers. Hey, guys. Oh, that's going to be a very interesting talk. But yeah, that's it from my side. If you guys have any questions, I'm going to be around. I actually have another talk schedule later, but I guess you can call it. Okay, let's hand this to the speaker. Short time for questions. Yeah, I'll be quick. First of all, I would like to thank you for what they were doing for the community. I know like being a maker and having a chip provider that's really amazing. It's actually cheaper if you just get there. Actually, your support was also really nice. I actually did one project with my friend and yeah. So thanks regarding the question is what would be like the way ESP is not yet famous in Singapore? So Singapore has a tendency to have their own Why? I was actually talking to someone earlier. If I remember, they were talking about doing that. It's not actually, I think the player sees the thing is ESP is more suited for small light bulbs or switches because we have more application memory. So you don't have to just use us as a dummy. So that's why most people tend to use it as that. The Wi-Fi chipsets. I mean, technically that's how we started as a company, right? The way you're saying ESP started, like Espresso started as a company doing chipsets for cheap Android tablets, wherein we were just doing the Wi-Fi and Bluetooth fast. And yeah, I mean, technically you can still do that, but it's just that it's become so popular for the other things that people tend to not work on that so much. Okay, let's speak again. Yeah.