[MUSIC] Hi everyone, my name is Patrick, and I'm a web developer from Sydney. I've recently been looking into using JavaScript to control devices such as Arduinos, the Elite Emotion, Ninja Blocks and hopefully very soon this, Pebble watch. Today I'm gonna be going over the absolute basics of controlling an Arduino using Node. We're gonna cover connecting up to a computer, getting Node to communicate with the Arduino, and hopefully, by the very end, blinking this LED light on and off. I'll be sticking to absolute basics here, so we're not going to be doing anything too advanced, hopefully. In future tutorials, I'll go over this and it gets a little bit more complicated. But, for this one, we're gonna show you how to get started. So, let's do that and get started. What is an Arduino? A lot of people have read the name online, or they've heard it mentioned, but they've never actually seen one in action, so this is it. It's a single board micro-controller that's open source which basically means that you can control electronics using a platform that anyone can build and tinker with. The people at Arduino are lovely enough to have open sourced it, which means that anybody can make their own Arduino boards that really want to. This one here, in particular, is the Arduino Uno. It's one of a variety, of different models that the lovely people at Arduino have released. You can have a whole range of components connected to it, too, like LED light bulbs, sensors, and even shields, which are things you kind of stack on top of Arduinos to add more functionality. This one in particular is a MIDI, shield which has the ability for, to play sounds, like a MIDI Keyboard does. Node.js is a platform that takes JavaScripts, a scripting language most commonly used for web pages, unless you're writing up network applications such as web servers. We'll be using it today, to run a web server that'll talk to our Aduino. If you haven't used Node.js before, get started by heading over to Node.js.org, which I'm showing on screen here. Click that Install button and get it installed and running on your computer, so that you'll be able to continue and follow along with the example code that I'll be putting up. [BLANK_AUDIO] So why Node.js and Arduinos? Why link these two technologies together? Well, one of the strengths of JavaScript is that there are quite a few APIs out there, which you can join in different ways to make ideas come to life. Want to develop a robot that takes instructions from your Twitter followers, or a coffee machine that makes you a different style of coffee, depending on the weather outside? If you want to add a Leap Motion as an input device, or feed in data from your Jawbone or FitBit fitness products. The possibilities are going all the time. And JavaScript is becoming an easy to use bridge between technologies, because we've got a whole bunch of APIs we've got access to. And what is Johnny-Five? Johnny-Five, is one of those open APIs that makes JavaScript such a valuable language to be developing this sort of thing in. It allows you to control your Arduino using very similar functions to those that you'd use if you were programming it just using the Arduino platform that comes with the Arduino itself. We'll be doing a lot of this stuff in the tutorial that it's explaining here, so don't worry too much. But you can see, there's a lot of cool things that people have started to make with it. Wireless Nodebot Kinnect controlled robot arm, and LCD Running Man. So, you know, the possibilities get pretty exciting. Okay, to get started we'll need to connect our, our Arduino to our computer. So, we'll do this by connecting the USB port to our Arduino. It serves as both the power to the Arduino, and the way to upload software to our Arduino. As you can see, once you plug it in, you'll have the on lights flicker on, which is a good sign. In this demo today, I'll be doing a really basic example of turning this LED light on and off. I've already got the jumper leads in where they should be. So if you need to pause this to be able to follow along, feel free to pause it now, and put the jumper leads in, in the way that I've got them. Connecting up the Arduino is pretty simple. Connect up the green one here, to pin 13 on your Arduino. Then connect up the red one to the 5 volt pin. And finally we connect up the black one, to the ground pin. Doesn't really matter about colors, you can use whatever color jumper wire you'd like. Now that that's all done, we're ready to go into the software part of the tutorial with what code we've gotta run, and where to talk to our Arduino. Node application is extremely simple. We've only got two files, an index JavaScript file and a package Jason file. If you are new to Node the package Jason file is what we use to provide any details about the application, and what other Node modules are required for that application. So, to start with, I'll go over this packaged up Jason file, and show you what's going on. So, here we've got what the name of our application is in this case, Node in Johnny-Five. Can name this whatever you'd like, totally up to you, but keep it all to one word. It doesn't seem to like spaces. It'll start complaining at you, so definitely stick to one word. We've got a version number. Once again, you can pretty much use any version number you'd like, really, for simple basic test applications. I've called it 0.0.1, because really this application is very, very early stages and isn't going to be doing too much. So, I'm keeping it at a very early version. Then the very important thing, which will definitely prevent our application working with Arduinos is our dependency section here. This is where we say what other modules we need, running and in our Node application for this to work. So, we only need Johnny-Five, which is the module I was showing earlier. And this here is the version. So, in this case, we want the latest Johnny-Five version of that module. Basically, we're doing such simple stuff, just basic turning an LED light on and off, not likely to change. So, we're gonna assume that, in every future version of Johnny-Five, it'll be compatible with what we're gonna be doing here. So, there's no need to really be, specific on which version we're wanting. Now we'll go on to the index JavaScript file. Our index JavaScript file contains all of the functionality, but the node application. So, this pretty much is our note application in 19 lines, two of which are Console logs. So, very, very small application here. I'll go through it step by step and explain what everything is and why it's there. Firstly, we've got our five variable. Our five variable just requires the Johnny-Five module. Once again, the reason that we've got it here as well as in the package Jason file, is that we're assigning all of the different objects and functionality. That we gain from the Johnny-Five module into this five variable so we can access it throughout the node application. An example of that is our next line here, which is board. Our board variable, is creating a new board object which is part of the Johnny-Five module. So we're looking into the Johnny-Five object here, that we've required here, and we're grabbing the board object. Which is all the part of the Jonny-Five module. We don't have to worry about any of this. We don't have to really create any of this. It's all been there. Thanks to the geniuses who have come before us. Next up, we are declaring a few more variables that we use later on, so we are declaring the LED variable, and we are declaring toggle state variable. I'll explain these a bit later on. [BLANK_AUDIO] To begin, look at this here actually. This is an important one because this is what will come up first, when we run our application. It's just a console log saying waiting for device to connect. What that means is that, that will come up first, as soon as the known application is starts up just to let us know that the new application is at least running. But we don't know yet whether our Arduino has connected up, and whether we can talk to it. What then happens, is, using this baud variable here that we created. Which is a Johnny-Five board object. We say, on ready, which means, when we've got the event of ready fired from the board, which means. The board's pretty faster, sends any sort of commands and requests to it. We run this function right here, and this function starts off with a console log saying board ready. This will just let us know, if we're watching the console while our node application is running, that the board is ready to receive. Our request. It also is a good way to devote whether, or not the board is connected properly. You are doing a board. Next up, we use this LED variable that we declared earlier, and we create a new LED, once again part of the Johnny-Five module. We're basically just letting it know that we've got an LED. At pin 13 which is what we plugged into earlier. Then we get to the JavaScript bit which is, we're setting an interval using the JavaScript function which many of you might be used to if you are JavaScript gurus. Basically set interval means that we're gonna use this function here, toggle LED. Every 200 milliseconds, and you can play around with this number if you'd like later on, just to experiment, and change how often the LED light gonna toggle on and off, but basically we're gonna say, run this function every 200 milliseconds. What isn't that function well, the function here has. Three lines and one life line which is just there for user reading. Basically we use this variable here, toggle state, which we set up earlier to be false. And each time toggle LED runs, will change the value of toggle state from true to false or from false to true. So, it basically just changes it the opposite of what it was. Then, if total state is true, we turn our LED light on, otherwise turn it off. So, basically, we keep changing toggle state on and off, on and off, in turn, turning our LED light on and off and on and off. [BLANK_AUDIO] You've. You're following this now and kind of, picturing the function running in your head. If you'll notice there is nothing that turns off this LED, so it will theoretically go on forever continually turning on and off, on and off until we either disconnect our Arduino or we turn off this node application. And I'll be showing you how to do that to. Theoretically, you could also include some other functionality, in the error to turn off the, Intel by clearing Intel if you'd like to but in this tutorial to keep things simple, we're just gonna give it to the basics I'm showing you. This is how you can control the Arduino from Node, and then you can add as much functionality as you'd like to. On top of this and have a bit of fun. Now that we have those two files up there and ready to run our Node application, we do have to make sure those dependencies we mentioned, are there and available to run. So, what I've done is I've opened up a tunnel, and I've gone to the same folder that we put those two files in to prove that to you. I'll just show you there. So, you've got the index JavaScript file, and our package JSON file. So. How you would usually run a node application is just Node index.js. And we're gonna attempt to run it. And what we see here is that is says, cannot find Module Johnny-Five. Which is fair enough. We've told it in the Index JavaScript file. That there's gonna be a node module called Johnny-Five and it's gone and looked for it and can't find and it is now very upset at us for lying to it. So, we need to get it installed. To install it you can use an incredible package manager called MPM. MPM just runs through your package.jason file, and installs any dependencies that you've got listed. If you don't have MPM on your machine just do a quick Google search for MPM, and install it on your computer. It's quite a simple process, so I won't cover it here. So basically, once you've got MPM installed, you type in MPM space install. And, it will go through looking through our package Jason file. It also does a nice bunch of warning us, saying we don't have a few of those that we could have had. Description I think and a few other ones. So, basically, it's gone through and installed our modules here so we've got all the Johnny-Five Modules, and all this other stuff that it deems necessary to run our application. So now, I'm going to clear this, but before we run our actual. Application we're gonna need to set up our Arduino, so that it's able to receive communication from our Arduino application. To get this communication working between our Arduino and the computer, we just need to upload a bit of code to our Arduino. Arduino calls these bits of code sketches. Which you upload and then install onto the Arduino and then the Arduino knows what it needs to do, In our case we don't need the Arduino to do too much. Most of our functionality is in Node, all we need to do is install a bit of code to ensure it understands how to communicate with the computer. First off, before we install it, if you haven't used the Arduino software before, double check that your serial port is pointing to the correct USB port. You might need to do a bit of trial, and error with this one if you're not sure which USB port is the correct one. But in my case, it was this TTY USB modem. Do a bit of trial and error to check which will work if you are having any issues with uploading your code to your Arduino. Definitely check that setting right there. I've also got the board set up to be Arduino set up to whichever board [INAUDIBLE]. Then top load the sketch. We're going to go to file, examples. And then you'll have this on yours too Fermata, we want the standard Fermata, sketch here, and this as it says here is a generic protocol for communicating with micro controls, from software on computer. That is convenient, because that's exactly what we want to do. We want to communicate from our notes software to our micro control, which is our Arduino. So, to upload this to our Arduino, make sure you've got it plugged into your computer still, and click upload. It'll compile the sketch. It'll upload it onto the Arduino. And then in a few seconds it should be done. There we go. So, it's done uploading, which mean's you've now got the standard Fermata software or a standard Fermata sketch. On your Arduino, which means we're ready now, to move on to the next very exciting bit of running our Node code and communicating with that Arduino. We've got our two files set up. Our index JavaScript which has all the code for our Node application. We've installed all our dependencies, using MPM. We've also got our Arduino connected and running the standard Fermata, sketch code; which means it's now ready to accept all commands that will come to it from our computer. So, all that's left is to be in our terminal and type in Node index.js, and when we run this, we've got our, waiting for device to connect, message along with a few messages that come from the Johnny-Five Module. It's found our serial port, which is the USB port that we've got the Arduino connected to. Your one might be very different to this. Doesn't really matter. The main important thing, is that our console log that we set up, which said, board ready, has appeared. And if you turn to face your LED light, you'll see that it's now flashing. Which is lovely. It means that our code is working. We're sending our commands to the 13th pin, telling it to turn an LED light on and off. And so it's turning on and off, and on and off, on and off. Just as we requested it to. The only important question is how do you get it to turn off? How do you stop it from constantly running? This note application. If we go back to the terminal here, what you've gotta do is just press Ctrl C and then Ctrl C again and it'll close the board and it'll stop that light blinking. If you timed it correctly, the light'll be off. If you time it slightly differently, the light will stay on. And that's okay, really. It's not a big deal. If you want to completely turn it off, you can just unplug the USB from the computer, and it will turn off all power to your Arduino. It won't harm it in any way. It's just a quick way of getting it to. Stop doing what it was doing that you really didn't want it to do. And that, my friends, is how you turn a LED light on and off, and on and off in an infinite loop using node Johnny-Five and Arduino. If you followed along, you should now have an LED light, bending to your node application as well. Good work. This is the basics. There's a lot more to do from here. If you've got any questions, or if there's anything that I've missed, feel free to get in touch with me. My name once again is Patrick Catanzariti. I am on Twitter at thatpatrickguy or I've got a website Patcat.me. So, feel free to get in touch, if you make anything really cool with Arduinos following up from this tutorial, definitely get in touch as well, we'd love to see. Thanks for taking the time, to watch, and I hope you learned something new. See you.