Johnny-Five servo controller

In this sample, you will use Johnny-Five running on a Raspberry Pi 2 or 3 to control a servo connected to an Arduino (with Firmata installed).


This sample only works with the Windows 10 IoT Core Anniversary Update (Build 14393) release with Visual Studio 2015 and does not currently work with any newer Windows releases or Visual Studio 2017. We are looking into adding Node.js support to UWP in a future release of Windows 10 IoT Core.

Hardware required

  • Raspberry Pi 2 or 3.
  • Arduino Board (Uno is used in this sample).
  • USB to USB B cable.
  • Servo.

Set up your PC

  • Install Windows 10 with November update.
  • Install Visual Studio 2017.
  • Install the latest Node.js Tools for Windows IoT from here.
  • Install Python 2.7.
  • Install Arduino software from here.
  • Install Git for Windows. Ensure that Git is included in your ‘PATH’ environment variable.

Upload Firmata to your Arduino

  • Connect the Arduino board with your PC using the USB cable.
  • Open Arduino software.
  • Go to Tools->Port and select your device.
  • Go to Tools->Board and click on the type of Arduino you have.
  • Go to File->Examples->Firmata and select StandardFirmata. This will open up a new window with the Firmata sketch.
  • Click the upload button to upload the sketch to the Arduino board. You should see a “Done uploading” message when the upload is complete.

Create a new Johnny-Five (Universal Windows) project

Start Visual Studio 2017 and create a new project (File | New Project…). In the New Project dialog, navigate to Node.js as shown below (in the left pane in the dialog: Templates | JavaScript | Node.js).

Select the Basic Node.js Johnny-Five Application (Universal Windows) template (shown below), enter a name for your project, then press OK.

Node.js Johnny-Five Project Dialog

Wait for the Johnny-Five package and its dependencies to complete downloading. This will be indicated by the message below in the npm output window.

Node.js Output Window

Right-click on the npm node in the Solution Explorer (shown below) and select Update npm Packages. This step will run npm dedupe and update serialport (a Johnny-Five dependency) with a version that works with Node.js UWP.

Node.js Npm Menu

Set up the connection between your Arduino and Raspberry Pi 2 or 3

Connect your Arduino and Raspberry Pi 2 or 3 with the USB cable. If your Raspberry Pi 2 or 3 is connected to a monitor, you should see the device getting recognized as shown in the image below (the name of the device may be “Arduino Uno” instead of “USB Serial Device”):

Arduino Uno Start Screen

  • Replace the code in app.js with the code shown below.
    var five = require("johnny-five");
    var board = new five.Board();
    board.on("ready", function () {
        var servo = new five.Servo(3);
        // Sweep from 0-180 and repeat.
  • Attach the servo to the the arduino board using pin 3 (you can also change the pin number in app.js). In the setup shown below, the signal wire is connected to pin 3 and the power source is the Raspberry Pi 2 or 3.

Arduino Servo RPi2

Deploy the app to your Raspberry Pi 2 or 3

  • Go to the Project menu and select ‘<Your project name> Properties’ (You could also right-click on the project node in solution explorer to access Properties). Enter the IP Address in the Remote Machine text box. Since you’re building for Raspberry Pi 2 or 3, select ARM in the dropdown menu.

  • Now we’re ready to deploy the app to the Raspberry Pi 2 or 3. Simply press F5 (or select Debug | Start Debugging) to start debugging the app. This step will also start rotating the motor on the servo.


Was this page helpful?
Additional feedback?
Thank you! We appreciate your feedback.
Follow us